クリーンアップ ポリシーの設定

Artifact Registry のクリーンアップ ポリシーでは、不要になったアーティファクト バージョンを自動的に削除する、または無期限に保存するアーティファクトを保持するための条件を定義します。

クリーンアップ ポリシーは、アーティファクトの多くのバージョンを保存するが、本番環境にリリースする特定のバージョンのみを保持する必要がある場合に便利です。アーティファクトを削除する条件で削除ポリシーを定義し、アーティファクトを保持する条件で保持ポリシーを定義できます。

アーティファクト バージョンが削除ポリシーと保持ポリシーの両方の条件と一致する場合、Artifact Registry は保持ポリシーを適用します。

削除ポリシーによってトリガーされる削除は、Artifact Registry のプロジェクトごとの削除リクエストの割り当てに対してカウントされ、1 日あたりのリポジトリごとに 300,000 件の削除に制限されます。

ポリシー適用スケジュール

Artifact Registry では、定期的に実行されるバックグラウンド ジョブを使用して、クリーンアップ ポリシーに一致するアーティファクトを削除、保持します。変更は約 1 日以内に有効になります。

リポジトリあたりのクリーンアップ ポリシーの最大数

1 つのリポジトリには最大 10 個のクリーンアップ ポリシーを適用できます。

サポートされているファイル形式

すべてのリポジトリformatsについて、標準リポジトリとリモート リポジトリにクリーンアップ ポリシーを設定できます。

必要なロール

クリーンアップ ポリシーを適用または削除するために必要な権限を取得するには、リポジトリ プロジェクトに対する Artifact Registry 管理者roles/artifactregistry.admin)IAM ロールの付与を管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

この事前定義ロールには、クリーンアップ ポリシーの適用または削除に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

クリーンアップ ポリシーを適用または削除するには、次の権限が必要です。

  • artifactregistry.repositories.update
  • クリーンアップ ポリシーで条件を満たすアーティファクトを削除する場合: artifactregistry.versions.delete

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

Artifact Registry サービス エージェントのデフォルト ロールには、クリーンアップ ポリシーの条件を満たすイメージを削除するために必要な権限 artifactregistry.versions.delete が含まれています。

ポリシー ファイルを作成する

ポリシー ファイルは、削除ポリシーと保持ポリシーを定義する JSON ファイルです。ポリシー ファイルを作成するには、JSON ファイルを作成して編集し、Google Cloud CLI を使用してポリシーを適用するか、Google Cloud コンソールを使用します。削除ポリシーでは、アーティファクトの削除条件を指定します。保持ポリシーでは、アーティファクトを保持する条件または保持するバージョンの数を指定します。条件とバージョンの数を、同じ保持ポリシーに使用することはできません。

削除ポリシーを作成する

削除ポリシーによって、アーティファクトの削除の最小期間または最大期間と、追加のフィルタリング条件を指定して、ポリシーを特定のアーティファクトに限定できます。

なんらかの理由で削除したくないアーティファクトがある場合は、削除ポリシーとともに、条件付き保持ポリシーを作成するか、最新バージョンの保持ポリシーを作成します。アーティファクトが削除ポリシーと保持ポリシーの両方の条件と一致する場合、アーティファクトが保持されます。

Console

削除ポリシーは、新規または既存のリポジトリに対して作成できます。

