Kebijakan repositori - CodeArtifact

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Kebijakan repositori

CodeArtifact menggunakan izin berbasis sumber daya untuk mengontrol akses. Izin berbasis sumber daya memungkinkan Anda menentukan siapa yang memiliki akses ke repositori dan tindakan apa yang dapat mereka lakukan di situ. Secara default, hanya pemilik repositori yang memiliki akses ke repositori. Anda dapat menerapkan dokumen kebijakan yang memungkinkan prinsipal IAM lainnya mengakses repositori Anda.

Untuk informasi selengkapnya, lihat Kebijakan Berbasis Sumber Daya dan Kebijakan Berbasis Identitas dan Kebijakan Berbasis Sumber Daya.

Membuat kebijakan sumber daya untuk memberikan akses baca

Kebijakan sumber daya adalah file teks dalam format JSON. File harus menentukan prinsipal (aktor), satu atau beberapa tindakan, dan efek (Allow atau Deny). Sebagai contoh, sumber daya berikut kebijakan memberikan izin 123456789012 pada akun untuk mengunduh paket dari repositori.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:ReadFromRepository" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Resource": "*" } ] }

Karena kebijakan dievaluasi hanya untuk operasi terhadap repositori yang dilampirkan, Anda tidak perlu menentukan sumber daya. Karena sumber daya tersirat, Anda dapat mengatur Resource ke *. Agar manajer paket dapat mengunduh paket dari repositori ini, kebijakan domain untuk akses lintas akun juga perlu dibuat. Kebijakan domain harus memberikan setidaknya codeartifact:GetAuthorizationToken izin kepada kepala sekolah. Untuk contoh kebijakan domain lengkap untuk memberikan akses lintas akun, lihat ini. Contoh kebijakan domain

catatan

Tindakan codeartifact:ReadFromRepository hanya dapat digunakan pada sumber daya repositori. Anda tidak dapat menempatkan Amazon Resource Name (ARN) paket sebagai sumber daya dengan codeartifact:ReadFromRepository sebagai tindakan untuk mengizinkan akses baca ke subset paket dalam repositori. Sebuah prinsipal tertentu dapat membaca semua paket dalam repositori atau tidak satu pun.

Karena satu-satunya tindakan yang ditentukan dalam repositori adalah ReadFromRepository, pengguna dan peran dari akun 1234567890 dapat mengunduh paket dari repositori. Namun, tindakan lain tidak dapat dilakukan (misalnya, mencantumkan nama dan versi paket). Biasanya, Anda memberikan izin dalam kebijakan berikut selain ReadFromRepository karena pengguna yang mengunduh paket dari repositori perlu berinteraksi dengannya dengan cara lain juga.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:DescribePackageVersion", "codeartifact:DescribeRepository", "codeartifact:GetPackageVersionReadme", "codeartifact:GetRepositoryEndpoint", "codeartifact:ListPackages", "codeartifact:ListPackageVersions", "codeartifact:ListPackageVersionAssets", "codeartifact:ListPackageVersionDependencies", "codeartifact:ReadFromRepository" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Resource": "*" } ] }

Menetapkan kebijakan

Setelah Anda membuat dokumen kebijakan, gunakan perintah put-repository-permissions-policy untuk melampirkannya ke repositori:

aws codeartifact put-repository-permissions-policy --domain my_domain --domain-owner 111122223333 \ --repository my_repo --policy-document file:///PATH/TO/policy.json

Ketika Anda memanggil put-repository-permissions-policy, kebijakan sumber daya pada repositori diabaikan ketika mengevaluasi izin. Hal ini memastikan bahwa pemilik domain tidak dapat mengunci diri dari repositori, yang akan mencegah mereka memperbarui kebijakan sumber daya.

catatan

Anda tidak dapat memberikan izin ke AWS akun lain untuk memperbarui kebijakan sumber daya di repositori menggunakan kebijakan sumber daya, karena kebijakan sumber daya diabaikan saat memanggil. put-repository-permissions-policy

