# GCP - アーティファクト レジストリの列挙

{{#include ../../../banners/hacktricks-training.md}}

## 基本情報

Google Cloud Artifact Registryは、**ソフトウェアアーティファクトを管理、保存、保護する**ための完全に管理されたサービスです。これは、**Docker**イメージ、**Maven**、npmパッケージ、その他のタイプのアーティファクトを**保存するためのリポジトリ**です。これは、ソフトウェア開発プロセス中に生成されたアーティファクトを保存およびバージョン管理するために、**CI/CDパイプラインで一般的に使用されます**。

Artifact Registryの主な機能は次のとおりです。

1. **統一リポジトリ**: **複数のタイプのアーティファクト**をサポートし、Dockerイメージ、言語パッケージ（JavaのMaven、Node.jsのnpmなど）、およびその他のタイプのアーティファクトのための単一のリポジトリを持つことができ、一貫したアクセス制御とすべてのアーティファクトに対する統一されたビューを可能にします。
2. **完全管理**: 管理されたサービスとして、基盤となるインフラストラクチャ、スケーリング、およびセキュリティを管理し、ユーザーのメンテナンスオーバーヘッドを削減します。
3. **細かいアクセス制御**: Google Cloudのアイデンティティおよびアクセス管理（IAM）と統合され、リポジトリ内のアーティファクトにアクセス、アップロード、またはダウンロードできる人を定義できます。
4. **地理的レプリケーション**: 複数のリージョンにわたるアーティファクトのレプリケーションをサポートし、ダウンロードの速度を向上させ、可用性を確保します。
5. **Google Cloudサービスとの統合**: **Cloud Build、Kubernetes Engine、Compute Engine**などの**他のGCPサービス**とシームレスに連携し、Google Cloudエコシステム内で作業しているチームにとって便利な選択肢となります。
6. **セキュリティ**: **脆弱性スキャンやコンテナ分析**などの機能を提供し、保存されたアーティファクトが安全で既知のセキュリティ問題がないことを確認します。

### フォーマットとモード

新しいリポジトリを作成する際には、Docker、Maven、npm、Pythonなどの中から**リポジトリのフォーマット/タイプを選択**し、通常は次の3つのいずれかのモードを選択できます。

- **標準リポジトリ**: GCP内で**自分のアーティファクト**（Dockerイメージ、Mavenパッケージなど）を直接保存するためのデフォルトモードです。安全でスケーラブルであり、Google Cloudエコシステム内でうまく統合されます。
- **リモートリポジトリ**（利用可能な場合）: **外部の**、公開リポジトリからアーティファクトをキャッシュするためのプロキシとして機能します。上流で依存関係が変更されることによる問題を防ぎ、頻繁にアクセスされるアーティファクトをキャッシュすることでレイテンシを削減します。
- **仮想リポジトリ**（利用可能な場合）: **複数の（標準またはリモート）リポジトリにアクセスするための統一インターフェース**を提供し、さまざまなリポジトリに分散されたアーティファクトのクライアント側の構成とアクセス管理を簡素化します。
- 仮想リポジトリでは、**リポジトリを選択し、優先順位を付ける必要があります**（最も優先順位の高いリポジトリが使用されます）。
- **リモート**と**標準**のリポジトリを**仮想**リポジトリで**混在させる**ことができ、**リモートの優先順位**が標準よりも**大きい**場合、**リモートからのパッケージ（例えばPyPi）が使用されます**。これにより、**依存関係の混乱**が生じる可能性があります。

**リモート版のDocker**では、Docker Hubにアクセスするためのユーザー名とトークンを提供することが可能です。**トークンはその後、Secret Managerに保存されます**。

### 暗号化

予想通り、デフォルトではGoogle管理のキーが使用されますが、顧客管理のキー（CMEK）を指定することもできます。

### クリーンアップポリシー

- **アーティファクトの削除**: アーティファクトは**クリーンアップポリシー**の基準に従って**削除されます**。
- **ドライラン**: （デフォルト）アーティファクトは**削除されません**。クリーンアップポリシーが評価され、テスト削除イベントがCloud Audit Loggingに送信されます。

### 脆弱性スキャン

**コンテナイメージ**内の脆弱性をチェックする**脆弱性スキャナー**を有効にすることが可能です。

### 列挙
```bash
# Get repositories
gcloud artifacts repositories list
gcloud artifacts repositories describe --location <location> <repo-name>
gcloud artifacts versions list --repository=<repo-name> -location <location> --package <package-name>

# Get settings of a repository (example using python but could be other)
gcloud artifacts print-settings python --repository <repo-name> --location <location>

# Get docker images
gcloud artifacts docker images list us-central1-docker.pkg.dev/<proj-name>/<repo-name>

# Get packages (like python and others...)
gcloud artifacts packages list --repository <repo-name> --location <location>

# Get SBOMB artifacts
gcloud artifacts sbom list

# Get vulnerabilities (docker images)
gcloud artifacts vulnerabilities list us-east1-docker.pkg.dev/project123/repository123/someimage@sha256:49765698074d6d7baa82f
gcloud artifacts docker images list-vulnerabilities projects/<proj-name>/locations/<location>/scans/<scan-uuid>
```
### 権限昇格

{{#ref}}
../gcp-privilege-escalation/gcp-artifact-registry-privesc.md
{{#endref}}

### 認証されていないアクセス

{{#ref}}
../gcp-unauthenticated-enum-and-access/gcp-artifact-registry-unauthenticated-enum.md
{{#endref}}

### ポストエクスプロイテーション

{{#ref}}
../gcp-post-exploitation/gcp-artifact-registry-post-exploitation.md
{{#endref}}

### 永続性

{{#ref}}
../gcp-persistence/gcp-artifact-registry-persistence.md
{{#endref}}

{{#include ../../../banners/hacktricks-training.md}}