既存のリポジトリに削除ポリシーを追加するには:

  1. Google Cloud コンソールで [リポジトリ] ページを開きます。

    [リポジトリ] ページを開く

  2. リポジトリ リストでリポジトリを選択し、[リポジトリの編集] をクリックします。

  3. [クリーンアップ ポリシー] セクションで [ドライラン] を選択し、アーティファクトの削除を確定させる前に新しいポリシーをテストします。テスト結果を確認する詳細については、ドライランをご覧ください。

    ポリシーが意図したとおりに機能していることを確認したら、リポジトリの設定を再度編集し、[アーティファクトの削除] を選択してクリーンアップ ポリシーを適用し、選択したアーティファクトを削除します。

  4. [クリーンアップ ポリシーを追加] をクリックして、次のように追加します。

    • 名前: クリーンアップ ポリシーに名前を付けます。この名前は、リポジトリに適用するポリシーのグループ内で一意にする必要があります。
    • ポリシータイプ: [条件付き削除] を選択します。
    • タグの状態: タグ付けされたアーティファクトかタグ付けされていないアーティファクトかをポリシーで確認するかどうかを指定します。イメージをリポジトリに push またはリポジトリから pull するときに、アーティファクトにタグが付けられます。Docker タグの詳細については、コンテナのコンセプトをご覧ください。

      • 任意のタグ状態: タグの状態を無視し、タグ付けされたアーティファクトとタグ付けされていないアーティファクトの両方に適用されます。
      • タグ付き: タグ付けされたアーティファクトにのみ適用されます。
      • タグなし: タグ付けされていないアーティファクトにのみ適用されます。

      タグをサポートしていない形式は、untagged として扱われます。リポジトリで不変のタグが有効になっている場合、タグ付けされたアーティファクトは削除できません。

      クリーンアップ ポリシーに適用されるタグの状態の詳細については、TagState リファレンスをご覧ください。

  5. 削除ポリシーを定義する省略可能な方法は次のとおりです。

    • タグ接頭辞: タグ接頭辞のカンマ区切りのリスト。たとえば、接頭辞 teststaging は、タグ testenvstaging-1.5 が付けられたイメージと一致します。タグ接頭辞を使用するには、tagStateTAGGED に設定する必要があります。
    • バージョン接頭辞: アーティファクト バージョン接頭辞のカンマ区切りのリストです。たとえば、v1v2 は、バージョン v1.5v2.0alphav10.2 と一致します。
    • パッケージ接頭辞: アーティファクト名の接頭辞のリスト。接頭辞間で Enter または , を入力することにより、複数の接頭辞を入力できます。たとえば、red, blueredblue の 2 つの接頭辞を作成し、red-teamredisbluebird のアーティファクト名と一致します。
    • 次より古い: アーティファクトのバージョンがリポジトリ内に作成されてからの最小時間で、期間として指定されます。たとえば、30d は 30 日間です。それぞれ、smhd を追加することにより、秒、分、時、日の期間を指定できます。
    • 次より新しい: アーティファクトのバージョンがリポジトリ内に作成されてからの最大時間で、期間として指定されます。たとえば、30d は 30 日間です。
  6. クリーンアップ ポリシーは、[クリーンアップ ポリシーを追加] をクリックすることでさらに追加できます。

  7. [更新] をクリックします。

    クリーンアップ ポリシーがリポジトリに適用されます。[リポジトリの詳細] セクションで [Show more] をクリックすると、クリーンアップ ポリシーを表示できます。

JSON

{
  "name": "DELETE_POLICY_NAME",
  "action": {"type": "Delete"},
  "condition": {
    "tagState": "TAG_STATUS",
    "tagPrefixes": ["TAG_PREFIXES"],
    "versionNamePrefixes": ["VERSION_PREFIXES"],
    "packageNamePrefixes": ["PACKAGE_PREFIXES"],
    "olderThan": "OLDER_THAN_DURATION",
    "newerThan": "NEWER_THAN_DURATION"
  }
}

削除ポリシーには、名前、アクション、少なくとも 1 つの条件を含める必要があります。

name
削除ポリシーのスニペットでは、DELETE_POLICY_NAME はポリシーの名前です。この名前は、リポジトリに適用するポリシーのグループ内で一意にする必要があります。
action
削除ポリシーの場合、値は {"type": "Delete"} です。
condition
次の条件を 1 つ以上指定します。
  • tagState: TAG_STATUS は、タグ付けされたアーティファクトまたはタグ付けされていないアーティファクトをポリシーで確認する必要があるかを示します。イメージをリポジトリに push またはリポジトリから pull するときに、アーティファクトにタグが付けられます。 サポートされている値は次のとおりです。

    • tagged: タグ付けされたアーティファクトにのみ適用されます。
    • untagged: タグ付けされていないアーティファクトにのみ適用されます。
    • any: タグの状態を無視し、タグ付けされたアーティファクトとタグ付けされていないアーティファクトの両方に適用されます。

    タグをサポートしていない形式は、untagged として扱われます。リポジトリで不変のタグが有効になっている場合、タグ付けされたアーティファクトは削除できません。

    Docker タグの詳細については、コンテナのコンセプトをご覧ください。

  • tagPrefixes: TAG_PREFIXES はタグ接頭辞のカンマ区切りのリストです。たとえば、"test", "staging" は、タグ "testenv""staging-1.5" を持つイメージと一致します。 タグ接頭辞を使用するには、tagStateTAGGED に設定する必要があります。

  • versionNamePrefixes: VERSION_PREFIXES は、アーティファクト バージョンの接頭辞のカンマ区切りのリストです。たとえば、"v1", "v2" は、バージョン "v1.5""v2.0alpha""v10.2" と一致します。

  • packageNamePrefixes: PACKAGE_PREFIXES は、アーティファクト名の接頭辞のカンマ区切りのリストです。たとえば、"red", "blue" は、アーティファクト名 "red-team""redis""bluebird" と一致します。

  • olderThan: OLDER_THAN_DURATION は、アーティファクトのバージョンがリポジトリ内に作成されてからの最小時間であり、期間として指定されます。たとえば、30d は 30 日間です。それぞれ、smhd を追加することにより、秒、分、時、日の期間を指定できます。

  • newerThan: NEWER_THAN_DURATION は、アーティファクトのバージョンがリポジトリ内に作成されてからの最大時間で、期間として指定されます。たとえば、30d は 30 日間です。