Contoh output:

{ "policy": { "resourceArn": "arn:aws:codeartifact:region-id:111122223333:repository/my_domain/my_repo", "document": "{ ...policy document content...}", "revision": "MQlyyTQRASRU3HB58gBtSDHXG7Q3hvxxxxxxx=" } }

Output dari perintah berisi Amazon Resource Name (ARN) dari sumber daya repositori, isi lengkap dokumen kebijakan, dan pengidentifikasi revisi. Anda dapat meneruskan pengidentifikasi revisi ke put-repository-permissions-policy menggunakan opsi --policy-revision. Hal ini memastikan bahwa revisi dokumen yang sedang ditimpa, dan bukan versi yang lebih baru yang ditetapkan oleh penulis lain.

Membaca kebijakan

Gunakan perintah get-repository-permissions-policy untuk membaca versi dokumen kebijakan yang ada. Untuk memformat output agar dapat dibaca, gunakan --output dan --query policy.document bersama-sama dengan modul json.tool Python.

aws codeartifact get-repository-permissions-policy --domain my_domain --domain-owner 111122223333 \ --repository my_repo --output text --query policy.document | python -m json.tool

Contoh output:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": [ "codeartifact:DescribePackageVersion", "codeartifact:DescribeRepository", "codeartifact:GetPackageVersionReadme", "codeartifact:GetRepositoryEndpoint", "codeartifact:ListPackages", "codeartifact:ListPackageVersions", "codeartifact:ListPackageVersionAssets", "codeartifact:ListPackageVersionDependencies", "codeartifact:ReadFromRepository" ], "Resource": "*" } ] }

Menghapus kebijakan

Gunakan perintah delete-repository-permissions-policy untuk menghapus kebijakan dari repositori.

aws codeartifact delete-repository-permissions-policy --domain my_domain --domain-owner 111122223333 \ --repository my_repo

Format output sama dengan perintah get-repository-permissions-policy.

Memberikan akses baca ke prinsipal

Bila Anda menetapkan pengguna root akun sebagai prinsipal dalam dokumen kebijakan, Anda memberikan akses ke semua pengguna dan peran dalam akun tersebut. Untuk membatasi akses ke pengguna atau peran yang dipilih, gunakan ARN-nya di bagian Principal dari kebijakan. Misalnya, gunakan berikut ini untuk memberikan akses baca ke pengguna IAM bob dalam akun 123456789012.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:ReadFromRepository" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/bob" }, "Resource": "*" } ] }

Memberikan akses tulis ke paket

Tindakan codeartifact:PublishPackageVersion digunakan untuk mengontrol izin untuk memublikasikan versi baru dari sebuah paket. Sumber daya yang digunakan dengan tindakan ini harus berupa paket. Format CodeArtifact paket ARN adalah sebagai berikut.

arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/package-format/package-namespace/package-name

Contoh berikut menunjukkan ARN untuk paket npm dengan lingkup @parity dan nama ui dalam repositori my_repo dalam domain my_domain.

arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/npm/parity/ui

ARN untuk paket npm tanpa lingkup memiliki string kosong untuk bidang namespace. Misalnya, berikut ini adalah ARN untuk paket tanpa ruang lingkup dan dengan nama react dalam repositori my_repo dalam domain my_domain.

arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/npm//react

Kebijakan berikut memberikan akun 123456789012 izin untuk memublikasikan versi @parity/ui dalam repositori my_repo.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:PublishPackageVersion" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Resource": "arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/npm/parity/ui" } ] }
penting

Untuk memberikan izin untuk menerbitkan versi Maven dan NuGet paket, tambahkan izin berikut sebagai tambahan. codeartifact:PublishPackageVersion

  1. NuGet: codeartifact:ReadFromRepository dan tentukan sumber daya repositori

  2. Maven: codeartifact:PutPackageMetadata

Karena kebijakan ini menentukan domain dan repositori sebagai bagian dari sumber daya, kebijakan ini hanya mengizinkan publikasi bila dilampirkan ke repositori tersebut.

