Membatasi download artefak dengan aturan download

Halaman ini menjelaskan cara membatasi download artefak dari repositori Artifact Registry Anda dengan membuat dan mengelola aturan download.

Aturan download memungkinkan Anda mengizinkan atau menolak download artefak dari repositori dan paket Anda. Anda juga dapat menetapkan kondisi agar aturan berlaku untuk tag atau versi tertentu.

Untuk mengetahui detail tentang cara kerja aturan download, lihat bagian Membatasi download artefak dalam ringkasan Mengontrol akses dan melindungi artefak.

Sebelum memulai

  1. Jika Anda belum memilikinya, buat repositori standar berformat Docker.
  2. (Opsional) Mengonfigurasi setelan default untuk perintah Google Cloud CLI.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk Membuat dan mengelola aturan download, minta administrator untuk memberi Anda peran IAM berikut di repositori:

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Membuat aturan download

gcloud

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • RULE_NAME: nama aturan. Nama harus unik dalam repositori Anda, memiliki panjang maksimal 256 karakter, dan terdiri dari karakter alfanumerik, karakter yang dienkode persen, atau karakter dalam daftar [-, ., _, ~, :, @, +, ^].
  • ACTION: tindakan yang diterapkan ke download yang cocok dengan aturan ini. Pilih antara ALLOW, yang memungkinkan aturan mengizinkan download yang cocok terjadi, dan DENY, yang memblokir aturan agar download yang cocok tidak terjadi.
  • PACKAGE: (opsional) nama paket. Jika disediakan, aturan hanya berlaku untuk paket yang ditentukan, bukan seluruh repositori.
  • CONDITION: (opsional) ekspresi CEL yang menentukan aturan yang cocok. Jika disediakan, hanya terapkan aturan ke download yang cocok dengan kondisi yang ditentukan. Misalnya, pkg.version.id < '3.0'.
  • PROJECT: project ID Google Cloud Anda. Jika project ID Anda berisi titik dua (:), lihat Project cakupan domain.
  • LOCATION: lokasi regional atau multi-regional repositori.
  • REPOSITORY: ID repositori.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud artifacts rules create RULE_NAME \
    --action=ACTION \
    --project=PROJECT \
    --location=LOCATION \
    --repository=REPOSITORY \
    --package=PACKAGE \
    --condition="CONDITION"

Windows (PowerShell)

gcloud artifacts rules create RULE_NAME `
    --action=ACTION `
    --project=PROJECT `
    --location=LOCATION `
    --repository=REPOSITORY `
    --package=PACKAGE `
    --condition="CONDITION"

Windows (cmd.exe)

gcloud artifacts rules create RULE_NAME ^
    --action=ACTION ^
    --project=PROJECT ^
    --location=LOCATION ^
    --repository=REPOSITORY ^
    --package=PACKAGE ^
    --condition="CONDITION"
Aturan baru dibuat dengan output berikut:
Created rule [RULE_NAME].
Untuk informasi selengkapnya, lihat perintah gcloud artifacts rules create.

API

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • RULE_NAME: nama aturan. Nama harus unik dalam repositori Anda, memiliki panjang maksimal 256 karakter, dan terdiri dari karakter alfanumerik, karakter yang dienkode persen, atau karakter dalam daftar [-, ., _, ~, :, @, +, ^].
  • ACTION: tindakan yang diterapkan ke download yang cocok dengan aturan ini. Pilih antara ALLOW, yang memungkinkan aturan mengizinkan download yang cocok terjadi, dan DENY, yang memblokir aturan agar download yang cocok tidak terjadi.
  • PACKAGE: (opsional) nama paket. Jika disediakan, aturan hanya berlaku untuk paket yang ditentukan, bukan seluruh repositori.
  • CONDITION: (opsional) ekspresi CEL yang menentukan aturan yang cocok. Jika disediakan, hanya terapkan aturan ke download yang cocok dengan kondisi yang ditentukan. Misalnya, pkg.version.id < '3.0'.
  • PROJECT: project ID Google Cloud Anda. Jika project ID Anda berisi titik dua (:), lihat Project cakupan domain.
  • LOCATION: lokasi regional atau multi-regional repositori.
  • REPOSITORY: ID repositori.