条件付き保持ポリシーの作成

条件付き保持ポリシーでは、アーティファクトの保持の条件を指定します。保持ポリシーは、削除ポリシーの指定に従って削除されるが、保持する必要があるアーティファクトを保持するために、削除ポリシーと連携して機能します。アーティファクトが削除ポリシーと保持ポリシーの両方の条件と一致する場合、アーティファクトは保持されます。

Console

保持ポリシーは、新規または既存のリポジトリに対して作成できます。

既存のリポジトリに保持ポリシーを追加するには:

  1. Google Cloud コンソールで [リポジトリ] ページを開きます。

    [リポジトリ] ページを開く

  2. リポジトリ リストでリポジトリを選択し、[リポジトリの編集] をクリックします。

  3. [クリーンアップ ポリシー] セクションで [ドライラン] を選択し、アーティファクトの削除を確定させる前に新しいポリシーをテストします。保持ポリシーの結果を表示するには、少なくとも 1 つの削除ポリシーを設定する必要があります。テスト結果を確認する詳細については、ドライランをご覧ください。

    ポリシーが意図したとおりに機能していることを確認したら、リポジトリの設定を再度編集し、[アーティファクトの削除] を選択してクリーンアップ ポリシーを適用し、選択したアーティファクトを削除します。

  4. [クリーンアップ ポリシーを追加] をクリックして、次のように追加します。

    • 名前: クリーンアップ ポリシーに名前を付けます。この名前は、リポジトリに適用するポリシーのグループ内で一意にする必要があります。
    • ポリシータイプ: [条件付き保持] を選択します。
    • タグの状態: タグ付けされたアーティファクトかタグ付けされていないアーティファクトかをポリシーで確認するかどうかを指定します。イメージをリポジトリに push またはリポジトリから pull するときに、アーティファクトにタグが付けられます。Docker タグの詳細については、コンテナのコンセプトをご覧ください。

      • 任意のタグ状態: タグの状態を無視し、タグ付けされたアーティファクトとタグ付けされていないアーティファクトの両方に適用されます。
      • タグ付き: タグ付けされたアーティファクトにのみ適用されます。
      • タグなし: タグ付けされていないアーティファクトにのみ適用されます。

      タグをサポートしていない形式は、untagged として扱われます。リポジトリで不変のタグが有効になっている場合、タグ付けされたアーティファクトは削除できません。クリーンアップ ポリシーに適用されるタグの状態の詳細については、TagState リファレンスをご覧ください。

  5. 保持ポリシーを定義する省略可能な方法は次のとおりです。

    • タグ接頭辞: タグ接頭辞のカンマ区切りのリスト。たとえば、接頭辞 teststaging は、タグ testenvstaging-1.5 が付けられたイメージと一致します。タグ接頭辞を使用するには、tagStateTAGGED に設定する必要があります。
    • バージョン接頭辞: アーティファクト バージョン接頭辞のカンマ区切りのリストです。たとえば、v1v2 は、バージョン v1.5v2.0alphav10.2 と一致します。
    • パッケージ接頭辞: アーティファクト名の接頭辞のカンマ区切りのリスト。たとえば、red, blue は、アーティファクト名 red-teamredisbluebird と一致します。
    • 次より古い: アーティファクトのバージョンがリポジトリ内に作成されてからの最小時間で、期間として指定されます。たとえば、30d は 30 日間です。それぞれ、smhd を追加することにより、秒、分、時、日の期間を指定できます。
    • 次より新しい: アーティファクトのバージョンがリポジトリ内に作成されてからの最大時間で、期間として指定されます。たとえば、30d は 30 日間です。
  6. クリーンアップ ポリシーは、[クリーンアップ ポリシーを追加] をクリックすることでさらに追加できます。

  7. [更新] をクリックします。

    クリーンアップ ポリシーがリポジトリに適用されます。

