Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
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-owner111122223333
\ --repositorymy_repo
--policy-documentfile:///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-owner111122223333
\ --repositorymy_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-owner111122223333
\ --repositorymy_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 ARNs 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
NuGet:
codeartifact:ReadFromRepository
dan tentukan sumber daya repositoriMaven:
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.