

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

# Bekerja dengan kelompok paket di CodeArtifact
<a name="package-groups"></a>

*Package group* dapat digunakan untuk menerapkan konfigurasi ke beberapa paket yang cocok dengan pola yang ditentukan menggunakan format paket, namespace paket, dan nama paket. Anda dapat menggunakan grup paket untuk lebih mudah mengonfigurasi kontrol asal paket untuk beberapa paket. Kontrol Package Origin digunakan untuk memblokir atau mengizinkan konsumsi atau penerbitan versi paket baru, yang melindungi pengguna dari tindakan jahat yang dikenal sebagai serangan substitusi ketergantungan.

Setiap domain secara CodeArtifact otomatis berisi grup paket root. Grup paket root ini,`/*`, berisi semua paket, dan memungkinkan versi paket untuk memasukkan repositori dalam domain dari semua jenis asal secara default. Grup paket root dapat dimodifikasi, tetapi tidak dapat dihapus.

Fitur Package Group Configuration beroperasi dengan cara yang konsisten pada akhirnya saat membuat grup paket baru atau menghapus grup paket yang ada. Ini berarti bahwa setelah membuat atau menghapus grup paket, kontrol asal akan diterapkan ke paket terkait yang diharapkan, tetapi dengan beberapa penundaan karena perilaku konsisten akhirnya. Waktu untuk mencapai konsistensi akhirnya tergantung pada jumlah grup paket dalam domain serta jumlah paket dalam domain. Mungkin ada periode singkat di mana kontrol asal tidak segera tercermin pada paket terkait setelah pembuatan atau penghapusan grup paket.

Selain itu, pembaruan untuk kontrol asal grup paket efektif segera. Berbeda dengan pembuatan atau penghapusan grup paket, perubahan pada kontrol asal grup paket yang ada tercermin pada paket terkait tanpa penundaan yang sama.

Topik-topik ini berisi informasi tentang grup paket di AWS CodeArtifact.

**Topics**
+ [Buat grup paket](create-package-group.md)
+ [Melihat atau mengedit grup paket](view-edit-package-group.md)
+ [Hapus grup paket](delete-package-group.md)
+ [Kontrol asal grup Package](package-group-origin-controls.md)
+ [Sintaks definisi grup Package dan perilaku pencocokan](package-group-definition-syntax-matching-behavior.md)
+ [Menandai grup paket](package-group-tags.md)

# Buat grup paket
<a name="create-package-group"></a>

Anda dapat membuat grup paket menggunakan CodeArtifact konsol, AWS Command Line Interface (AWS CLI), atau CloudFormation. Untuk informasi selengkapnya tentang mengelola grup CodeArtifact paket dengan CloudFormation, lihat[Menciptakan CodeArtifact sumber daya dengan AWS CloudFormation](cloudformation-codeartifact.md). 

## Buat grup paket (konsol)
<a name="create-package-group-console"></a>

1. Buka AWS CodeArtifact konsol di [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home).

1. Di panel navigasi, pilih **Domain**, lalu pilih domain tempat Anda ingin membuat grup paket.

1. Pilih **Package groups**, dan pilih **Create package group**.

1. Dalam **definisi grup Package**, masukkan definisi grup paket untuk grup paket Anda. Definisi kelompok paket menentukan paket mana yang terkait dengan grup. Anda dapat memasukkan definisi grup paket secara manual dengan teks, atau Anda dapat menggunakan mode visual untuk membuat pilihan dan definisi grup paket akan dibuat secara otomatis.