JSON

形式は削除ポリシーに似ています。保持ポリシーの場合、action の値は {"type": "Keep"} です。

{
  "name": "KEEP_POLICY_NAME",
  "action": {"type": "Keep"},
  "condition": {
    "tagState": "TAG_STATUS",
    "tagPrefixes": ["TAG_PREFIXES"],
    "versionNamePrefixes": ["VERSION_PREFIXES"],
    "packageNamePrefixes": ["PACKAGE_PREFIXES"],
    "olderThan": "OLDER_THAN_DURATION",
    "newerThan": "NEWER_THAN_DURATION"
  }
}

以下を置き換えます。

  • KEEP_POLICY_NAME は、クリーンアップ ポリシーの名前に置き換えます。この名前は、リポジトリに適用するポリシーのグループ内で一意にする必要があります。
  • TAG_STATUS は、タグの状態に置き換えます。これは、ポリシーが、タグ付けされたアーティファクトとタグ付けされていないアーティファクトのどちらをチェックするかを示します。イメージをリポジトリに push またはリポジトリから pull するときに、アーティファクトにタグが付けられます。Docker タグの詳細については、コンテナのコンセプトをご覧ください。

    次のオプションがあります。

    • tagged: タグ付けされたアーティファクトにのみ適用されます。
    • untagged: タグ付けされていないアーティファクトにのみ適用されます。
    • any: すべてのバージョンに適用されます。

    タグをサポートしていない形式は、untagged として扱われます。リポジトリで不変のタグが有効になっている場合、タグ付けされたアーティファクトは削除できません。クリーンアップ ポリシーに適用されるタグの状態の詳細については、TagState リファレンスをご覧ください。

  • TAG_PREFIXES は、タグ接頭辞のカンマ区切りのリストに置き換えます。たとえば、接頭辞 teststaging は、タグ testenvstaging-1.5 が付けられたイメージと一致します。タグ接頭辞を使用するには、tagStateTAGGED に設定する必要があります。

  • VERSION_PREFIXES は、アーティファクト バージョンの接頭辞のカンマ区切りのリストに置き換えます。たとえば、v1, v2 は、バージョン v1.5v2.0alphav10.2 と一致します。

  • PACKAGE_PREFIXES は、アーティファクト名の接頭辞のカンマ区切りのリストに置き換えます。たとえば、red, blue は、アーティファクト名 red-teamredisbluebird と一致します。

  • OLDER_THAN_DURATION は、アーティファクトのバージョンがリポジトリ内に作成されてからの最小時間であり、期間として指定されます。たとえば、30d は 30 日間です。それぞれ、smhd を追加することにより、秒、分、時、日の期間を指定できます。
  • NEWER_THAN_DURATION は、アーティファクトのバージョンがリポジトリ内に作成されてからの最大時間(期間)に置き換えます。たとえば、30d は 30 日間です。

最新バージョンの保持ポリシーを作成する

保持ポリシーを作成して、特定の数のバージョンを保持できます。条件付き保持最新バージョンを保持の条件を、同じ保持ポリシーで使用することはできません。

保持ポリシーは、削除ポリシーの指定に従って削除されるが、保持する必要があるアーティファクトを保持するために、削除ポリシーと連携して機能します。アーティファクトが削除ポリシーと保持ポリシーの両方の条件と一致する場合、アーティファクトは保持されます。

Console

最新バージョンの保持ポリシーは、新規または既存のリポジトリに対して作成できます。