Memberikan akses tulis ke repositori

Anda dapat menggunakan wildcard untuk memberikan izin tulis untuk semua paket dalam repositori. Sebagai contoh, gunakan kebijakan berikut untuk memberikan izin akun untuk menulis ke semua paket di repositori my_repo.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:PublishPackageVersion" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Resource": "arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/*" } ] }

Interaksi antara kebijakan repositori dan domain

CodeArtifact mendukung kebijakan sumber daya pada domain dan repositori. Kebijakan sumber daya bersifat opsional. Setiap domain mungkin memiliki satu kebijakan dan setiap repositori dalam domain mungkin memiliki kebijakan repositori sendiri. Jika kebijakan domain dan kebijakan repositori hadir, maka keduanya dievaluasi saat menentukan apakah permintaan ke CodeArtifact repositori diizinkan atau ditolak. Kebijakan domain dan repositori sedang mengevaluasi menggunakan aturan berikut:

  • Tidak ada kebijakan sumber daya yang dievaluasi saat melakukan operasi tingkat akun seperti atau. ListDomainsListRepositories

  • Tidak ada kebijakan repositori yang dievaluasi saat melakukan operasi tingkat domain seperti atau. DescribeDomainListRepositoriesInDomain

  • Kebijakan domain tidak dievaluasi saat melakukan PutDomainPermissionsPolicy. Perhatikan bahwa aturan ini mencegah penguncian.

  • Kebijakan domain dievaluasi saat melakukan PutRepositoryPermissionsPolicy, tetapi kebijakan repositori tidak dievaluasi.

  • Penyangkalan eksplisit dalam kebijakan apa pun mengesampingkan izin dalam kebijakan lain.

  • Izin eksplisit hanya diperlukan dalam satu kebijakan sumber daya. Menghilangkan tindakan dari kebijakan repositori tidak akan menghasilkan penolakan implisit jika kebijakan domain mengizinkan tindakan tersebut.

  • Jika tidak ada kebijakan sumber daya yang mengizinkan tindakan, hasilnya adalah penolakan implisit kecuali akun prinsipal pemanggil adalah pemilik domain atau akun administrator repositori dan kebijakan berbasis identitas mengizinkan tindakan tersebut.

Kebijakan sumber daya bersifat opsional bila digunakan untuk memberikan akses dalam satu skenario akun, di mana akun pemanggil yang digunakan untuk mengakses repositori sama dengan pemilik domain dan akun administrator repositori. Kebijakan sumber daya diperlukan untuk memberikan akses dalam skenario lintas akun di mana akun pemanggil tidak sama dengan pemilik domain atau akun administrator repositori. Akses lintas akun CodeArtifact mengikuti aturan IAM umum untuk akses lintas akun seperti yang dijelaskan dalam Menentukan apakah permintaan lintas akun diizinkan dalam Panduan Pengguna IAM.

  • Prinsipal dalam akun pemilik domain dapat diberikan akses ke repositori apa pun di domain melalui kebijakan berbasis identitas. Perhatikan bahwa dalam kasus ini, tidak diperlukan izin eksplisit dalam kebijakan domain atau repositori.

  • Prinsipal dalam akun pemilik domain dapat diberikan akses ke repositori apa pun melalui kebijakan domain atau repositori. Perhatikan bahwa dalam kasus ini, tidak diperlukan izin eksplisit dalam kebijakan berbasis identitas.

  • Seorang prinsipal di akun administrator repositori dapat diberikan akses ke repositori melalui kebijakan berbasis identitas. Perhatikan bahwa dalam kasus ini, tidak diperlukan izin eksplisit dalam kebijakan domain atau repositori.

  • Prinsipal di akun lain hanya diberikan akses jika diizinkan oleh setidaknya satu kebijakan sumber daya dan setidaknya satu kebijakan berbasis identitas, tanpa kebijakan yang secara eksplisit menolak tindakan tersebut.