Metode HTTP dan URL:

POST https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules?ruleID=RULE_NAME

Meminta isi JSON:

{
  "action":"ACTION",
  "packageId":"PACKAGE",
  "condition":
  {
    "expression":"CONDITION"
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Aturan baru dibuat dengan output berikut:
{
  "name": "projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME",
  "action": ACTION,
  "operation": "DOWNLOAD"
}
Untuk informasi selengkapnya, lihat referensi REST.

Mencantumkan aturan download

gcloud

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • PROJECT: project ID Google Cloud Anda. Jika project ID Anda berisi titik dua (:), lihat Project cakupan domain.
  • LOCATION: lokasi regional atau multi-regional repositori.
  • REPOSITORY: nama repositori.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud artifacts rules list \
    --project=PROJECT \
    --location=LOCATION \
    --repository=REPOSITORY

Windows (PowerShell)

gcloud artifacts rules list `
    --project=PROJECT `
    --location=LOCATION `
    --repository=REPOSITORY

Windows (cmd.exe)

gcloud artifacts rules list ^
    --project=PROJECT ^
    --location=LOCATION ^
    --repository=REPOSITORY
Daftar aturan untuk project, lokasi, dan repositori yang ditentukan ditampilkan mirip dengan berikut:
RULE: my-rule
PACKAGE: example.com/foo
ACTION: DENY
OPERATION: DOWNLOAD
CONDITION: pkg.version.id < '3.0'
Untuk informasi selengkapnya, lihat perintah gcloud artifacts rules list.

API

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT: project ID Google Cloud Anda. Jika project ID Anda berisi titik dua (:), lihat Project cakupan domain.
  • LOCATION: lokasi regional atau multi-regional repositori.
  • REPOSITORY: nama repositori.

Metode HTTP dan URL:

GET https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Daftar aturan untuk project, lokasi, dan repositori yang ditentukan ditampilkan mirip dengan berikut:
{
  "rules": [
    {
      "name": "projects/my-project/locations/us-central1/repositories/my-repo/rules/my-rule",
      "action": "DENY",
      "operation": "DOWNLOAD",
      "condition": {
        "expression": "pkg.version.id \u003c '3.0'"
      },
      "packageId": "example.com/foo"
    }
  ]
}
Untuk informasi selengkapnya, lihat referensi REST.

Menjelaskan aturan download

gcloud

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • RULE_NAME: nama aturan. Nama tersebut harus unik dalam repositori Anda.
  • PROJECT: project ID Google Cloud Anda. Jika project ID Anda berisi titik dua (:), lihat Project cakupan domain.
  • LOCATION: lokasi regional atau multi-regional repositori.
  • REPOSITORY: nama repositori.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud artifacts rules describe RULE_NAME \
    --project=PROJECT \
    --location=LOCATION \
    --repository=REPOSITORY

Windows (PowerShell)

gcloud artifacts rules describe RULE_NAME `
    --project=PROJECT `
    --location=LOCATION `
    --repository=REPOSITORY

Windows (cmd.exe)

gcloud artifacts rules describe RULE_NAME ^
    --project=PROJECT ^
    --location=LOCATION ^
    --repository=REPOSITORY
Detail aturan ditampilkan mirip dengan berikut:
RULE: my-rule
PACKAGE: example.com/foo
ACTION: DENY
OPERATION: DOWNLOAD
CONDITION: pkg.version.id < '3.0'
Untuk informasi selengkapnya, lihat perintah gcloud artifacts rules describe.

API

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • RULE_NAME: nama aturan. Nama tersebut harus unik dalam repositori Anda.
  • PROJECT: project ID Google Cloud Anda. Jika project ID Anda berisi titik dua (:), lihat Project cakupan domain.
  • LOCATION: lokasi regional atau multi-regional repositori.
  • REPOSITORY: nama repositori.

Metode HTTP dan URL:

GET https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Detail aturan ditampilkan mirip dengan yang berikut ini:
{
  "rules": [
    {
      "name": "projects/my-project/locations/us-central1/repositories/my-repo/rules/my-rule",
      "action": "DENY",
      "operation": "DOWNLOAD",
      "condition": {
        "expression": "pkg.version.id \u003c '3.0'"
      },
      "packageId": "example.com/foo"
    }
  ]
}
Untuk informasi selengkapnya, lihat referensi REST.

Memperbarui aturan download

gcloud

Hapus variabel yang tidak ingin Anda perbarui.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • RULE_NAME: nama aturan. Nama tersebut harus unik dalam repositori Anda.
  • ACTION: tindakan yang diterapkan ke download yang cocok dengan aturan ini. Pilih antara ALLOW dan DENY.
  • PACKAGE: nama paket. Jika tidak diberikan, aturan akan berlaku untuk seluruh repositori.
  • CONDITION: Ekspresi CEL yang menentukan aturan pencocokan. Jika disediakan, hanya terapkan aturan ke download yang cocok dengan kondisi yang ditentukan. Misalnya, pkg.version.id < '3.0'.
  • PROJECT: project ID Google Cloud Anda. Jika project ID Anda berisi titik dua (:), lihat Project cakupan domain.
  • LOCATION: lokasi regional atau multi-regional repositori.
  • REPOSITORY: nama repositori.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud artifacts rules update RULE_NAME \
    --action=ACTION \
    --project=PROJECT \
    --location=LOCATION \
    --repository=REPOSITORY \
    --package=PACKAGE \
    --condition="CONDITION"

Windows (PowerShell)

gcloud artifacts rules update RULE_NAME `
    --action=ACTION `
    --project=PROJECT `
    --location=LOCATION `
    --repository=REPOSITORY `
    --package=PACKAGE `
    --condition="CONDITION"

Windows (cmd.exe)

gcloud artifacts rules update RULE_NAME ^
    --action=ACTION ^
    --project=PROJECT ^
    --location=LOCATION ^
    --repository=REPOSITORY ^
    --package=PACKAGE ^
    --condition="CONDITION"
Detail aturan yang diperbarui ditampilkan mirip dengan berikut:
Updated rule [RULE_NAME].
action: ACTION
condition:
  expression: CONDITION
name: projects/PROJECT/locationsLOCATION/repositories/REPOSITORY/rules/RULE_NAME
operation: DOWNLOAD
Untuk informasi selengkapnya, lihat perintah gcloud artifacts rules update.

API

Hapus variabel yang tidak ingin Anda perbarui.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • RULE_NAME: nama aturan. Nama tersebut harus unik dalam repositori Anda.
  • ACTION: tindakan yang diterapkan ke download yang cocok dengan aturan ini. Pilih antara ALLOW dan DENY.
  • PACKAGE: nama paket. Jika tidak diberikan, aturan akan berlaku untuk seluruh repositori.
  • CONDITION: Ekspresi CEL yang menentukan aturan pencocokan. Jika disediakan, hanya terapkan aturan ke download yang cocok dengan kondisi yang ditentukan. Misalnya, pkg.version.id < '3.0'.
  • PROJECT: project ID Google Cloud Anda. Jika project ID Anda berisi titik dua (:), lihat Project cakupan domain.
  • LOCATION: lokasi regional atau multi-regional repositori.
  • REPOSITORY: nama repositori.

Metode HTTP dan URL:

PATCH https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME

Meminta isi JSON:

{
  "action":"ACTION",
  "packageId":"PACKAGE",
  "condition":
  {
    "expression":"CONDITION"
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Detail aturan yang diperbarui ditampilkan mirip dengan berikut:
{
  "name": "projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME",
  "action": ACTION,
  "operation": "DOWNLOAD"
}
Untuk informasi selengkapnya, lihat referensi REST.

Menghapus aturan download

gcloud

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • RULE_NAME: nama aturan. Nama tersebut harus unik dalam repositori Anda.
  • PROJECT: project ID Google Cloud Anda. Jika project ID Anda berisi titik dua (:), lihat Project cakupan domain.
  • LOCATION: lokasi regional atau multi-regional repositori.
  • REPOSITORY: nama repositori.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud artifacts rules describe RULE_NAME \
    --project=PROJECT \
    --location=LOCATION \
    --repository=REPOSITORY

Windows (PowerShell)

gcloud artifacts rules describe RULE_NAME `
    --project=PROJECT `
    --location=LOCATION `
    --repository=REPOSITORY

Windows (cmd.exe)

gcloud artifacts rules describe RULE_NAME ^
    --project=PROJECT ^
    --location=LOCATION ^
    --repository=REPOSITORY
Aturan dihapus dengan output berikut:
You are about to delete rule [RULE_NAME]

Do you want to continue (Y/n)?  Y

Deleted rule [RULE_NAME].
Untuk informasi selengkapnya, lihat perintah gcloud artifacts rules delete.

API

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • RULE_NAME: nama aturan. Nama tersebut harus unik dalam repositori Anda.
  • PROJECT: project ID Google Cloud Anda. Jika project ID Anda berisi titik dua (:), lihat Project cakupan domain.
  • LOCATION: lokasi regional atau multi-regional repositori.
  • REPOSITORY: nama repositori.

Metode HTTP dan URL:

DELETE https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Untuk informasi selengkapnya, lihat referensi REST.

Menggunakan CEL untuk menentukan kondisi

Anda dapat menentukan kondisi untuk aturan download dengan Common Expression Language (CEL), yang merupakan bahasa open source untuk evaluasi ekspresi. Artifact Registry menyediakan objek pkg yang berisi atribut berikut:

  • pkg.id: string yang mewakili nama paket artefak. Dapat digunakan dengan aturan yang ditetapkan di tingkat repositori.
  • pkg.version.id: string yang mewakili versi artefak.
  • pkg.version.tag: string yang mewakili tag artefak. Hanya gunakan di repositori Docker.

Anda dapat menggunakan operator logika dan fungsi bawaan dengan CEL. Berikut adalah beberapa contoh ekspresi CEL yang mungkin berguna dalam aturan download Anda:

  • Berguna untuk aturan yang ditetapkan di tingkat repositori:

      pkg.id == 'myPackage'  #Artifact package matches 'myPackage'
      pkg.id.startsWith('my') #Artifact package must start with 'my'
    
  • Berguna untuk aturan yang ditetapkan pada paket:

      pkg.version.id != '1.0.0' #Artifact version is not '1.0.0'
      pkg.version.id > '1.0.1' || pkg.version.id < '0.0.1' #Artifact version is greater than '1.0.1' or less than '0.0.1'
      pkg.version.id.startsWith('1.0.') #Artifact version must start with '1.0.'
      pkg.version.id in ['1.0.0', '1.2.0'] #Artifact version must be a member of the list ['1.0.0', '1.2.0']
      pkg.version.tag == 'tag1' #Artifact tag must be 'tag1'
      pkg.version.tag.startsWith('tag') #Artifact tag must start with 'tag'
      pkg.version.tag in ['tag1', 'tag2'] #Artifact tag must be a member of the list ['tag1', 'tag2']
    

Saat menambahkan aturan dengan kondisi berbasis tag seperti pkg.version.tag == 'latest' di repositori Docker, perhatikan hal-hal berikut:

  • Saat menarik dengan ringkasan, klien tidak memberikan tag. Kondisi yang menggunakan tag akan dicocokkan dengan tag kosong dan dapat menyebabkan perilaku yang tidak terduga.
  • Untuk image container multi-arch, kondisi yang menggunakan tag mungkin tidak berfungsi seperti yang diharapkan dan harus dihindari.