最新バージョンの保持ポリシーを既存のリポジトリに追加するには:

  1. Google Cloud コンソールで [リポジトリ] ページを開きます。

    [リポジトリ] ページを開く

  2. リポジトリ リストでリポジトリを選択し、[リポジトリの編集] をクリックします。

  3. [クリーンアップ ポリシー] セクションで [ドライラン] を選択し、アーティファクトの削除を確定させる前に新しいポリシーをテストします。保持ポリシーの結果を表示するには、少なくとも 1 つの削除ポリシーを設定する必要があります。テスト結果を確認する詳細については、ドライランをご覧ください。

    ポリシーが意図したとおりに機能していることを確認したら、リポジトリの設定を再度編集し、[アーティファクトの削除] を選択してクリーンアップ ポリシーを適用し、選択したアーティファクトを削除します。

  4. [クリーンアップ ポリシーを追加] をクリックして、次のように追加します。

    • 名前: クリーンアップ ポリシーに名前を付けます。この名前は、リポジトリに適用するポリシーのグループ内で一意にする必要があります。
    • ポリシータイプ: [最新のバージョンを保持] を選択します。
  5. [保持数] フィールドに、リポジトリに保持するアーティファクトのバージョン数を入力します。

  6. 省略可: [パッケージの接頭辞] を選択して、保持ポリシーを適用するパッケージの接頭辞を指定します。たとえば、red, blue は、アーティファクト名 red-teamredisbluebird と一致します。

  7. クリーンアップ ポリシーは、[クリーンアップ ポリシーを追加] をクリックすることでさらに追加できます。

  8. [更新] をクリックします。

    クリーンアップ ポリシーがリポジトリに適用されます。[リポジトリの詳細] セクションで [Show more] をクリックすると、クリーンアップ ポリシーを表示できます。

JSON

形式は削除ポリシーに似ています。保持ポリシーの場合、action の値は {"type": "Keep"} です。

特定の数のバージョンを保持する保持ポリシーには、condition セクションではなく mostRecentVersions セクションがあります。

{
  "name": "KEEP_POLICY_NAME",
  "action": {"type": "Keep"},
  "mostRecentVersions": {
    "packageNamePrefixes": ["PACKAGE_PREFIXES"],
    "keepCount": MINIMUM_NUMBER
  }
}

以下を置き換えます。

  • KEEP_POLICY_NAME は、保持ポリシーの名前に置き換えます。この名前は、リポジトリに適用するポリシーのグループ内で一意にする必要があります。
  • PACKAGE_PREFIXES は、保持ポリシーを適用する省略可能なパッケージ接頭辞に置き換えます。たとえば、red, blue は、アーティファクト名 red-teamredisbluebird と一致します。
  • MINIMUM_NUMBER は、リポジトリに保持するアーティファクトのバージョン数に置き換えます。

リポジトリ内のすべてのパッケージに保持ポリシーを適用するには、packageNamePrefixes 条件を省略します。リポジトリ内の各パッケージについて、指定された数の最新バージョンが保持されます。

ポリシー ファイルの例

次のポリシー ファイルの例では、1 つの削除ポリシーと 2 つの保持ポリシーがあります。

  • delete-prerelease ポリシーは、アーティファクトが alpha または v0 の文字列で始まっている場合、アーティファクト バージョンをアップロードから 30 日後に削除します。
  • keep-tagged-release ポリシーは、webapp または mobile で始まるファイル名を持つ、接頭辞 release でタグ付けされたアーティファクトを保持します。
  • keep-minimum-versions ポリシーは、webappmobile、または sandbox で始まるファイル名を持つ、アーティファクトの最新の 5 つのバージョンを保持します。
[
  {
    "name": "delete-prerelease",
    "action": {"type": "Delete"},
    "condition": {
      "tagState": "tagged",
      "tagPrefixes": ["alpha", "v0"],
      "olderThan": "30d"
    }
  },
  {
    "name": "keep-tagged-release",
    "action": {"type": "Keep"},
    "condition": {
      "tagState": "tagged",
      "tagPrefixes": ["release"],
      "packageNamePrefixes": ["webapp", "mobile"]
    }
  },
  {
    "name": "keep-minimum-versions",
    "action": {"type": "Keep"},
    "mostRecentVersions": {
      "packageNamePrefixes": ["webapp", "mobile", "sandbox"],
      "keepCount": 5
    }
  }
]

ドライランでポリシーをテストする

クリーンアップ ポリシーをテストするには、コンソールでクリーンアップ ポリシーをドライランに設定するか、--dry-run フラグを指定して gcloud artifacts set-cleanup-policies コマンドを実行します。