1. Untuk menggunakan mode visual untuk membuat definisi grup paket:

   1. Pilih **Visual** untuk beralih ke mode visual..

   1. Dalam **format Package**, pilih format paket yang akan dikaitkan dengan grup ini.

   1. Di **Namespace (Scope)**, pilih kriteria namespace untuk dicocokkan.
      + **Sama dengan**: Cocokkan namespace yang ditentukan dengan tepat. Jika dipilih, masukkan namespace untuk dicocokkan.
      + **Kosong**: Cocokkan paket tanpa namespace.
      + **Dimulai dengan word**: Cocokkan ruang nama yang dimulai dengan kata tertentu. Jika dipilih, masukkan kata awalan yang cocok. Untuk informasi lebih lanjut tentang kata dan batas kata, lihat[Kata, batas kata, dan pencocokan awalan](package-group-definition-syntax-matching-behavior.md#package-group-word-boundary-prefix).
      + **Semua**: Cocokkan paket di semua ruang nama.

   1. Jika **Sama**, **Kosong**, atau **Mulai dengan kata** dipilih, dalam **nama Package**, pilih kriteria nama paket untuk dicocokkan.
      + **Sama persis**: Cocokkan dengan nama paket yang ditentukan dengan tepat. Jika dipilih, masukkan nama paket untuk dicocokkan.
      + **Dimulai dengan awalan**: Cocokkan paket yang dimulai dengan awalan yang ditentukan.
      + **Dimulai dengan word**: Cocokkan paket yang dimulai dengan kata tertentu. Jika dipilih, masukkan kata awalan yang cocok. Untuk informasi lebih lanjut tentang kata dan batas kata, lihat[Kata, batas kata, dan pencocokan awalan](package-group-definition-syntax-matching-behavior.md#package-group-word-boundary-prefix).
      + **Semua**: Cocokkan semua paket.

   1. Pilih **Berikutnya** untuk meninjau definisi.

1. Untuk memasukkan definisi grup paket dengan teks:

   1. Pilih **Teks** untuk beralih ke mode teks.

   1. Dalam **definisi grup Package**, masukkan definisi grup paket. Untuk informasi selengkapnya tentang sintaks definisi grup paket, lihat[Sintaks definisi grup Package dan perilaku pencocokan](package-group-definition-syntax-matching-behavior.md).

   1. Pilih **Berikutnya** untuk meninjau definisi.

1. Dalam **definisi Review**, tinjau paket yang akan disertakan dalam grup paket baru berdasarkan definisi yang diberikan sebelumnya. Setelah meninjau, pilih **Berikutnya**.

1. Dalam **informasi grup Package**, opsional menambahkan deskripsi dan email kontak untuk grup paket. Pilih **Berikutnya**.

1. Dalam **kontrol Package origin**, konfigurasikan kontrol asal yang akan diterapkan ke paket dalam grup. Untuk informasi selengkapnya tentang kontrol asal grup paket, lihat[Kontrol asal grup Package](package-group-origin-controls.md).

1. Pilih **Buat grup paket**.

## Buat grup paket (AWS CLI)
<a name="create-package-group-cli"></a>

Gunakan `create-package-group` perintah untuk membuat grup paket di domain Anda. Untuk `--package-group` opsi, masukkan definisi grup paket yang menentukan paket mana yang terkait dengan grup. Untuk informasi selengkapnya tentang sintaks definisi grup paket, lihat[Sintaks definisi grup Package dan perilaku pencocokan](package-group-definition-syntax-matching-behavior.md).

Jika belum, konfigurasikan AWS CLI dengan mengikuti langkah-langkah di[Menyiapkan dengan AWS CodeArtifact](get-set-up-for-codeartifact.md).

```
aws codeartifact create-package-group \
         --domain my_domain \
         --package-group '/nuget/*' \
         --domain-owner 111122223333 \
         --contact-info contact@email.com \
         --description "a new package group" \
         --tags key=key1,value=value1
```

# Melihat atau mengedit grup paket
<a name="view-edit-package-group"></a>

Anda dapat melihat daftar semua grup paket, melihat detail grup paket tertentu, atau mengedit detail atau konfigurasi grup paket menggunakan CodeArtifact konsol atau AWS Command Line Interface (AWS CLI). 

## Melihat atau mengedit grup paket (konsol)
<a name="view-edit-package-group-console"></a>

1. Buka AWS CodeArtifact konsol di [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home).

1. Di panel navigasi, pilih **Domain**, lalu pilih domain yang berisi grup paket yang ingin Anda lihat atau edit.

1. Pilih **Package groups**, dan pilih grup paket yang ingin Anda lihat atau edit.

1. Di **Detail**, lihat informasi tentang grup paket termasuk grup induknya, deskripsi, ARN, email kontak, dan kontrol asal paket.

1. Di **Subgrup**, lihat daftar grup paket yang memiliki grup ini sebagai grup induk. Grup paket dalam daftar ini dapat mewarisi pengaturan dari grup paket ini. Untuk informasi selengkapnya, lihat [Package group hirarki dan spesifisitas pola](package-group-definition-syntax-matching-behavior.md#package-group-hierarchy-pattern-specificity).

1. Dalam **Paket**, lihat paket yang termasuk dalam grup paket ini berdasarkan definisi grup paket. Di kolom **Kekuatan**, Anda dapat melihat kekuatan asosiasi paket. Untuk informasi selengkapnya, lihat [Package group hirarki dan spesifisitas pola](package-group-definition-syntax-matching-behavior.md#package-group-hierarchy-pattern-specificity).

1. Untuk mengedit informasi grup paket, pilih **Edit grup paket**.

   1. Dalam **Informasi**, perbarui deskripsi grup paket atau informasi kontak. Anda tidak dapat mengedit definisi grup paket.

   1. Dalam **kontrol asal grup Package**, perbarui pengaturan kontrol asal grup paket, yang menentukan bagaimana paket terkait dapat memasukkan repositori di domain. Untuk informasi selengkapnya, lihat [Kontrol asal grup Package](package-group-origin-controls.md).

## Melihat atau mengedit grup paket (AWS CLI)
<a name="view-edit-package-group-cli"></a>

Gunakan perintah berikut untuk melihat atau mengedit grup paket dengan AWS CLI. Jika belum, konfigurasikan AWS CLI dengan mengikuti langkah-langkah di[Menyiapkan dengan AWS CodeArtifact](get-set-up-for-codeartifact.md).

Untuk melihat semua grup paket dalam domain, gunakan `list-package-groups` perintah.

```
aws codeartifact list-package-groups \
         --domain my_domain \
         --domain-owner 111122223333
```

Untuk melihat detail tentang grup paket, gunakan `describe-package-group` perintah. Untuk informasi selengkapnya tentang definisi grup paket, lihat[Sintaks definisi grup Package dan contoh](package-group-definition-syntax-matching-behavior.md#package-group-definition-syntax-examples).

```
aws codeartifact describe-package-group \
         --domain my_domain \
         --domain-owner 111122223333 \
         --package-group '/nuget/*'
```

Untuk melihat grup paket anak dari grup paket, gunakan `list-sub-package-groups` perintah.

```
aws codeartifact list-sub-package-groups \
         --domain my_domain \
         --domain-owner 111122223333 \
         --package-group '/nuget/*' \
```

Untuk melihat grup paket yang terkait dengan paket, gunakan `get-associated-package-group` perintah. Anda harus menggunakan nama paket dan namespace yang dinormalisasi untuk format paket, NuGet Python, dan Swift. [Untuk informasi selengkapnya tentang bagaimana nama paket dan ruang nama dinormalisasi, lihat dokumentasi normalisasi nama, [NuGet](nuget-name-normalization.md)[Python](python-name-normalization.md), dan Swift.](swift-name-normalization.md) 

```
aws codeartifact get-associated-package-group \
         --domain my_domain \
         --domain-owner 111122223333 \
         --format npm \
         --package packageName \
         --namespace scope
```

Untuk mengedit grup paket, gunakan `update-package-group` perintah. Perintah ini digunakan untuk memperbarui informasi kontak grup paket atau deskripsi. Untuk informasi tentang pengaturan kontrol asal grup paket, dan menambahkan atau mengeditnya, lihat[Kontrol asal grup Package](package-group-origin-controls.md). Untuk informasi selengkapnya tentang definisi grup paket, lihat [Sintaks definisi grup Package dan contoh](package-group-definition-syntax-matching-behavior.md#package-group-definition-syntax-examples)

```
aws codeartifact update-package-group \
         --domain my_domain \
         --package-group '/nuget/*' \
         --domain-owner 111122223333 \
         --contact-info contact@email.com \
         --description "updated package group description"
```

# Hapus grup paket
<a name="delete-package-group"></a>

Anda dapat menghapus grup paket menggunakan CodeArtifact konsol atau AWS Command Line Interface (AWS CLI).

Perhatikan perilaku berikut saat menghapus grup paket:
+ Grup paket root,`/*`, tidak dapat dihapus.
+ Paket dan versi paket yang terkait dengan grup paket tersebut tidak dihapus.
+ Ketika grup paket dihapus, grup paket anak langsung akan menjadi anak-anak dari grup paket induk langsung grup paket. Oleh karena itu, jika salah satu grup anak mewarisi pengaturan apa pun dari induk, pengaturan tersebut dapat berubah.

## Hapus grup paket (konsol)
<a name="delete-package-group-console"></a>

1. Buka AWS CodeArtifact konsol di [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home).

1. Di panel navigasi, pilih **Domain**, lalu pilih domain yang berisi grup paket yang ingin Anda lihat atau edit.

1. Pilih **Package group**.

1. Pilih grup paket yang ingin Anda hapus dan pilih **Hapus**.

1. Masukkan hapus di bidang dan pilih **Hapus**.

## Hapus grup paket (AWS CLI)
<a name="delete-package-group-cli"></a>

Untuk menghapus grup paket, gunakan `delete-package-group` perintah.

```
aws codeartifact delete-package-group \
         --domain my_domain \
         --domain-owner 111122223333 \
         --package-group '/nuget/*'
```

# Kontrol asal grup Package
<a name="package-group-origin-controls"></a>

Package origin control digunakan untuk mengonfigurasi bagaimana versi paket dapat memasukkan domain. Anda dapat mengatur kontrol asal pada grup paket untuk mengonfigurasi bagaimana versi setiap paket yang terkait dengan grup paket dapat memasukkan repositori tertentu di domain.

Pengaturan kontrol asal Package group terdiri dari yang berikut:
+ [Pengaturan pembatasan](#package-group-origin-control-settings-restrictions): Pengaturan ini menentukan apakah paket dapat memasukkan repositori CodeArtifact dari penerbitan, internal upstream, atau eksternal, repositori publik.
+ [Daftar repositori yang diizinkan](#package-group-origin-control-settings-repositories): Setiap pengaturan pembatasan dapat diatur untuk memungkinkan repositori tertentu. Jika pengaturan pembatasan diatur untuk mengizinkan repositori tertentu, pembatasan itu akan memiliki daftar repositori yang diizinkan yang sesuai.

**catatan**  
Pengaturan kontrol asal untuk grup paket sedikit berbeda dari pengaturan kontrol asal untuk paket individual. Untuk informasi selengkapnya tentang pengaturan kontrol asal untuk paket, lihat[Pengaturan kontrol asal paket](package-origin-controls.md#package-origin-control-settings).

## Pengaturan pembatasan
<a name="package-group-origin-control-settings-restrictions"></a>

Pengaturan pembatasan pengaturan kontrol asal grup paket menentukan bagaimana paket yang terkait dengan grup tersebut dapat memasukkan repositori di domain.

### MENERBITKAN
<a name="package-group-origin-control-settings-restrictions-publish"></a>

`PUBLISH`Pengaturan mengonfigurasi apakah versi paket dapat dipublikasikan langsung ke repositori apa pun di domain menggunakan pengelola paket atau alat serupa.
+ **ALLOW**: Versi Package dapat dipublikasikan langsung ke semua repositori.
+ **BLOCK**: Versi Package tidak dapat dipublikasikan langsung ke repositori manapun.
+ **ALLOW\$1SPECIFIC\$1REPOSITORIES**: Versi paket hanya dapat dipublikasikan langsung ke repositori yang ditentukan dalam daftar repositori yang diizinkan untuk dipublikasikan.
+ **INHERIT**: `PUBLISH` Pengaturan diwarisi dari grup paket induk pertama dengan pengaturan yang tidak. `INHERIT`

### EXTERNAL\$1UPSTREAM
<a name="package-group-origin-control-settings-restrictions-ext-upstream"></a>

`EXTERNAL_UPSTREAM`Pengaturan mengonfigurasi apakah versi paket dapat dicerna dari repositori publik eksternal saat diminta oleh manajer paket. Untuk daftar repositori eksternal yang didukung, lihat. [Repositori koneksi eksternal yang didukung](external-connection.md#supported-public-repositories)
+ **ALLOW**: Versi paket apa pun dapat dicerna ke semua repositori dari sumber publik dengan koneksi eksternal.
+ **BLOCK**: Versi Package tidak dapat dicerna ke dalam repositori apa pun dari sumber publik dengan koneksi eksternal.
+ **ALLOW\$1SPECIFIC\$1REPOSITORIES**: Versi paket hanya dapat dicerna dari sumber publik ke dalam repositori yang ditentukan dalam daftar repositori yang diizinkan untuk upstream eksternal.
+ **INHERIT**: `EXTERNAL_UPSTREAM` Pengaturan diwarisi dari grup paket induk pertama dengan pengaturan yang tidak. `INHERIT`

### INTERNAL\$1UPSTREAM
<a name="package-group-origin-control-settings-restrictions-int-upstream"></a>

`INTERNAL_UPSTREAM`Pengaturan mengonfigurasi apakah versi paket dapat dipertahankan dari repositori upstream internal di CodeArtifact domain yang sama ketika diminta oleh manajer paket.
+ **IZINKAN**: Versi paket apa pun dapat dipertahankan dari repositori lain yang dikonfigurasi sebagai CodeArtifact repositori hulu.
+ **BLOCK**: Versi Package tidak dapat dipertahankan dari repositori lain yang dikonfigurasi sebagai CodeArtifact repositori upstream.
+ **ALLOW\$1SPECIFIC\$1REPOSITORIES**: Versi paket hanya dapat dipertahankan dari respositori CodeArtifact lain yang dikonfigurasi sebagai repositori upstream ke dalam repositori yang ditentukan dalam daftar repositori yang diizinkan untuk upstream internal.
+ **INHERIT**: `INTERNAL_UPSTREAM` Pengaturan diwarisi dari grup paket induk pertama dengan pengaturan yang tidak. `INHERIT`

## Daftar repositori yang diizinkan
<a name="package-group-origin-control-settings-repositories"></a>

Ketika pengaturan pembatasan dikonfigurasi sebagai`ALLOW_SPECIFIC_REPOSITORIES`, grup paket berisi daftar repositori diizinkan yang menyertainya yang berisi daftar repositori yang diizinkan untuk pengaturan pembatasan itu. Oleh karena itu, grup paket berisi dari 0 hingga 3 daftar repositori yang diizinkan, satu untuk setiap pengaturan yang dikonfigurasi sebagai. `ALLOW_SPECIFIC_REPOSITORIES`

Saat Anda menambahkan repositori ke daftar repositori yang diizinkan grup paket, Anda harus menentukan daftar repositori mana yang diizinkan untuk menambahkannya.

Daftar repositori yang mungkin diizinkan adalah sebagai berikut:
+ `EXTERNAL_UPSTREAM`: Izinkan atau blokir konsumsi versi paket dari repositori eksternal di repositori yang ditambahkan.
+ `INTERNAL_UPSTREAM`: Izinkan atau blokir penarikan versi paket dari repositori lain di CodeArtifact repositori yang ditambahkan.
+ `PUBLISH`: Izinkan atau blokir penerbitan langsung versi paket dari manajer paket ke repositori yang ditambahkan.

## Mengedit pengaturan kontrol asal grup paket
<a name="package-group-edit-origin-controls"></a>

Untuk menambah atau mengedit kontrol asal untuk grup paket, lakukan langkah-langkah dalam prosedur berikut. Untuk informasi tentang pengaturan kontrol asal grup paket, lihat [Pengaturan pembatasan](#package-group-origin-control-settings-restrictions) dan[Daftar repositori yang diizinkan](#package-group-origin-control-settings-repositories).

**Untuk menambah atau mengedit kontrol asal grup paket (CLI)**

1. Jika belum, konfigurasikan AWS CLI dengan mengikuti langkah-langkah di[Menyiapkan dengan AWS CodeArtifact](get-set-up-for-codeartifact.md).

1. Gunakan `update-package-group-origin-configuration` perintah untuk menambah atau mengedit kontrol asal paket.
   + Untuk`--domain`, masukkan CodeArtifact domain yang berisi grup paket yang ingin Anda perbarui.
   + Untuk`--domain-owner`, masukkan nomor akun pemilik domain.
   + Untuk`--package-group`, masukkan grup paket yang ingin Anda perbarui.
   + Untuk`--restrictions`, masukkan pasangan nilai kunci yang mewakili batasan kontrol asal.
   + Untuk`--add-allowed-repositories`, masukkan objek JSON yang berisi tipe pembatasan dan nama repositori untuk ditambahkan ke daftar repositori yang diizinkan yang sesuai untuk pembatasan tersebut.
   + Untuk`--remove-allowed-repositories`, masukkan objek JSON yang berisi tipe pembatasan dan nama repositori untuk dihapus dari daftar repositori yang diizinkan sesuai untuk pembatasan tersebut.

   ```
   aws codeartifact update-package-group-origin-configuration \
      --domain my_domain \
      --domain-owner 111122223333 \
      --package-group '/nuget/*' \
      --restrictions INTERNAL_UPSTREAM=ALLOW_SPECIFIC_REPOSITORIES \
      --add-allowed-repositories originRestrictionType=INTERNAL_UPSTREAM,repositoryName=my_repo \
      --remove-allowed-repositories originRestrictionType=INTERNAL_UPSTREAM,repositoryName=my_repo2
   ```

   Contoh berikut menambahkan beberapa pembatasan, dan beberapa repositori dalam satu perintah.

   ```
   aws codeartifact update-package-group-origin-configuration \
      --domain my_domain \
      --domain-owner 111122223333 \
      --package-group '/nuget/*' \
      --restrictions PUBLISH=BLOCK,EXTERNAL_UPSTREAM=ALLOW_SPECIFIC_REPOSITORIES,INTERNAL_UPSTREAM=ALLOW_SPECIFIC_REPOSITORIES \
      --add-allowed-repositories originRestrictionType=INTERNAL_UPSTREAM,repositoryName=my_repo originRestrictionType=INTERNAL_UPSTREAM,repositoryName=my_repo2 \
      --remove-allowed-repositories originRestrictionType=INTERNAL_UPSTREAM,repositoryName=my_repo2
   ```

## Contoh konfigurasi kontrol asal grup Package
<a name="package-group-origin-control-examples"></a>

Contoh berikut menunjukkan konfigurasi kontrol asal paket untuk skenario manajemen paket umum.

### Mengizinkan paket dengan nama pribadi dipublikasikan, tetapi tidak dicerna
<a name="package-group-origin-control-examples-one"></a>

Skenario ini kemungkinan merupakan skenario umum dalam manajemen paket:
+ Izinkan paket dengan nama pribadi dipublikasikan ke repositori di domain Anda dari pengelola paket, dan blokir agar tidak tertelan ke repositori di domain Anda dari repositori publik eksternal.
+ Izinkan semua paket lain dicerna ke repositori di domain Anda dari eksternal, repositori publik, dan blokir agar tidak dipublikasikan ke repositori di domain Anda dari pengelola paket.

**Untuk mencapai ini, Anda harus mengonfigurasi grup paket dengan pola yang menyertakan nama pribadi, dan pengaturan asal **PUBLISH: ALLOW, EXTERNAL\$1UPSTREAM:** **BLOCK, dan INTERNAL\$1UPSTREAM: ALLOW**.** Ini akan memastikan paket dengan nama pribadi dapat dipublikasikan secara langsung, tetapi tidak dapat dicerna dari repositori eksternal.

 AWS CLI Perintah berikut membuat dan mengkonfigurasi grup paket dengan pengaturan pembatasan asal yang cocok dengan perilaku yang diinginkan:

Untuk membuat grup paket:

```
aws codeartifact create-package-group \
   --domain my_domain \
   --package-group /npm/space/anycompany~ \
   --domain-owner 111122223333 \
   --contact-info contact@email.com | URL \
   --description "my package group"
```

Untuk memperbarui konfigurasi asal grup paket:

```
aws codeartifact update-package-group-origin-configuration \
   --domain my_domain \
   --domain-owner 111122223333 \
   --package-group '/npm/space/anycompany~' \
   --restrictions PUBLISH=ALLOW,EXTERNAL_UPSTREAM=BLOCK,INTERNAL_UPSTREAM=ALLOW
```

### Mengizinkan konsumsi dari repositori eksternal melalui satu repositori
<a name="package-group-origin-control-examples-ingestion-one-repo"></a>

Dalam skenario ini, domain Anda memiliki beberapa repositori. Dari repositori tersebut, `repoA` memiliki koneksi hulu ke`repoB`, yang memiliki koneksi eksternal ke repositori publik,, seperti yang ditunjukkan: `npmjs.com`

`repoA --> repoB --> npmjs.com`

Anda ingin mengizinkan konsumsi paket dari grup paket tertentu, `/npm/space/anycompany~` dari `npmjs.com` ke`repoA`, tetapi hanya melalui. `repoB` Anda juga ingin memblokir konsumsi paket yang terkait dengan grup paket ke dalam repositori lain di domain Anda, dan memblokir penerbitan langsung paket dengan manajer paket. Untuk mencapai ini, Anda membuat dan mengkonfigurasi grup paket sebagai berikut:

**Pengaturan pembatasan asal **PUBLISH: BLOCK, dan EXTERNAL\$1UPSTREAM:** **ALLOW\$1SPECIFIC\$1REPOSITORIES, dan INTERNAL\$1UPSTREAM: ALLOW\$1SPECIFIC\$1REPOSITORIES**.**

`repoA`dan `repoB` ditambahkan ke daftar repositori yang diizinkan yang sesuai:
+ `repoA`harus ditambahkan ke `INTERNAL_UPSTREAM` daftar, karena akan mendapatkan paket dari hulu internalnya,`repoB`.
+ `repoB`harus ditambahkan ke `EXTERNAL_UPSTREAM` daftar, karena akan mendapatkan paket dari repositori eksternal,. `npmjs.com`

 AWS CLI Perintah berikut membuat dan mengkonfigurasi grup paket dengan pengaturan pembatasan asal yang cocok dengan perilaku yang diinginkan:

Untuk membuat grup paket:

```
aws codeartifact create-package-group \
   --domain my_domain \
   --package-group /npm/space/anycompany~ \
   --domain-owner 111122223333 \
   --contact-info contact@email.com | URL \
   --description "my package group"
```

Untuk memperbarui konfigurasi asal grup paket:

```
aws codeartifact update-package-group-origin-configuration \
   --domain my_domain \
   --domain-owner 111122223333 \
   --package-group /npm/space/anycompany~ \
   --restrictions PUBLISH=BLOCK,EXTERNAL_UPSTREAM=ALLOW_SPECIFIC_REPOSITORIES,INTERNAL_UPSTREAM=ALLOW_SPECIFIC_REPOSITORIES \
   --add-allowed-repositories originRestrictionType=INTERNAL_UPSTREAM,repositoryName=repoA originRestrictionType=EXTERNAL_UPSTREAM,repositoryName=repoB
```

## Bagaimana pengaturan kontrol asal grup paket berinteraksi dengan pengaturan kontrol asal paket
<a name="package-group-origin-control-settings-interaction"></a>

Karena paket memiliki pengaturan kontrol asal, dan grup paket terkait memiliki pengaturan kontrol asal, penting untuk memahami bagaimana kedua pengaturan yang berbeda berinteraksi satu sama lain. Untuk informasi tentang interaksi antara pengaturan, lihat[Bagaimana kontrol asal paket berinteraksi dengan kontrol asal grup paket](package-origin-controls.md#package-origin-controls-interaction-package-groups).

# Sintaks definisi grup Package dan perilaku pencocokan
<a name="package-group-definition-syntax-matching-behavior"></a>

Topik ini berisi informasi tentang mendefinisikan grup paket, perilaku pencocokan pola, kekuatan asosiasi paket, dan hierarki grup paket.

**Contents**
+ [Sintaks definisi grup Package dan contoh](#package-group-definition-syntax-examples)
  + [Definisi dan normalisasi grup Package](#package-group-definition-syntax-examples-normalization)
  + [Ruang nama dalam definisi grup paket](#package-group-definition-syntax-examples-namespaces)
+ [Package group hirarki dan spesifisitas pola](#package-group-hierarchy-pattern-specificity)
+ [Kata, batas kata, dan pencocokan awalan](#package-group-word-boundary-prefix)
+ [Sensitivitas kasus](#package-group-case-sensitivity)
+ [Pertandingan kuat dan lemah](#package-group-strong-and-weak-match)
+ [Variasi tambahan](#package-group-additional-variations)

## Sintaks definisi grup Package dan contoh
<a name="package-group-definition-syntax-examples"></a>

 Sintaks pola untuk mendefinisikan kelompok paket erat mengikuti pemformatan jalur paket. Jalur paket dibuat dari komponen koordinat paket (format, namespace, dan nama) dengan menambahkan garis miring ke awal dan memisahkan masing-masing komponen dengan garis miring ke depan. *Misalnya, jalur paket untuk paket npm bernama *anycompany-ui-components*dalam *ruang* namespace adalah/-ui-components. npm/space/anycompany*

Pola grup paket mengikuti struktur yang sama dengan jalur paket, kecuali komponen yang tidak ditentukan sebagai bagian dari definisi grup dihilangkan, dan pola diakhiri dengan akhiran. Sufiks yang disertakan menentukan perilaku pencocokan pola, sebagai berikut:
+ `$`Sufiks akan cocok dengan koordinat paket lengkap.
+ `~`Sufiks akan cocok dengan awalan.
+ `*`Sufiks akan cocok dengan semua nilai komponen yang ditentukan sebelumnya.

Berikut adalah contoh pola untuk masing-masing kombinasi yang diizinkan:

1. Semua format paket: `/*`

1. Format paket tertentu: `/npm/*`

1. Format paket dan awalan namespace: `/maven/com.anycompany~`

1. Format paket dan namespace: `/npm/space/*`

1. Format paket, namespace, dan awalan nama: `/npm/space/anycompany-ui~`

1. Format paket, namespace, dan nama: `/maven/org.apache.logging.log4j/log4j-core$`

Seperti yang ditunjukkan pada contoh di atas, `~` akhiran ditambahkan ke akhir namespace atau nama untuk mewakili kecocokan awalan dan `*` muncul setelah garis miring saat digunakan untuk mencocokkan semua nilai untuk komponen berikutnya di jalur (baik semua format, semua ruang nama, atau semua nama).

### Definisi dan normalisasi grup Package
<a name="package-group-definition-syntax-examples-normalization"></a>

CodeArtifact menormalkan NuGet, Python, dan nama paket Swift, dan menormalkan ruang nama paket Swift sebelum menyimpannya. CodeArtifact menggunakan nama-nama yang dinormalisasi ini saat mencocokkan paket dengan definisi grup paket. Oleh karena itu, grup paket yang berisi namespace atau nama dalam format ini harus menggunakan namespace dan nama yang dinormalisasi. [Untuk informasi selengkapnya tentang bagaimana nama paket dan ruang nama dinormalisasi, lihat dokumentasi normalisasi nama, [NuGet](nuget-name-normalization.md)[Python](python-name-normalization.md), dan Swift.](swift-name-normalization.md)

### Ruang nama dalam definisi grup paket
<a name="package-group-definition-syntax-examples-namespaces"></a>

Untuk paket atau format paket tanpa namespace (Python dan NuGet), grup paket tidak boleh berisi namespace. Definisi grup paket untuk grup paket ini berisi bagian namespace kosong. *Misalnya, jalur untuk paket Python bernama *request adalah/python //requests*.*

Untuk paket atau format paket dengan namespace (Maven, generik, dan Swift), namespace harus disertakan jika nama paket disertakan. Untuk format paket Swift, namespace paket yang dinormalisasi akan digunakan. Untuk informasi selengkapnya tentang cara ruang nama paket Swift dinormalisasi, lihat. [Nama paket Swift dan normalisasi namespace](swift-name-normalization.md)

## Package group hirarki dan spesifisitas pola
<a name="package-group-hierarchy-pattern-specificity"></a>

Paket yang “dalam” atau “terkait dengan” grup paket adalah paket dengan jalur paket yang cocok dengan pola grup tetapi tidak cocok dengan pola grup yang lebih spesifik. Misalnya, mengingat grup paket `/npm/*` dan`/npm/space/*`, jalur paket */npm//react* dikaitkan dengan grup pertama (`/npm/*`) sementara*/npm/space/aui.components dan/npm/space/amplify**-ui-core* dikaitkan dengan grup kedua (). `/npm/space/*` Meskipun sebuah paket mungkin cocok dengan beberapa grup, setiap paket hanya dikaitkan dengan satu grup, kecocokan paling spesifik, dan hanya konfigurasi satu grup yang berlaku untuk paket tersebut.

Ketika jalur paket cocok dengan beberapa pola, pola “lebih spesifik” dapat dianggap sebagai pola pencocokan terpanjang. Atau, pola yang lebih spesifik adalah pola yang cocok dengan subset yang tepat dari paket yang cocok dengan pola yang kurang spesifik. Dari contoh kami sebelumnya, setiap paket yang cocok `/npm/space/*` juga cocok`/npm/*`, tetapi kebalikannya tidak benar, yang membuat `/npm/space/*` pola lebih spesifik karena merupakan bagian yang tepat dari`/npm/*`. Karena satu grup adalah bagian dari grup lain, ia menciptakan hierarki, di mana `/npm/space/*` merupakan subkelompok dari kelompok induk,. `/npm/*`

Meskipun hanya konfigurasi grup paket yang paling spesifik yang berlaku untuk sebuah paket, grup tersebut dapat dikonfigurasi untuk mewarisi dari konfigurasi grup induknya.

## Kata, batas kata, dan pencocokan awalan
<a name="package-group-word-boundary-prefix"></a>

Sebelum membahas pencocokan awalan, mari kita definisikan beberapa istilah kunci:
+ Sebuah *kata* huruf atau angka diikuti dengan nol atau lebih huruf, angka, atau karakter tanda (seperti aksen, umlaut, dll.).
+ *Batas kata* ada di akhir kata, ketika karakter non-kata tercapai. Karakter non-kata adalah karakter tanda baca seperti`.`,, `-` dan. `_`

Secara khusus, pola regex untuk sebuah kata adalah`[\p{L}\p{N}][\p{L}\p{N}\p{M}]*`, yang dapat dipecah sebagai berikut:
+ `\p{L}`mewakili surat apa pun.
+ `\p{N}`mewakili nomor apapun.
+ `\p{M}`mewakili karakter tanda apa pun, seperti aksen, umlauts, dll.

Oleh karena itu, `[\p{L}\p{N}]` mewakili angka atau huruf, dan `[\p{L}\p{N}\p{M}]*` mewakili nol atau lebih huruf, angka, atau karakter tanda dan batas kata berada di akhir setiap kecocokan pola regex ini.

**catatan**  
Pencocokan batas kata didasarkan pada definisi “kata” ini. Ini tidak didasarkan pada kata-kata yang didefinisikan dalam kamus, atau CameCase. Misalnya, tidak ada batas kata dalam `oneword` atau. `OneWord`

Sekarang batas kata dan kata didefinisikan, kita dapat menggunakannya untuk menggambarkan pencocokan awalan dalam. CodeArtifact Untuk menunjukkan kecocokan awalan pada batas kata, karakter pencocokan (`~`) digunakan setelah karakter kata. Misalnya, polanya `/npm/space/foo~` cocok dengan jalur paket `/npm/space/foo` dan`/npm/space/foo-bar`, tetapi tidak `/npm/space/food` atau`/npm/space/foot`.

Wildcard (`*`) diperlukan untuk digunakan sebagai pengganti `~` saat mengikuti karakter non-kata, seperti dalam pola. `/npm/*`

## Sensitivitas kasus
<a name="package-group-case-sensitivity"></a>

Definisi grup Package bersifat peka huruf besar/kecil, yang berarti bahwa pola yang hanya berbeda berdasarkan kasus dapat ada sebagai grup paket terpisah. Misalnya, pengguna dapat membuat grup paket terpisah dengan pola`/npm//AsyncStorage$`,`/npm//asyncStorage$`, dan `/npm//asyncstorage$` untuk tiga paket terpisah yang ada di npm Public Registry: *AsyncStorage*, *AsyncStorage, asyncstorage* yang hanya berbeda *menurut kasus*. 

Sementara kasus penting, CodeArtifact masih mengaitkan paket ke grup paket jika paket memiliki variasi pola yang berbeda menurut kasus. Jika pengguna membuat grup `/npm//AsyncStorage$` paket tanpa membuat dua grup lain yang ditunjukkan di atas, maka semua variasi kasus nama *AsyncStorage*, termasuk *AsyncStorage dan *asyncstorage**, akan dikaitkan dengan grup paket. Tapi, seperti yang dijelaskan di bagian selanjutnya[Pertandingan kuat dan lemah](#package-group-strong-and-weak-match), variasi ini akan ditangani secara berbeda dari *AsyncStorage*, yang persis cocok dengan polanya. 

## Pertandingan kuat dan lemah
<a name="package-group-strong-and-weak-match"></a>

Informasi di bagian sebelumnya,[Sensitivitas kasus](#package-group-case-sensitivity), menyatakan bahwa kelompok paket peka huruf besar/kecil, dan kemudian menjelaskan bahwa mereka tidak peka huruf besar/kecil. Ini karena definisi grup paket CodeArtifact memiliki konsep kecocokan kuat (atau kecocokan tepat) dan kecocokan lemah (atau kecocokan variasi). Kecocokan yang kuat adalah ketika paket cocok dengan pola persis, tanpa variasi apa pun. Pencocokan yang lemah adalah ketika paket cocok dengan variasi pola, seperti kasus huruf yang berbeda. Perilaku kecocokan yang lemah mencegah paket yang merupakan variasi dari pola grup paket agar tidak bergulir ke grup paket yang lebih umum. Ketika sebuah paket adalah variasi (kecocokan lemah) dari pola grup pencocokan yang paling spesifik, maka paket tersebut dikaitkan dengan grup tetapi paket diblokir alih-alih menerapkan konfigurasi kontrol asal grup, mencegah versi baru paket ditarik dari upstream atau diterbitkan. Perilaku ini mengurangi risiko serangan rantai pasokan yang dihasilkan dari kebingungan ketergantungan paket dengan nama yang hampir identik.

Untuk mengilustrasikan perilaku kecocokan yang lemah, misalkan grup paket `/npm/*` memungkinkan konsumsi dan memblokir penerbitan. Grup paket yang lebih spesifik,`/npm//anycompany-spicy-client$`, dikonfigurasi untuk memblokir konsumsi dan memungkinkan publikasi. Paket bernama *anycompany-spicy-client*adalah kecocokan kuat dari grup paket, yang memungkinkan versi paket untuk diterbitkan dan memblokir konsumsi versi paket. Satu-satunya casing dari nama paket yang diizinkan untuk dipublikasikan adalah *anycompany-spicy-client*, karena ini adalah kecocokan yang kuat untuk pola definisi paket. Variasi kasus yang berbeda, seperti *AnyCompany-spicy-client* diblokir dari penerbitan karena kecocokan yang lemah. Lebih penting lagi, grup paket memblokir konsumsi semua variasi kasus, bukan hanya nama huruf kecil yang digunakan dalam pola, mengurangi risiko serangan kebingungan ketergantungan.

## Variasi tambahan
<a name="package-group-additional-variations"></a>

Selain perbedaan kasus, pencocokan lemah juga mengabaikan perbedaan urutan tanda hubung`-`, titik, garis bawah `.``_`, dan karakter yang dapat membingungkan (seperti karakter yang tampak serupa dari huruf terpisah). Selama normalisasi yang digunakan untuk pencocokan lemah, CodeArtifact melakukan casefolding (mirip dengan mengonversi ke huruf kecil), menggantikan urutan karakter tanda hubung, titik, dan garis bawah dengan satu titik, dan menormalkan karakter yang dapat membingungkan.

Pencocokan yang lemah memperlakukan tanda hubung, titik, dan garis bawah sebagai setara tetapi tidak sepenuhnya mengabaikannya. *Ini berarti bahwa *foo-bar, foo.bar**, foo.. bar**, dan foo\$1bar* *semuanya setara dengan kecocokan yang lemah, tetapi foobar* tidak.* Meskipun beberapa repositori publik menerapkan langkah-langkah untuk mencegah jenis variasi ini, perlindungan yang diberikan oleh repositori publik tidak membuat fitur grup paket ini tidak diperlukan. Misalnya, repositori publik seperti registri Public Registry npm hanya akan mencegah variasi baru dari paket bernama *my-package* jika paket saya sudah dipublikasikan ke *dalamnya*. *Jika *paket saya adalah paket* internal dan grup `/npm//my-package$` paket dibuat yang memungkinkan publikasi dan blokir konsumsi, Anda mungkin tidak ingin menerbitkan paket saya ke Registri Publik npm untuk mencegah varian *seperti.package* saya diizinkan.*

**Sementara beberapa format paket seperti Maven memperlakukan karakter ini secara berbeda (Maven memperlakukan `.` sebagai pemisah hierarki namespace tetapi tidak `-` atau`_`), sesuatu seperti com.act-on masih dapat dikacaukan dengan com.act.on.**

**catatan**  
Perhatikan bahwa setiap kali beberapa variasi dikaitkan dengan grup paket, administrator dapat membuat grup paket baru untuk variasi tertentu guna mengonfigurasi perilaku yang berbeda untuk variasi tersebut. 

# Tandai grup paket di CodeArtifact
<a name="package-group-tags"></a>

Tanda adalah pasangan kunci-nilai yang terkait dengan sumber daya AWS. Anda dapat menerapkan tag ke grup paket Anda di CodeArtifact. Untuk informasi tentang penandaan CodeArtifact sumber daya, kasus penggunaan, kunci tag dan batasan nilai, serta jenis sumber daya yang didukung, lihat. [Penandaan pada sumber daya](tag-resources.md)

Anda dapat menggunakan CLI untuk menentukan tag saat Anda membuat grup paket atau menambah, menghapus, atau memperbarui nilai tag dari grup paket yang ada.

## Tag grup paket (CLI)
<a name="package-group-tags-cli"></a>

Anda dapat menggunakan CLI untuk mengelola tag grup paket.

Jika belum, konfigurasikan AWS CLI dengan mengikuti langkah-langkah di[Menyiapkan dengan AWS CodeArtifact](get-set-up-for-codeartifact.md).

**Tip**  
Untuk menambahkan tag, Anda harus memberikan Amazon Resource Name (ARN) dari grup paket. Untuk mendapatkan ARN dari grup paket, jalankan perintah: `describe-package-group`  

```
aws codeartifact describe-package-group \
   --domain my_domain \
   --package-group /npm/scope/anycompany~ \
   --query packageGroup.arn
```

**Topics**
+ [Tambahkan tag ke grup paket (CLI)](#package-group-tags-add-cli)
+ [Lihat tag untuk grup paket (CLI)](#package-group-tags-list-cli)
+ [Edit tag untuk grup paket (CLI)](#package-group-tags-edit-cli)
+ [Hapus tag dari grup paket (CLI)](#package-group-tags-delete-cli)

### Tambahkan tag ke grup paket (CLI)
<a name="package-group-tags-add-cli"></a>

Anda dapat menambahkan tag ke grup paket saat dibuat, atau ke grup paket yang ada. Untuk informasi tentang menambahkan tag ke grup paket saat Anda membuatnya, lihat[Buat grup paket](create-package-group.md).

Untuk menambahkan tag ke grup paket yang ada dengan AWS CLI, di terminal atau baris perintah, jalankan **tag-resource** perintah, tentukan Nama Sumber Daya Amazon (ARN) dari grup paket tempat Anda ingin menambahkan tag dan kunci serta nilai tag yang ingin Anda tambahkan. Untuk informasi tentang grup paket ARNs, lihat[Grup Package ARNs](auth-and-access-control-permissions-reference.md#package-group-arns).

Anda dapat menambahkan lebih dari satu tag ke grup paket. Misalnya, untuk menandai grup paket, */npm/scope/anycompany\$1* dengan dua tag, kunci tag bernama *key1* dengan nilai tag dari*value1*, dan kunci tag bernama *key2* dengan nilai tag*value2*:

```
aws codeartifact tag-resource \
   --resource-arn arn:aws:codeartifact:us-west-2:123456789012:package-group/my_domain/npm/scope/anycompany~ \
   --tags key=key1,value=value1 key=key2,value=value2
```

Jika berhasil, perintah ini tidak memiliki output.

### Lihat tag untuk grup paket (CLI)
<a name="package-group-tags-list-cli"></a>

Ikuti langkah-langkah ini untuk menggunakan AWS CLI untuk melihat AWS tag untuk grup paket. Jika tidak ada tanda yang telah ditambahkan, daftar yang ditampilkan kosong.

Di terminal atau baris perintah, jalankan **list-tags-for-resource** perintah dengan Amazon Resource Name (ARN) dari grup paket. Untuk informasi tentang grup paket ARNs, lihat[Grup Package ARNs](auth-and-access-control-permissions-reference.md#package-group-arns).

Misalnya, untuk melihat daftar kunci tag dan nilai tag untuk grup paket, */npm/scope/anycompany\$1* dinamai dengan nilai ARN `arn:aws:codeartifact:us-west-2:123456789012:package-group/my_domain/npm/scope/anycompany~`

```
aws codeartifact list-tags-for-resource \
   --resource-arn arn:aws:codeartifact:us-west-2:123456789012:package-group/my_domain/npm/scope/anycompany~
```

Jika berhasil, perintah ini menampilkan informasi yang serupa dengan yang berikut:

```
{
    "tags": {
        "key1": "value1",
        "key2": "value2"
    }
}
```

### Edit tag untuk grup paket (CLI)
<a name="package-group-tags-edit-cli"></a>

Ikuti langkah-langkah ini untuk menggunakan AWS CLI untuk mengedit tag untuk grup paket. Anda dapat mengubah nilai untuk kunci yang ada atau menambahkan kunci lain. Anda juga dapat menghapus tag dari grup paket, seperti yang ditunjukkan pada bagian berikutnya.

Di terminal atau baris perintah, jalankan **tag-resource** perintah, tentukan ARN dari grup paket tempat Anda ingin memperbarui tag dan tentukan kunci tag dan nilai tag. Untuk informasi tentang grup paket ARNs, lihat[Grup Package ARNs](auth-and-access-control-permissions-reference.md#package-group-arns).

```
aws codeartifact tag-resource \
   --resource-arn arn:aws:codeartifact:us-west-2:123456789012:package-group/my_domain/npm/scope/anycompany~ \
   --tags key=key1,value=newvalue1
```

Jika berhasil, perintah ini tidak memiliki output.

### Hapus tag dari grup paket (CLI)
<a name="package-group-tags-delete-cli"></a>

Ikuti langkah-langkah ini untuk menggunakan AWS CLI untuk menghapus tag dari grup paket.

**catatan**  
Jika Anda menghapus grup paket, semua asosiasi tag akan dihapus dari grup paket yang dihapus. Anda tidak perlu menghapus tag sebelum menghapus grup paket.

Di terminal atau baris perintah, jalankan **untag-resource** perintah, tentukan ARN dari grup paket tempat Anda ingin menghapus tag dan kunci tag dari tag yang ingin Anda hapus. Untuk informasi tentang grup paket ARNs, lihat[Grup Package ARNs](auth-and-access-control-permissions-reference.md#package-group-arns).

Misalnya, untuk menghapus beberapa tag pada grup paket,*/npm/scope/anycompany\$1*, dengan kunci tag *key1* dan*key2*:

```
aws codeartifact untag-resource \
   --resource-arn arn:aws:codeartifact:us-west-2:123456789012:package-group/my_domain/npm/scope/anycompany~ \
   --tag-keys key1 key2
```

Jika berhasil, perintah ini tidak memiliki output. Setelah menghapus tag, Anda dapat melihat tag yang tersisa pada grup paket menggunakan `list-tags-for-resource` perintah.