

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

# Kebijakan repositori
<a name="repo-policies"></a>

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](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based) dan [Kebijakan Berbasis Identitas dan Kebijakan Berbasis Sumber Daya](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html).

## Membuat kebijakan sumber daya untuk memberikan akses baca
<a name="creating-a-resource-policy-to-grant-read-access"></a>

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.

------
#### [ JSON ]

****  

```
{
    "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 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](domain-policies.md#domain-policy-example)

**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.

------
#### [ JSON ]

****  

```
{
    "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
<a name="setting-a-policy"></a>

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
<a name="reading-a-policy"></a>

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:

------
#### [ JSON ]

****  

```
{
    "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
<a name="deleting-a-policy"></a>

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
<a name="granting-read-access-to-specific-principals"></a>

 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`.

------
#### [ JSON ]

****  

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

------

## Memberikan akses tulis ke paket
<a name="granting-write-access-to-specific-packages"></a>

 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`.

------
#### [ JSON ]

****  

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

------

**penting**  
Untuk memberikan izin untuk memublikasikan versi Maven dan NuGet paket, tambahkan izin berikut sebagai tambahan. `codeartifact:PublishPackageVersion`  
NuGet: `codeartifact:ReadFromRepository` dan tentukan sumber daya repositori
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
<a name="granting-write-access-to-a-repository"></a>

 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`.

------
#### [ JSON ]

****  

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

------

## Interaksi antara kebijakan repositori dan domain
<a name="interaction-repo-domain-policies"></a>

 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. [ListDomains[ListRepositories](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListRepositories.html)](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListDomains.html)
+ Tidak ada kebijakan repositori yang dievaluasi saat melakukan operasi tingkat domain seperti atau. [DescribeDomain[ListRepositoriesInDomain](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListRepositoriesInDomain.html)](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DescribeDomain.html)
+ Kebijakan domain tidak dievaluasi saat melakukan [PutDomainPermissionsPolicy](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PutDomainPermissionsPolicy.html). Perhatikan bahwa aturan ini mencegah penguncian.
+ Kebijakan domain dievaluasi saat melakukan [PutRepositoryPermissionsPolicy](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PutRepositoryPermissionsPolicy.html), 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html#policy-eval-cross-account) 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.