クリーンアップ ポリシーの効果を分析するには、Artifact Registry のデータアクセス監査ログを確認します。クリーンアップ ポリシーのデータアクセス監査ログを受信するには、Artifact Registry サービスに対してデータアクセス監査ログのデータ書き込みタイプを明示的に有効にする必要があります。データアクセス監査ログを有効にするには、監査ログを有効にするをご覧ください。

Console

  1. Google Cloud コンソールで [リポジトリ] ページを開きます。

    [リポジトリ] ページを開く

  2. リポジトリ リストでリポジトリを選択し、[リポジトリの編集] をクリックします。

  3. [クリーンアップ] セクションで、[ドライラン] を選択します。

  4. [クリーンアップ ポリシーを追加する] をクリックし、条件付き削除条件付き保持、または最新バージョンを保持ポリシーのオプションを構成します。

  5. [更新] をクリックします。

削除ポリシーによって BatchDeleteVersions アクションが行われると、パラメータ validateOnly"true" と評価されます。

クリーンアップ ポリシーのドライランの監査ログをクエリするには、次のコマンドを実行します。

gcloud logging read 'protoPayload.serviceName="artifactregistry.googleapis.com" AND protoPayload.request.parent:"projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY" AND protoPayload.request.validateOnly=true' \
    --resource-names="projects/PROJECT_ID" \
    --project=PROJECT_ID

出力は次のようになります。

insertId: qwe123ty3
logName: projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access
operation:
  first: true
  id: projects/my-project/locations/us-west1/operations/12345abc-fb9b-4b6f-b02c-9a397ee807d4
  producer: artifactregistry.googleapis.com
protoPayload:
  '@type': type.googleapis.com/google.cloud.audit.AuditLog
  authenticationInfo:
    principalEmail: service-774919394028@gcp-sa-staging-artreg.iam.gserviceaccount.com
  authorizationInfo:
  - granted: true
    permission: artifactregistry.versions.delete
    resource: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
    resourceAttributes: {}
  methodName: google.devtools.artifactregistry.v1.ArtifactRegistry.BatchDeleteVersions
  request:
    '@type': type.googleapis.com/google.devtools.artifactregistry.v1.BatchDeleteVersionsRequest
    names:
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:4bb3756e4e75dfbc3ced87521ed62b26d16fb4e17993ae6877165f2b6551fb55
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:e8185538b50df953529b300be4963b2c21158808becac7aa0d610f61de8ba701
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:7f7fb0a9453da49f831fe92eb8b1751be13acefe1bbd44cc3f0d63d41c422246
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:84ac871a34560b39dd7bde57b4d333f18a7e8c1b61c8d350c1fefeb1fcd2b3ac
parent: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
    validateOnly: true
  requestMetadata:
    callerIp: private
    callerSuppliedUserAgent: stubby_client
    destinationAttributes: {}
    requestAttributes:
      auth: {}
      time: '2023-05-26T04:31:21.909465579Z'
  resourceName: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
  serviceName: artifactregistry.googleapis.com
receiveTimestamp: '2023-05-26T04:31:22.641338594Z'
resource:
  labels:
    method: google.devtools.artifactregistry.v1.ArtifactRegistry.BatchDeleteVersions
    project_id: my-project
    service: artifactregistry.googleapis.com
  type: audited_resource
severity: INFO
timestamp: '2023-05-26T04:31:21.909004200Z'

gcloud CLI

クリーンアップ ポリシーのドライランを行うには、次のコマンドを実行します。

gcloud artifacts repositories set-cleanup-policies REPOSITORY \
    --project=PROJECT_ID \
    --location=LOCATION \
    --policy=POLICY_FILE \
    --dry-run

以下を置き換えます。

  • REPOSITORY は、リポジトリの名前に置き換えます。
  • PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンロケーションに置き換えます。

削除ポリシーによって BatchDeleteVersions アクションが行われると、パラメータ validateOnly"true" と評価されます。

クリーンアップ ポリシーのドライランの監査ログをクエリするには、次のコマンドを実行します。

gcloud logging read 'protoPayload.serviceName="artifactregistry.googleapis.com" AND protoPayload.request.parent:"projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY" AND protoPayload.request.validateOnly=true' \
    --resource-names="projects/PROJECT_ID" \
    --project=PROJECT_ID

出力は次のようになります。

insertId: qwe123ty3
logName: projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access
operation:
  first: true
  id: projects/my-project/locations/us-west1/operations/12345abc-fb9b-4b6f-b02c-9a397ee807d4
  producer: artifactregistry.googleapis.com
