

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# CodeArtifact에서의 패키지 그룹 작업
<a name="package-groups"></a>

*패키지 그룹*은 패키지 형식, 패키지 네임스페이스 및 패키지 이름을 사용하여 정의된 패턴과 일치하는 여러 패키지에 구성을 적용하는 데 사용할 수 있습니다. 패키지 그룹을 사용하여 여러 패키지에 대한 패키지 원본 제어를 보다 편리하게 구성할 수 있습니다. 패키지 원본 제어는 새 패키지 버전의 수집 또는 게시를 차단하거나 허용하는 데 사용되며, 이를 통해 의존성 대체 공격이라는 악의적인 행위로부터 사용자를 보호합니다.

CodeArtifact의 모든 도메인에는 루트 패키지 그룹이 자동으로 포함됩니다. 이 루트 패키지 그룹 `/*`에는 모든 패키지가 포함되며 기본적으로 패키지 버전은 모든 원본 유형의 도메인에 리포지토리를 입력할 수 있습니다. 루트 패키지 그룹은 수정할 수 있지만 삭제할 수는 없습니다.

패키지 그룹 구성 기능은 새 패키지 그룹을 생성하거나 기존 패키지 그룹을 삭제할 때 최종적으로 일관된 방식으로 작동합니다. 즉, 패키지 그룹을 생성하거나 삭제할 때 원본 제어가 예상 연결 패키지에 적용되지만 일관된 최종 동작으로 인해 다소 지연됩니다. 최종 일관성에 도달하는 시간은 도메인의 패키지 그룹 수와 도메인의 패키지 수에 따라 달라집니다. 패키지 그룹 생성 또는 삭제 후 연결된 패키지에 원본 제어가 즉시 반영되지 않는 짧은 기간이 있을 수 있습니다.

또한 패키지 그룹 원본 제어에 대한 업데이트는 거의 즉시 적용됩니다. 패키지 그룹의 생성 또는 삭제와 달리 기존 패키지 그룹의 원본 제어에 대한 변경 사항은 동일한 지연 없이 연결된 패키지에 반영됩니다.

이 주제에는 AWS CodeArtifact의 패키지 그룹에 대한 정보가 포함되어 있습니다.

**Topics**
+ [패키지 그룹 생성](create-package-group.md)
+ [패키지 그룹 보기 또는 편집](view-edit-package-group.md)
+ [패키지 그룹 삭제](delete-package-group.md)
+ [패키지 그룹 원본 제어](package-group-origin-controls.md)
+ [패키지 그룹 정의 구문 및 매칭 동작](package-group-definition-syntax-matching-behavior.md)
+ [패키지 그룹에 태그 지정](package-group-tags.md)

# 패키지 그룹 생성
<a name="create-package-group"></a>

CodeArtifact 콘솔, AWS Command Line Interface(AWS CLI) 또는 CloudFormation을 사용하여 패키지 그룹을 만들 수 있습니다. CloudFormation으로 CodeArtifact 패키지 그룹을 관리하는 방법에 대한 자세한 내용은 [AWS CloudFormation을 사용하여 CodeArtifact 리소스 생성](cloudformation-codeartifact.md) 섹션을 참조하세요.

## 패키지 그룹 생성(콘솔)
<a name="create-package-group-console"></a>

1. [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home)에서 AWS CodeArtifact 콘솔을 엽니다.

1. 탐색 창에서 **도메인**을 선택한 다음, 패키지 그룹을 생성할 도메인을 선택합니다.

1. **패키지 그룹**을 선택하고 **패키지 그룹 생성**을 선택합니다.

1. **패키지 그룹 정의**에서 패키지 그룹에 대한 패키지 그룹 정의를 입력합니다. 패키지 그룹 정의에 따라 해당 그룹과 연관된 패키지가 결정됩니다. 패키지 그룹 정의를 텍스트로 직접 입력할 수 있으며, 시각적 모드를 사용하여 선택하면 패키지 그룹 정의가 자동으로 생성됩니다.