protoPayload:
  '@type': type.googleapis.com/google.cloud.audit.AuditLog
  authenticationInfo:
    principalEmail: service-774919394028@gcp-sa-staging-artreg.iam.gserviceaccount.com
  authorizationInfo:
  - granted: true
    permission: artifactregistry.versions.delete
    resource: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
    resourceAttributes: {}
  methodName: google.devtools.artifactregistry.v1.ArtifactRegistry.BatchDeleteVersions
  request:
    '@type': type.googleapis.com/google.devtools.artifactregistry.v1.BatchDeleteVersionsRequest
    names:
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:4bb3756e4e75dfbc3ced87521ed62b26d16fb4e17993ae6877165f2b6551fb55
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:e8185538b50df953529b300be4963b2c21158808becac7aa0d610f61de8ba701
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:7f7fb0a9453da49f831fe92eb8b1751be13acefe1bbd44cc3f0d63d41c422246
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:84ac871a34560b39dd7bde57b4d333f18a7e8c1b61c8d350c1fefeb1fcd2b3ac
parent: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
    validateOnly: true
  requestMetadata:
    callerIp: private
    callerSuppliedUserAgent: stubby_client
    destinationAttributes: {}
    requestAttributes:
      auth: {}
      time: '2023-05-26T04:31:21.909465579Z'
  resourceName: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
  serviceName: artifactregistry.googleapis.com
receiveTimestamp: '2023-05-26T04:31:22.641338594Z'
resource:
  labels:
    method: google.devtools.artifactregistry.v1.ArtifactRegistry.BatchDeleteVersions
    project_id: my-project
    service: artifactregistry.googleapis.com
  type: audited_resource
severity: INFO
timestamp: '2023-05-26T04:31:21.909004200Z'

リポジトリにポリシーを適用する

ローカル JSON ファイルで定義されたクリーンアップ ポリシーを使用するには、gcloud CLI を使用して、Artifact Registry がアーティファクト バージョンの自動削除を処理するリポジトリに適用します。

コンソールで [ドライラン] に設定したクリーンアップ ポリシーを適用するには、ポリシーを [アーティファクトを削除] に設定します。

クリーンアップ ポリシーは標準リポジトリのみに適用できます。クリーンアップ ポリシーを適用できない対象は次のとおりです。

  • Google Cloud プロジェクト

Console

クリーンアップ ポリシーを適用するには:

  1. Google Cloud コンソールで [リポジトリ] ページを開きます。

    [リポジトリ] ページを開く

  2. リポジトリ リストでリポジトリを選択し、[リポジトリの編集] をクリックします。

  3. [クリーンアップ ポリシー] セクションで、[アーティファクトを削除] を選択します。

    Artifact Registry では、定期的に実行されるバックグラウンド ジョブを使用して、ポリシーに一致するアーティファクトを削除、保持します。変更は約 1 日以内に有効になります。

gcloud

クリーンアップ ポリシーを適用するには、クリーンアップ ポリシー ファイルがあるディレクトリで次のコマンドを実行します。

gcloud artifacts repositories set-cleanup-policies REPOSITORY \
    --project=PROJECT_ID \
    --location=LOCATION \
    --policy=POLICY_FILE \
    --no-dry-run

以下を置き換えます。

  • REPOSITORY は、リポジトリの名前に置き換えます。
  • PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョン ロケーションに置き換えます。
  • --no-dry-run は、リポジトリのドライラン機能を無効にします。
  • POLICY_FILE は、クリーンアップ ポリシーを含むファイルの名前です。

たとえば、次のコマンドは policy.json のポリシーをプロジェクト my-project 内のリージョン us-west1 のリポジトリ my-repo に適用します。

gcloud artifacts repositories set-cleanup-policies my-repo \
    --project=my-project \
    --location=us-west1 \
    --policy=policy.json

Artifact Registry では、定期的に実行されるバックグラウンド ジョブを使用して、ポリシーに一致するアーティファクトを削除、保持します。変更は約 1 日以内に有効になります。

ポリシーを更新する

Console

  1. Google Cloud コンソールで [リポジトリ] ページを開きます。

    [リポジトリ] ページを開く

  2. リポジトリ リストでリポジトリを選択し、[リポジトリの編集] をクリックします。

  3. [クリーンアップ ポリシー] セクションで、変更するポリシーの名前をクリックします。

  4. クリーンアップ ポリシーを編集し、[更新] をクリックします。

    クリーンアップ ポリシーがリポジトリに適用されます。