1. 시각적 모드를 사용하여 패키지 그룹 정의를 생성하려면 다음을 수행합니다.

   1. **시각적**을 선택하여 시각적 모드로 전환합니다.

   1. **패키지 형식**에서 이 그룹과 연결할 패키지의 형식을 선택합니다.

   1. **네임스페이스(범위)**에서 일치시킬 네임스페이스 기준을 선택합니다.
      + **같음**: 지정된 네임스페이스와 정확히 일치합니다. 선택한 경우 일치시킬 네임스페이스를 입력합니다.
      + **비어 있음**: 네임스페이스가 없는 패키지를 일치시킵니다.
      + **단어로 시작**: 지정된 단어로 시작하는 네임스페이스를 일치시킵니다. 선택한 경우 일치시킬 접두사 단어를 입력합니다. 단어 및 단어 경계에 대한 자세한 내용은 [단어, 단어 경계 및 접두사 일치](package-group-definition-syntax-matching-behavior.md#package-group-word-boundary-prefix) 섹션을 참조하세요.
      + **모두**: 모든 네임스페이스의 패키지를 일치시킵니다.

   1. **같음**, **비어 있음** 또는 **단어로 시작**을 선택한 경우 **패키지 이름**에서 일치시킬 패키지 이름 기준을 선택합니다.
      + **정확히 같음**: 지정된 패키지 이름과 정확하게 일치합니다. 선택한 경우 일치시킬 패키지 이름을 입력합니다.
      + **접두사로 시작**: 지정된 접두사로 시작하는 패키지를 일치시킵니다.
      + **단어로 시작**: 지정된 단어로 시작하는 패키지를 일치시킵니다. 선택한 경우 일치시킬 접두사 단어를 입력합니다. 단어 및 단어 경계에 대한 자세한 내용은 [단어, 단어 경계 및 접두사 일치](package-group-definition-syntax-matching-behavior.md#package-group-word-boundary-prefix) 섹션을 참조하세요.
      + **모두**: 모든 패키지를 일치시킵니다.

   1. **다음**을 선택하여 정의를 검토합니다.

1. 패키지 그룹 정의를 텍스트로 입력하려면 다음을 수행합니다.

   1. **텍스트**를 선택하여 텍스트 모드로 전환합니다.

   1. **패키지 그룹 정의**에서 패키지 그룹 정의를 입력합니다. 패키지 그룹 정의 구문에 대한 자세한 내용은 [패키지 그룹 정의 구문 및 매칭 동작](package-group-definition-syntax-matching-behavior.md) 섹션을 참조하세요.

   1. **다음**을 선택하여 정의를 검토합니다.

1. **정의 검토**에서 이전에 제공된 정의를 기반으로 새 패키지 그룹에 포함될 패키지를 검토합니다. 검토한 후 **다음**을 선택합니다.

1. **패키지 그룹 정보**에서 선택적으로 패키지 그룹에 대한 설명과 연락처 이메일을 추가합니다. **다음**을 선택합니다.

1. **패키지 원본 제어**에서 그룹의 패키지에 적용할 원본 제어를 구성합니다. 패키지 그룹 원본 제어에 대한 자세한 내용은 [패키지 그룹 원본 제어](package-group-origin-controls.md) 섹션을 참조하세요.

1. **패키지 그룹 생성**을 선택합니다.

## 패키지 그룹 생성(AWS CLI)
<a name="create-package-group-cli"></a>

`create-package-group` 명령을 사용하여 도메인에 패키지 그룹을 생성합니다. `--package-group` 옵션에 그룹과 연결되는 패키지를 결정하는 패키지 그룹 정의를 입력합니다. 패키지 그룹 정의 구문에 대한 자세한 내용은 [패키지 그룹 정의 구문 및 매칭 동작](package-group-definition-syntax-matching-behavior.md) 섹션을 참조하세요.

아직 구성하지 않았다면 [with AWS CodeArtifact 설정](get-set-up-for-codeartifact.md)에 나오는 단계에 따라 AWS CLI를 구성하세요.

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

# 패키지 그룹 보기 또는 편집
<a name="view-edit-package-group"></a>

CodeArtifact 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 모든 패키지 그룹 목록을 보거나, 특정 패키지 그룹의 세부 정보를 보거나, 패키지 그룹의 세부 정보 또는 구성을 편집할 수 있습니다.

## 패키지 그룹 보기 또는 편집(콘솔)
<a name="view-edit-package-group-console"></a>

1. [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home)에서 AWS CodeArtifact 콘솔을 엽니다.

1. 탐색 창에서 **도메인**을 선택한 다음, 보거나 편집할 패키지 그룹이 포함된 도메인을 선택합니다.

1. **패키지 그룹**을 선택하고 보거나 편집할 패키지 그룹을 선택합니다.

1. **세부 정보**에서 상위 그룹, 설명, ARN, 연락처 이메일 및 패키지 원본 제어를 포함한 패키지 그룹에 대한 정보를 확인합니다.

1. **하위 그룹**에서 이 그룹을 상위 그룹으로 포함하는 패키지 그룹 목록을 확인합니다. 이 목록의 패키지 그룹은 이 패키지 그룹의 설정을 상속할 수 있습니다. 자세한 내용은 [패키지 그룹 계층 구조 및 패턴 특이도](package-group-definition-syntax-matching-behavior.md#package-group-hierarchy-pattern-specificity) 섹션을 참조하세요.

1. **패키지**에서 패키지 그룹 정의를 기반으로 이 패키지 그룹에 속하는 패키지를 확인합니다. **강도** 열에서 패키지 연결의 강도를 확인할 수 있습니다. 자세한 내용은 [패키지 그룹 계층 구조 및 패턴 특이도](package-group-definition-syntax-matching-behavior.md#package-group-hierarchy-pattern-specificity) 섹션을 참조하세요.

1. 패키지 그룹 정보를 편집하려면 **패키지 그룹 편집**을 선택합니다.

   1. **정보**에서 패키지 그룹의 설명 또는 연락처 정보를 업데이트합니다. 패키지 그룹의 정의를 편집할 수는 없습니다.

   1. **패키지 그룹 원본 제어**에서 패키지 그룹의 원본 제어 설정을 업데이트하여 관련 패키지가 도메인의 리포지토리에 들어갈 수 있는 방법을 결정합니다. 자세한 내용은 [패키지 그룹 원본 제어](package-group-origin-controls.md) 섹션을 참조하세요.

## 패키지 그룹 보기 또는 편집(AWS CLI)
<a name="view-edit-package-group-cli"></a>

다음 명령을 사용하여 AWS CLI로 패키지 그룹을 보거나 편집합니다. 아직 구성하지 않았다면 [with AWS CodeArtifact 설정](get-set-up-for-codeartifact.md)에 나오는 단계에 따라 AWS CLI를 구성하세요.

도메인의 모든 패키지 그룹을 보려면 `list-package-groups` 명령을 사용합니다.

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

패키지 그룹에 대한 세부 정보를 보려면 `describe-package-group` 명령을 사용합니다. 패키지 그룹 정의에 대한 자세한 내용은 [패키지 그룹 정의 구문 및 예제](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/*'
```

패키지 그룹의 하위 패키지 그룹을 보려면 `list-sub-package-groups` 명령을 사용합니다.

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

패키지에 연결된 패키지 그룹을 보려면 `get-associated-package-group` 명령을 사용합니다. NuGet, Python 및 Swift 패키지 형식에는 정규화된 패키지 이름과 네임스페이스를 사용해야 합니다. 패키지 이름과 네임스페이스를 정규화하는 방법에 대한 자세한 내용은 [NuGet](nuget-name-normalization.md), [Python](python-name-normalization.md) 및 [Swift](swift-name-normalization.md) 이름 정규화 설명서를 참조하세요.

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

패키지 그룹을 편집하려면 `update-package-group` 명령을 사용합니다. 이 명령은 패키지 그룹의 연락처 정보 또는 설명을 업데이트하는 데 사용됩니다. 패키지 그룹 원본 제어 설정 및 추가 또는 편집에 대한 자세한 내용은 [패키지 그룹 원본 제어](package-group-origin-controls.md) 섹션을 참조하세요. 패키지 그룹 정의에 대한 자세한 내용은 [패키지 그룹 정의 구문 및 예제](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"
```

# 패키지 그룹 삭제
<a name="delete-package-group"></a>

CodeArtifact 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 패키지 그룹을 삭제할 수 있습니다.

패키지 그룹을 삭제할 때는 다음 동작에 유의하세요.
+ 루트 패키지 그룹 `/*`는 삭제할 수 없습니다.
+ 해당 패키지 그룹과 연결된 패키지 및 패키지 버전은 삭제되지 않습니다.
+ 패키지 그룹이 삭제되면 직접 하위 패키지 그룹은 패키지 그룹의 직접 상위 패키지 그룹의 하위 패키지 그룹이 됩니다. 따라서 하위 그룹 중 하나가 상위에서 설정을 상속 받는 경우 해당 설정이 변경될 수 있습니다.

## 패키지 그룹 삭제(콘솔)
<a name="delete-package-group-console"></a>

1. [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home)에서 AWS CodeArtifact 콘솔을 엽니다.

1. 탐색 창에서 **도메인**을 선택한 다음, 보거나 편집할 패키지 그룹이 포함된 도메인을 선택합니다.

1. **패키지 그룹**을 선택합니다.

1. 삭제하려는 패키지 그룹을 선택하고 **삭제**를 선택합니다.

1. 필드에 delete를 입력하고 **삭제**를 선택합니다.

## 패키지 그룹 삭제(AWS CLI)
<a name="delete-package-group-cli"></a>

패키지 그룹을 삭제하려면 `delete-package-group` 명령을 사용합니다.

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

# 패키지 그룹 원본 제어
<a name="package-group-origin-controls"></a>

패키지 원본 제어는 패키지 버전이 도메인에 들어갈 수 있는 방법을 구성하는 데 사용됩니다. 패키지 그룹에 원본 제어를 설정하여 패키지 그룹과 연결된 모든 패키지의 버전이 도메인에 지정된 리포지토리에 들어갈 수 있는 방법을 구성할 수 있습니다.

패키지 그룹 원본 제어 설정은 다음으로 구성됩니다.
+ [제한 설정](#package-group-origin-control-settings-restrictions): 이러한 설정은 게시, 내부 업스트림 또는 외부 퍼블릭 리포지토리에서 패키지가 CodeArtifact의 리포지토리에 들어갈 수 있는지 여부를 정의합니다.
+ [허용된 리포지토리 목록](#package-group-origin-control-settings-repositories): 각 제한 설정은 특정 리포지토리를 허용하도록 설정할 수 있습니다. 제한 설정이 특정 리포지토리를 허용하도록 설정된 경우 해당 제한에는 해당하는 허용 리포지토리 목록이 있습니다.

**참고**  
패키지 그룹의 원본 제어 설정은 개별 패키지의 원본 제어 설정과 약간 다릅니다. 패키지의 원본 제어 설정에 대한 자세한 내용은 [패키지 원본 제어 설정](package-origin-controls.md#package-origin-control-settings) 섹션을 참조하세요.

## 제한 설정
<a name="package-group-origin-control-settings-restrictions"></a>

패키지 그룹의 원본 제어 설정에 대한 제한 설정은 해당 그룹과 연결된 패키지가 도메인의 리포지토리에 들어갈 수 있는 방법을 결정합니다.

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

`PUBLISH` 설정은 패키지 관리자 또는 이와 유사한 도구를 사용하여 패키지 버전을 도메인의 리포지토리에 직접 게시할 수 있는지 구성합니다.
+ **ALLOW**: 패키지 버전을 모든 리포지토리에 직접 게시할 수 있습니다.
+ **BLOCK**: 패키지 버전을 리포지토리에 직접 게시할 수 없습니다.
+ **ALLOW\$1SPECIFIC\$1REPOSITORIES**: 게시를 위해 허용된 리포지토리 목록에 지정된 리포지토리에만 패키지 버전을 직접 게시할 수 있습니다.
+ **INHERIT**: `PUBLISH` 설정이 `INHERIT`가 아닌 설정을 가진 첫 번째 상위 패키지 그룹에서 상속됩니다.

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

`EXTERNAL_UPSTREAM` 설정은 패키지 관리자가 요청하는 경우 패키지 버전을 외부 퍼블릭 리포지토리에서 수집할 수 있는지 구성합니다. 지원되는 외부 리포지토리 목록은 [지원하는 외부 연결 저장소](external-connection.md#supported-public-repositories) 섹션을 참조하세요.
+ **ALLOW**: 모든 패키지 버전을 외부 연결이 있는 퍼블릭 소스의 모든 리포지토리에 수집할 수 있습니다.
+ **BLOCK**: 외부 연결이 있는 퍼블릭 소스의 리포지토리에 패키지 버전을 수집할 수 없습니다.
+ **ALLOW\$1SPECIFIC\$1REPOSITORIES**: 퍼블릭 소스에서 외부 업스트림에 대해 허용된 리포지토리 목록에 지정된 리포지토리로만 패키지 버전을 수집할 수 있습니다.
+ **INHERIT**: `EXTERNAL_UPSTREAM` 설정이 `INHERIT`가 아닌 설정을 가진 첫 번째 상위 패키지 그룹에서 상속됩니다.

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

`INTERNAL_UPSTREAM` 설정은 패키지 관리자가 요청하는 경우 동일한 CodeArtifact 도메인의 내부 업스트림 리포지토리에서 패키지 버전을 유지할 수 있는지 여부를 구성합니다.
+ **ALLOW**: 모든 패키지 버전은 업스트림 리포지토리로 구성된 다른 CodeArtifact 리포지토리에서 유지할 수 있습니다.
+ **BLOCK**: 패키지 버전은 업스트림 리포지토리로 구성된 다른 CodeArtifact 리포지토리에서 유지할 수 없습니다.
+ **ALLOW\$1SPECIFIC\$1REPOSITORIES**: 패키지 버전은 업스트림 리포지토리로 구성된 다른 CodeArtifact 리포지토리에서만 내부 업스트림에 대해 허용된 리포지토리 목록에 지정된 리포지토리로 유지할 수 있습니다.
+ **INHERIT**: `INTERNAL_UPSTREAM` 설정이 `INHERIT`가 아닌 설정을 가진 첫 번째 상위 패키지 그룹에서 상속됩니다.

## 허용된 리포지토리 목록
<a name="package-group-origin-control-settings-repositories"></a>

제한 설정이 `ALLOW_SPECIFIC_REPOSITORIES`로 구성된 경우 패키지 그룹에는 해당 제한 설정에 허용되는 리포지토리 목록이 포함된 허용되는 리포지토리 목록이 함께 포함됩니다. 따라서 패키지 그룹에는 `ALLOW_SPECIFIC_REPOSITORIES`로 구성된 각 설정에 대해 하나씩 0\$13개의 허용된 리포지토리 목록이 포함됩니다.

패키지 그룹의 허용된 리포지토리 목록에 리포지토리를 추가할 경우 리포지토리를 추가할 허용된 리포지토리 목록을 지정해야 합니다.

허용되는 리포지토리 목록은 다음과 같습니다.
+ `EXTERNAL_UPSTREAM`: 추가된 리포지토리의 외부 리포지토리에서 패키지 버전 수집을 허용 또는 차단합니다.
+ `INTERNAL_UPSTREAM`: 추가된 리포지토리의 다른 CodeArtifact 리포지토리에서 패키지 버전 가져오기를 허용 또는 차단합니다.
+ `PUBLISH`: 패키지 관리자에서 추가된 리포지토리로의 패키지 버전 직접 게시를 허용 또는 차단합니다.

## 패키지 그룹 원본 제어 설정 편집
<a name="package-group-edit-origin-controls"></a>

패키지 그룹에 대한 원본 제어를 추가하거나 편집하려면 다음 절차의 단계를 수행하세요. 패키지 그룹 원본 제어 설정에 대한 자세한 내용은 [제한 설정](#package-group-origin-control-settings-restrictions) 및 [허용된 리포지토리 목록](#package-group-origin-control-settings-repositories) 섹션을 참조하세요.

**패키지 그룹 원본 제어 추가 또는 편집(CLI)**

1. 아직 구성하지 않았다면 [with AWS CodeArtifact 설정](get-set-up-for-codeartifact.md)에 나오는 단계에 따라 AWS CLI를 구성하세요.

1. `update-package-group-origin-configuration` 명령을 사용하여 패키지 원본 제어를 추가하거나 편집합니다.
   + `--domain`에 업데이트하려는 패키지 그룹이 포함된 CodeArtifact 도메인을 입력합니다.
   + `--domain-owner`에 도메인 소유자의 계정 번호를 입력합니다.
   + `--package-group`에 업데이트하려는 패키지 그룹을 입력합니다.
   + `--restrictions`에 원본 제어 제한을 나타내는 키-값 페어를 입력합니다.
   + `--add-allowed-repositories`에 제한 유형과 리포지토리 이름이 포함된 JSON 객체를 입력하여 제한에 대해 허용되는 해당 리포지토리 목록에 추가합니다.
   + `--remove-allowed-repositories`에 제한 유형과 리포지토리 이름이 포함된 JSON 객체를 입력하여 제한에 대해 허용되는 해당 리포지토리 목록에서 제거합니다.

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

   다음 예시에서는 하나의 명령에 여러 제한 및 여러 리포지토리를 추가합니다.

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

## 패키지 그룹 원본 제어 구성 예제
<a name="package-group-origin-control-examples"></a>

다음 예제에서는 일반적인 패키지 관리 시나리오에 대한 패키지 원본 제어 구성을 보여줍니다.

### 프라이빗 이름이 있는 패키지를 게시할 수 있지만 수집할 수는 없음
<a name="package-group-origin-control-examples-one"></a>

이 시나리오는 패키지 관리의 일반적인 시나리오일 수 있습니다.
+ 패키지 관리자가 도메인의 리포지토리에 프라이빗 이름을 가진 패키지를 게시하도록 허용하고 외부 퍼블릭 리포지토리에서 도메인의 리포지토리로 수집되지 않도록 차단합니다.
+ 외부 퍼블릭 리포지토리에서 도메인의 리포지토리에 다른 모든 패키지를 수집하도록 허용하고 패키지 관리자에서 도메인의 리포지토리에 게시되는 것을 차단합니다.

이렇게 하려면 **PUBLISH: ALLOW**, **EXTERNAL\$1UPSTREAM: BLOCK** 및 **INTERNAL\$1UPSTREAM: ALLOW**의 프라이빗 이름 및 원본 설정을 포함하는 패턴으로 패키지 그룹을 구성해야 합니다. 이렇게 하면 프라이빗 이름을 가진 패키지를 직접 게시할 수 있지만 외부 리포지토리에서 수집할 수는 없습니다.

다음 AWS CLI 명령은 원하는 동작과 일치하는 원본 제한 설정을 사용하여 패키지 그룹을 생성하고 구성합니다.

패키지 그룹을 생성하려면

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

패키지 그룹의 원본 구성을 업데이트하려면

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

### 하나의 리포지토리를 통해 외부 리포지토리에서 수집 허용
<a name="package-group-origin-control-examples-ingestion-one-repo"></a>

이 시나리오에서 도메인에는 여러 개의 리포지토리가 있습니다. 이러한 리포지토리 중 `repoA`에는 다음과 같이 퍼블릭 리포지토리 `npmjs.com`에 대한 외부 연결을 가진 `repoB`에 대한 업스트림 연결이 있습니다.

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

특정 패키지 그룹 `/npm/space/anycompany~`의 패키지를 `npmjs.com`에서 `repoA`로, `repoB`를 통해서만 수집할 수 있도록 허용하려고 합니다. 또한 패키지 그룹과 연결된 패키지를 도메인의 다른 리포지토리로 수집하는 것을 차단하고 패키지 관리자를 통해 패키지를 직접 게시하는 것을 차단하려고 합니다. 이를 위해 다음과 같이 패키지 그룹을 생성하고 구성합니다.

**PUBLISH: BLOCK**, **EXTERNAL\$1UPSTREAM: ALLOW\$1SPECIFIC\$1REPOSITORIES** 및 **INTERNAL\$1UPSTREAM: ALLOW\$1SPECIFIC\$1REPOSITORIES**의 원본 제한 설정.

`repoA` 및 `repoB`가 허용되는 적절한 리포지토리 목록에 추가되었습니다.
+ `repoA`는 내부 업스트림인 `repoB`에서 패키지를 가져오므로 `INTERNAL_UPSTREAM` 목록에 추가되어야 합니다.
+ `repoB`는 외부 리포지토리인 `npmjs.com`에서 패키지를 가져오므로 `EXTERNAL_UPSTREAM` 목록에 추가해야 합니다.

다음 AWS CLI 명령은 원하는 동작과 일치하는 원본 제한 설정을 사용하여 패키지 그룹을 생성하고 구성합니다.

패키지 그룹을 생성하려면

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

패키지 그룹의 원본 구성을 업데이트하려면

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

## 패키지 그룹 원본 제어 설정이 패키지 원본 제어 설정과 상호 작용하는 방법
<a name="package-group-origin-control-settings-interaction"></a>

패키지에 원본 제어 설정이 있고 연결된 패키지 그룹에도 원본 제어 설정이 있으므로 이러한 서로 다른 두 설정이 서로 어떻게 상호 작용하는지 이해하는 것이 중요합니다. 설정 간의 상호 작용에 대한 자세한 내용은 [패키지 원본 제어가 패키지 그룹 원본 제어와 상호 작용하는 방법](package-origin-controls.md#package-origin-controls-interaction-package-groups) 섹션을 참조하세요.

# 패키지 그룹 정의 구문 및 매칭 동작
<a name="package-group-definition-syntax-matching-behavior"></a>

이 주제에는 패키지 그룹 정의, 패턴 일치 동작, 패키지 연결 강도 및 패키지 그룹 계층 구조에 대한 정보가 포함되어 있습니다.

**Contents**
+ [패키지 그룹 정의 구문 및 예제](#package-group-definition-syntax-examples)
  + [패키지 그룹 정의 및 정규화](#package-group-definition-syntax-examples-normalization)
  + [패키지 그룹 정의의 네임스페이스](#package-group-definition-syntax-examples-namespaces)
+ [패키지 그룹 계층 구조 및 패턴 특이도](#package-group-hierarchy-pattern-specificity)
+ [단어, 단어 경계 및 접두사 일치](#package-group-word-boundary-prefix)
+ [대소문자 구분](#package-group-case-sensitivity)
+ [강력한 일치와 약한 일치](#package-group-strong-and-weak-match)
+ [추가 변형](#package-group-additional-variations)

## 패키지 그룹 정의 구문 및 예제
<a name="package-group-definition-syntax-examples"></a>

 패키지 그룹을 정의하기 위한 패턴 구문은 패키지 경로의 형식을 밀접하게 따릅니다. 패키지 경로는 시작 부분에 슬래시를 추가하고 각 구성 요소를 슬래시로 구분하여 패키지의 좌표 구성 요소(형식, 네임스페이스 및 이름)에서 생성됩니다. 예를 들어 네임스페이스 *space*에서 *anycompany-ui-components*라는 npm 패키지의 패키지 경로는 */npm/space/anycompany-ui-components*입니다.

패키지 그룹 패턴은 패키지 경로와 동일한 구조를 따르며, 그룹 정의의 일부로 지정되지 않은 구성 요소는 생략되고 패턴은 접미사로 종료됩니다. 포함된 접미사는 다음과 같이 패턴의 일치 동작을 결정합니다.
+ `$` 접미사는 전체 패키지 좌표와 일치합니다.
+ `~` 접미사는 접두사와 일치합니다.
+ `*` 접미사는 이전에 정의된 구성 요소의 모든 값과 일치합니다.

다음은 허용되는 각 조합에 대한 예제 패턴입니다.

1. 모든 패키지 형식: `/*`

1. 특정 패키지 형식: `/npm/*`

1. 패키지 형식 및 네임스페이스 접두사: `/maven/com.anycompany~`

1. 패키지 형식 및 네임스페이스: `/npm/space/*`

1. 패키지 형식, 네임스페이스 및 이름 접두사: `/npm/space/anycompany-ui~`

1. 패키지 형식, 네임스페이스 및 이름: `/maven/org.apache.logging.log4j/log4j-core$`

위 예제와 같이 `~` 접미사는 네임스페이스 또는 이름 끝에 추가되어 접두사 일치를 나타내며, `*`는 경로의 다음 구성 요소(모든 형식, 모든 네임스페이스 또는 모든 이름)에 대한 모든 값과 일치시키는 데 사용되는 경우 슬래시 뒤에 옵니다.

### 패키지 그룹 정의 및 정규화
<a name="package-group-definition-syntax-examples-normalization"></a>

CodeArtifact는 NuGet, Python 및 Swift 패키지 이름을 정규화하고 저장하기 전에 Swift 패키지 네임스페이스를 정규화합니다. CodeArtifact는 패키지를 패키지 그룹 정의와 일치시킬 때 이러한 정규화된 이름을 사용합니다. 따라서 이러한 형식의 네임스페이스 또는 이름이 포함된 패키지 그룹은 정규화된 네임스페이스와 이름을 사용해야 합니다. 패키지 이름과 네임스페이스를 정규화하는 방법에 대한 자세한 내용은 [NuGet](nuget-name-normalization.md), [Python](python-name-normalization.md) 및 [Swift](swift-name-normalization.md) 이름 정규화 설명서를 참조하세요.

### 패키지 그룹 정의의 네임스페이스
<a name="package-group-definition-syntax-examples-namespaces"></a>

네임스페이스(Python 및 NuGet)가 없는 패키지 또는 패키지 형식의 경우 패키지 그룹에 네임스페이스가 포함되어서는 안 됩니다. 이러한 패키지 그룹에 대한 패키지 그룹 정의에는 빈 네임스페이스 섹션이 포함되어 있습니다. 예를 들어 *requests*라는 Python 패키지의 경로는 */python//requests*입니다.

네임스페이스(Maven, 일반 및 Swift)가 있는 패키지 또는 패키지 형식의 경우 패키지 이름이 포함되면 네임스페이스를 포함해야 합니다. Swift 패키지 형식의 경우 정규화된 패키지 네임스페이스가 사용됩니다. Swift 패키지 네임스페이스를 정규화하는 방법에 대한 자세한 내용은 [Swift 패키지 이름 및 네임스페이스 정규화](swift-name-normalization.md) 섹션을 참조하세요.

## 패키지 그룹 계층 구조 및 패턴 특이도
<a name="package-group-hierarchy-pattern-specificity"></a>

패키지 그룹에 “있거나” 패키지 그룹과 “연결된” 패키지는 그룹 패턴과 일치하지만 더 구체적인 그룹 패턴과는 일치하지 않는 패키지 경로가 있는 패키지입니다. 예를 들어 패키지 그룹 `/npm/*` 및 `/npm/space/*`를 고려할 때 패키지 경로 */npm//react*는 첫 번째 그룹(`/npm/*`)과 연결되고 */npm/space/aui.components* 및 */npm/space/amplify-ui-core*는 두 번째 그룹(`/npm/space/*`)과 연결됩니다. 패키지가 여러 그룹과 일치할 수 있지만 각 패키지는 가장 구체적으로 일치하는 단일 그룹과만 연결되며 한 그룹의 구성만 패키지에 적용됩니다.

패키지 경로가 여러 패턴과 일치하면 “보다 구체적인” 패턴을 가장 긴 일치 패턴으로 생각할 수 있습니다. 또는 보다 구체적인 패턴은 덜 구체적인 패턴과 일치하는 패키지의 적절한 하위 집합과 일치하는 패턴입니다. 이전 예제에서 `/npm/space/*`와 일치하는 모든 패키지는 `/npm/*`와도 일치하지만 그 반대는 true가 아니며, `/npm/*`의 적절한 하위 집합이므로 `/npm/space/*`을 보다 구체적인 패턴으로 만듭니다. 한 그룹은 다른 그룹의 하위 집합이므로 `/npm/space/*`이 상위 그룹인 `/npm/*`의 하위 집합인 계층 구조를 생성합니다.

패키지에는 가장 구체적인 패키지 그룹의 구성만 적용되지만 상위 그룹의 구성에서 상속되도록 해당 그룹을 구성할 수 있습니다.

## 단어, 단어 경계 및 접두사 일치
<a name="package-group-word-boundary-prefix"></a>

접두사 일치에 대해 논의하기 전에 몇 가지 주요 용어를 정의해 보겠습니다.
+ *단어*는 뒤에 0개 이상의 문자, 숫자 또는 기호 문자(예: 악센트, 움라우트 등)가 붙는 문자 또는 숫자입니다.
+ *단어 경계*는 단어가 아닌 문자에 도달했을 때 단어 끝에 있습니다. 단어가 아닌 문자는 `.`, `-` 및 `_` 등과 같은 구두점 문자입니다.

특히 단어의 정규 표현식 패턴은 `[\p{L}\p{N}][\p{L}\p{N}\p{M}]*`이며 다음과 같이 분류할 수 있습니다.
+ `\p{L}`은 모든 문자를 나타냅니다.
+ `\p{N}`은 모든 숫자를 나타냅니다.
+ `\p{M}`은 악센트, 움라우트 등과 같은 모든 기호 문자를 나타냅니다.

따라서 `[\p{L}\p{N}]`은 숫자 또는 문자를 나타내고 `[\p{L}\p{N}\p{M}]*`은 0개 이상의 문자, 숫자 또는 기호 문자를 나타내며, 단어 경계는 이 정규 표현식 패턴의 각 일치 끝에 있습니다.

**참고**  
단어 경계 일치는 이 “단어” 정의를 기반으로 합니다. 사전 또는 CameCase에 정의된 단어를 기반으로 하지 않습니다. 예를 들어 `oneword` 또는 `OneWord`에는 단어 경계가 없습니다.

이제 단어 및 단어 경계가 정의되었으므로 이를 사용하여 CodeArtifact에서 접두사 일치를 설명하겠습니다. 단어 경계에서 접두사 일치를 나타내기 위해 단어 뒤에 일치 문자(`~`)가 사용됩니다. 예를 들어 패턴 `/npm/space/foo~`는 패키지 경로 `/npm/space/foo` 및 `/npm/space/foo-bar`와 일치하지만 `/npm/space/food` 또는 `/npm/space/foot`와는 일치하지 않습니다.

패턴 `/npm/*`에서와 같이 단어가 아닌 문자 뒤에 나오는 경우 `~` 대신 와일드카드(`*`)를 사용해야 합니다.

## 대소문자 구분
<a name="package-group-case-sensitivity"></a>

패키지 그룹 정의는 대소문자를 구분하므로 대소문자만 다른 패턴이 별도의 패키지 그룹으로 존재할 수 있습니다. 예를 들어 사용자는 npm 퍼블릭 레지스트리에 있으며 대소문자만 다른 세 개의 개별 패키지인 *AsyncStorage*, *asyncStorage*, *asyncstorage*에 대해 `/npm//AsyncStorage$`, `/npm//asyncStorage$` 및 `/npm//asyncstorage$` 패턴을 사용하여 별도의 패키지 그룹을 생성할 수 있습니다.

대소문자가 중요하지만 패키지에 대소문자별로 다른 패턴의 변형이 있는 경우 CodeArtifact는 여전히 패키지를 패키지 그룹에 연결합니다. 사용자가 위에 표시된 다른 두 그룹을 생성하지 않고 `/npm//AsyncStorage$` 패키지 그룹을 생성하면 *asyncStorage* 및 *asyncstorage*를 포함하여 *AsyncStorage*라는 이름의 모든 대소문자 변형이 패키지 그룹과 연결됩니다. 그러나 다음 섹션인 [강력한 일치와 약한 일치](#package-group-strong-and-weak-match)에 설명된 대로 이러한 변형은 패턴과 정확히 일치하는 *AsyncStorage*와 다르게 처리됩니다.

## 강력한 일치와 약한 일치
<a name="package-group-strong-and-weak-match"></a>

이전 섹션 [대소문자 구분](#package-group-case-sensitivity)의 정보는 패키지 그룹이 대소문자를 구분한다고 설명한 다음, 대소문자를 구분하지 않는다고 설명합니다. 이는 CodeArtifact의 패키지 그룹 정의에 강력한 일치(또는 정확한 일치)와 약한 일치(또는 변형 일치)라는 개념이 있기 때문입니다. 강력한 일치는 패키지가 변형 없이 정확하게 패턴과 일치할 때를 말합니다. 약한 일치는 패키지가 다른 대소문자와 같은 패턴 변형과 일치하는 경우를 말합니다. 약한 일치 동작은 패키지 그룹 패턴의 변형인 패키지가 보다 일반적인 패키지 그룹으로 롤업되는 것을 방지합니다. 패키지가 가장 구체적인 일치 그룹 패턴의 변형(약한 일치)인 경우, 패키지는 그룹과 연결되지만 그룹의 원본 제어 구성을 적용하는 대신 패키지가 차단되어 패키지의 새 버전을 업스트림에서 가져오거나 게시되는 것을 방지합니다. 이 동작은 이름이 거의 동일한 패키지의 종속성 혼동으로 인한 공급망 공격 위험을 줄입니다.

약한 일치 동작을 설명하기 위해 패키지 그룹 `/npm/*`이 수집을 허용하고 게시를 차단한다고 가정합니다. 보다 구체적인 패키지 그룹인 `/npm//anycompany-spicy-client$`는 수집을 차단하고 게시를 허용하도록 구성됩니다. *anycompany-spicy-client*라는 패키지는 패키지 그룹과 강력하게 일치하므로 패키지 버전을 게시하고 패키지 버전의 수집을 차단할 수 있습니다. 패키지 이름에서 게시가 허용되는 유일한 대소문자 구분은 *anycompany-spicy-client*인데, 이는 패키지 정의 패턴과 강력하게 일치하기 때문입니다. *AnyCompany-spicy-client*와 같은 다른 대소문자 변형은 약한 일치이므로 게시가 차단됩니다. 더 중요한 것은 패키지 그룹이 패턴에 사용되는 소문자 이름뿐만 아니라 모든 대소문자 변형의 수집을 차단하여 종속성 혼동 공격의 위험을 줄이는 것입니다.

## 추가 변형
<a name="package-group-additional-variations"></a>

대소문자 차이 외에도 약한 일치는 대시(`-`), 점(`.`), 밑줄(`_`) 및 혼동할 수 있는 문자(예: 개별 알파벳과 유사한 모양의 문자) 시퀀스의 차이를 무시합니다. 약한 일치에 사용되는 정규화 중에 CodeArtifact는 케이스폴딩(소문자로 변환하는 것과 유사)을 수행하고 대시, 점 및 밑줄 문자 시퀀스를 단일 점으로 바꾸고 혼동할 수 있는 문자를 정규화합니다.

약한 일치는 대시, 점 및 밑줄을 동등한 것으로 취급하지만 완전히 무시하지는 않습니다. 즉, *foo-bar*, *foo.bar*, *foo..bar* 및 *foo\$1bar*는 모두 약한 일치 항목이지만 *foobar*는 그렇지 않습니다. 여러 퍼블릭 리포지토리는 이러한 유형의 변형을 방지하는 단계를 구현하지만 퍼블릭 리포지토리에서 제공하는 보호 기능으로 인해 패키지 그룹의 이 기능이 불필요해지는 것은 아닙니다. 예를 들어 npm Public Registry 레지스트리와 같은 퍼블릭 리포지토리는 *my-package*가 이미 게시된 경우에만 *my-package*라는 패키지의 새로운 변형을 방지합니다. *my-package*가 내부 패키지이고 게시를 허용하고 수집을 차단하는 패키지 그룹 `/npm//my-package$`가 생성된 경우 *my.package*와 같은 변형이 허용되지 않도록 하기 위해 *my-package*를 npm Public Registry에 게시하고 싶지 않을 수 있습니다.

Maven과 같은 일부 패키지 형식은 이러한 문자를 다르게 취급하지만(Maven은 `.`를 네임스페이스 계층 구분자로 취급하지만 `-` 또는 `_`는 아님), *com.act-on*과 같은 형식은 여전히 *com.act.on*과 혼동될 수 있습니다.

**참고**  
패키지 그룹과 여러 변형이 연결될 때마다 관리자는 특정 변형에 대해 새 패키지 그룹을 생성하여 해당 변형에 대해 다른 동작을 구성할 수 있습니다.

# CodeArtifact에서 패키지 그룹에 태그 지정
<a name="package-group-tags"></a>

태그는 AWS 리소스와 연결된 키-값 페어입니다. CodeArtifact에 있는 패키지 그룹에 태그를 적용할 수 있습니다. CodeArtifact 리소스 태그 지정, 사용 사례, 태그 키 및 값 제약 조건, 지원되는 리소스 유형에 대한 자세한 내용은 [리소스에 태그 지정](tag-resources.md) 섹션을 참조하세요.

패키지 그룹을 생성하거나 기존 패키지 그룹의 태그 값을 추가, 제거 또는 업데이트할 때 CLI를 사용하여 태그를 지정할 수 있습니다.

## 패키지 그룹에 태그 지정(CLI)
<a name="package-group-tags-cli"></a>

CLI를 사용하여 패키지 그룹 태그를 관리할 수 있습니다.

아직 구성하지 않았다면 [with AWS CodeArtifact 설정](get-set-up-for-codeartifact.md)에 나오는 단계에 따라 AWS CLI를 구성하세요.

**작은 정보**  
태그를 추가하려면 패키지 그룹의 Amazon 리소스 이름(ARN)을 제공해야 합니다. 패키지 그룹의 ARN을 가져오려면 `describe-package-group` 명령을 실행합니다.  

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

**Topics**
+ [패키지 그룹에 태그 추가(CLI)](#package-group-tags-add-cli)
+ [패키지 그룹의 태그 보기(CLI)](#package-group-tags-list-cli)
+ [패키지 그룹의 태그 편집(CLI)](#package-group-tags-edit-cli)
+ [패키지 그룹에서 태그 제거(CLI)](#package-group-tags-delete-cli)

### 패키지 그룹에 태그 추가(CLI)
<a name="package-group-tags-add-cli"></a>

패키지 그룹이 생성될 때 패키지 그룹에 태그를 추가하거나 기존 패키지 그룹에 태그를 추가할 수 있습니다. 패키지 그룹을 생성할 때 패키지 그룹에 태그를 추가하는 방법에 대한 자세한 내용은 [패키지 그룹 생성](create-package-group.md) 섹션을 참조하세요.

AWS CLI를 사용하여 기존 패키지 그룹에 태그를 추가하려면 터미널이나 명령줄에서 **tag-resource** 명령을 실행하여 태그를 추가할 패키지 그룹의 Amazon 리소스 이름(ARN) 및 추가하려는 태그의 키와 값을 지정합니다. 패키지 그룹 ARN에 대한 자세한 내용은 [패키지 그룹 ARN](auth-and-access-control-permissions-reference.md#package-group-arns) 섹션을 참조하세요.

하나의 패키지 그룹에 둘 이상의 태그를 추가할 수 있습니다. 예를 들어 */npm/scope/anycompany\$1* 패키지 그룹에 2개의 태그, 즉 태그 키가 *key1*이고 태그 값이 *value1*인 태그와 태그 키가 *key2*이고 태그 값이 *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
```

이 명령이 제대로 실행되면 출력이 표시되지 않습니다.

### 패키지 그룹의 태그 보기(CLI)
<a name="package-group-tags-list-cli"></a>

AWS CLI를 사용하여 패키지 그룹에 대한 AWS 태그를 보려면 다음 단계를 수행합니다. 태그가 추가되지 않은 경우 반환되는 목록은 비어 있습니다.

터미널 또는 명령줄에서 패키지 그룹의 Amazon 리소스 이름(ARN)을 사용하여 **list-tags-for-resource** 명령을 실행합니다. 패키지 그룹 ARN에 대한 자세한 내용은 [패키지 그룹 ARN](auth-and-access-control-permissions-reference.md#package-group-arns) 섹션을 참조하세요.

예를 들어 패키지 그룹의 태그 키 및 태그 값 목록을 보려면 ARN 값 `arn:aws:codeartifact:us-west-2:123456789012:package-group/my_domain/npm/scope/anycompany~`로 명명된 */npm/scope/anycompany\$1*를 사용합니다.

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

이 명령이 제대로 실행되면 다음과 비슷한 정보를 반환합니다.

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

### 패키지 그룹의 태그 편집(CLI)
<a name="package-group-tags-edit-cli"></a>

AWS CLI를 사용하여 패키지 그룹의 태그를 편집하려면 다음 단계를 수행합니다. 기존 키의 값을 변경하거나 다른 키를 추가할 수 있습니다. 다음 섹션에서 설명하는 것처럼 패키지 그룹에서 태그를 제거할 수도 있습니다.

터미널이나 명령줄에서 **tag-resource** 명령을 실행하여, 태그를 업데이트하고 태그 키 및 태그 값을 지정할 패키지 그룹의 ARN을 지정합니다. 패키지 그룹 ARN에 대한 자세한 내용은 [패키지 그룹 ARN](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
```

이 명령이 제대로 실행되면 출력이 표시되지 않습니다.

### 패키지 그룹에서 태그 제거(CLI)
<a name="package-group-tags-delete-cli"></a>

AWS CLI를 사용하여 패키지 그룹에서 태그를 제거하려면 다음 단계를 수행합니다.

**참고**  
패키지 그룹을 삭제하면 삭제된 패키지 그룹에서 모든 태그 연결이 제거됩니다. 패키지 그룹을 삭제하기 전에 태그를 제거할 필요는 없습니다.

터미널이나 명령줄에서 **untag-resource** 명령을 실행하여, 태그를 제거할 패키지 그룹의 ARN 및 제거할 태그의 태그 키를 지정합니다. 패키지 그룹 ARN에 대한 자세한 내용은 [패키지 그룹 ARN](auth-and-access-control-permissions-reference.md#package-group-arns) 섹션을 참조하세요.

예를 들어 태그 키 *key1* 및 *key2*로 패키지 그룹 */npm/scope/anycompany\$1*에서 여러 태그를 제거하려면 다음을 수행합니다.

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

이 명령이 제대로 실행되면 출력이 표시되지 않습니다. 태그를 제거한 후에는 `list-tags-for-resource` 명령을 사용하여 패키지 그룹에 남아 있는 태그를 볼 수 있습니다.