gcloud CLI

既存のポリシーを更新するには、ポリシー ファイルの設定を編集してから、再度次のコマンドを実行してポリシーを適用します。

gcloud artifacts repositories set-cleanup-policies REPOSITORY \
    --project=PROJECT_ID \
    --location=LOCATION \
    --policy=POLICY_FILE \
    --no-dry-run

以下を置き換えます。

  • REPOSITORY は、リポジトリの名前に置き換えます。
  • PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョン ロケーションに置き換えます。
  • --no-dry-run は、リポジトリのドライラン機能を無効にします。
  • POLICY_FILE は、クリーンアップ ポリシーを含むファイルの名前です。

リポジトリのクリーンアップ ポリシーを一覧表示する

リポジトリに関連付けられたクリーンアップ ポリシーを表示できます。

Console

  1. Google Cloud コンソールで [リポジトリ] ページを開きます。

    [リポジトリ] ページを開く

  2. リポジトリ リストで、表示するリポジトリを選択します。

  3. [リポジトリの詳細] セクションで、[すべてを表示] をクリックします。

    クリーンアップ ポリシーの名前が表示されます。

  4. リポジトリのクリーンアップ ポリシーの詳細を表示または編集するには、[リポジトリを編集] をクリックします。

    既存のクリーンアップ ポリシーの詳細は、[クリーンアップ ポリシー] セクションに一覧表示されます。

gcloud CLI

次のコマンドを実行します。

gcloud artifacts repositories list-cleanup-policies REPOSITORY \
    --project=PROJECT_ID \
    --location=LOCATION

以下を置き換えます。

  • REPOSITORY は、リポジトリの名前に置き換えます。
  • PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョン ロケーションに置き換えます。

リポジトリからポリシーを削除する

Artifact Registry でアーティファクトのバージョンを自動的に削除する必要がなくなった場合は、リポジトリからクリーンアップ ポリシーを削除します。

Console

  1. Google Cloud コンソールで [リポジトリ] ページを開きます。

    [リポジトリ] ページを開く

  2. リポジトリ リストでリポジトリを選択し、[リポジトリの編集] をクリックします。

  3. [クリーンアップ ポリシー] セクションで、削除するポリシーの名前にカーソルを合わせます。

  4. [削除] アイコンをクリックします。

  5. [更新] をクリックします。

    クリーンアップ ポリシーが削除されます。

gcloud CLI

次のコマンドを実行します。

gcloud artifacts repositories delete-cleanup-policies REPOSITORY \
    --policynames=POLICY_NAMES \
    --project=PROJECT_ID \
    --location=LOCATION

以下を置き換えます。

  • REPOSITORY はリポジトリの名前です。
  • PROJECT_ID は、Google Cloud プロジェクトの ID です。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
  • POLICY_NAMES は、削除するポリシーのポリシー名のカンマ区切りのリストです。

たとえば、次のコマンドは、プロジェクト my-project のリージョン us-west1 にあるリポジトリ my-repo から delete-test という名前のポリシーを削除します。

gcloud artifacts repositories delete-cleanup-policies my-repo \
    --policynames=delete-test \
    --project=my-project \
    --location=us-west1

クリーンアップ ポリシーの監査ログエントリ

Cloud Logging でクリーンアップ ポリシーのログエントリを表示するには、DATA_WRITE ロギングを有効にする必要があります。

リポジトリにクリーンアップ ポリシーを設定すると、オペレーションがリポジトリの更新として記録されます(UpdateRepository オペレーション)。

Artifact Registry がアーティファクトのバージョンを削除すると、イベントが Cloud Logging データアクセス ログに記録されます。ログエントリは、Artifact Registry サービス アカウントが削除を実行したことを示しています。Artifact Registry サービス アカウント ID の形式は service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com です。

その他のツール

コンテナ イメージの場合は、イメージのライフサイクル管理に次のツールも使用できます。

  • gcrane: レポジトリ間でイメージをコピーするために使用できるコンテナ レジストリ用のツールです。
  • gcr-cleaner: 指定した条件に基づいてコンテナ イメージを削除するツール。

gcrane ツールと gcr-cleaner ツールは、Google の公式プロダクトではありません。