

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

# 패키지 원본 제어 편집
<a name="package-origin-controls"></a>

In AWS CodeArtifact에서는 패키지 버전을 리포지토리에 직접 게시하거나, 업스트림 리포지토리에서 가져오거나, 외부 퍼블릭 리포지토리에서 수집하여 패키지 버전을 리포지토리에 추가할 수 있습니다. 직접 게시와 퍼블릭 리포지토리에서 수집하는 방법 모두를 통해 패키지의 패키지 버전을 추가할 수 있기 때문에, 종속성 대체 공격에 취약해집니다. 자세한 내용은 [종속성 대체 공격](dependency-substitution-attacks.md) 단원을 참조하십시오. 종속성 대체 공격을 방어하는 대표적인 방법은 리포지토리의 패키지에서 패키지 원본 제어를 구성하여 패키지 버전을 리포지토리에 추가하는 방법을 제한하는 것입니다.

직접 게시 같은 내부 소스와 퍼블릭 리포지토리 같은 외부 소스 모두에서 서로 다른 패키지의 새 버전을 가져오고 싶은 팀은 패키지 원본 제어 구성을 고려해야 합니다. 기본적으로 패키지 원본 제어는 패키지의 첫 번째 버전이 리포지토리에 추가되는 방식을 기반으로 구성됩니다. 패키지 원본 컨트롤 설정 및 기본값에 대한 자세한 내용은 [패키지 원본 제어 설정](#package-origin-control-settings) 섹션을 참조하세요.

`put-package-origin-configuration` API 작업을 사용한 후 패키지 기록을 제거하려면 `delete-package`를 사용하세요([패키지 또는 패키지 버전 삭제](delete-package.md) 참조).

## 일반적인 패키지 액세스 제어 시나리오
<a name="package-origin-control-scenarios"></a>

이 섹션에는 CodeArtifact 리포지토리에 패키지 버전이 추가되는 일반적인 시나리오가 포함되어 있습니다. 새 패키지에 대한 패키지 원본 제어 설정은 첫 번째 패키지 버전이 추가되는 방식에 따라 설정됩니다.

다음 시나리오에서 *내부 패키지*는 패키지 관리자가 리포지토리에 직접 게시하는 패키지(예: 사용자 또는 사용자 팀이 작성하고 유지 관리하는 패키지)입니다. *외부 패키지*는 외부 연결을 통해 리포지토리에 수집될 수 있는 퍼블릭 리포지토리에 있는 패키지입니다.

**외부 패키지 버전은 기존 내부 패키지를 대상으로 게시됩니다.**

이 시나리오에서는 내부 패키지인 *packageA*를 가정합니다. 팀은 *packageA*의 첫 번째 패키지 버전을 CodeArtifact 리포지토리에 게시합니다. 이 패키지의 첫 번째 패키지 버전이므로, 패키지 원본 제어 설정은 **게시: 허용** 및 **업스트림: 차단**으로 자동 설정됩니다. 패키지가 리포지토리에 존재하면, CodeArtifact 리포지토리에 연결된 퍼블릭 리포지토리에 같은 이름의 패키지가 게시됩니다. 이것은 내부 패키지에 대한 종속성 대체 공격 시도일 수도 있고 단순한 우연의 일치일 수도 있습니다. 하지만 패키지 원본 제어는 새로운 외부 버전의 수집을 차단하여 잠재적 공격을 방어하도록 구성되어 있습니다.

다음 이미지에서 *repoA*는 퍼블릭 리포지토리에 대한 외부 연결이 있는 CodeArtifact 리포지토리입니다. 리포지토리에 *packageA* 버전 1.1 및 2.1이 있지만 버전 3.0은 퍼블릭 리포지토리에 게시됩니다. 일반적으로 *repoA*는 패키지 관리자가 패키지를 요청한 후 버전 3.0을 수집합니다. 패키지 수집이 **차단**으로 설정되어 있기 때문에 버전 3.0은 CodeArtifact 리포지토리에 수집되지 않으며 이 리포지토리에 연결된 패키지 관리자가 사용할 수 없습니다.

![\[퍼블릭 리포지토리에서 차단된 새 외부 패키지 버전을 보여주는 간단한 그래픽입니다.\]](http://docs.aws.amazon.com/ko_kr/codeartifact/latest/ug/images/package-origin-controls-one.png)


**내부 패키지 버전은 기존 외부 패키지를 대상으로 게시됩니다.**

이 시나리오에서는 패키지인 *packageB*가 리포지토리에 연결된 퍼블릭 리포지토리의 외부에 존재합니다. 리포지토리에 연결된 패키지 관리자가 *packageB*를 요청하면 해당 패키지 버전이 퍼블릭 리포지토리에서 사용자의 리포지토리로 수집됩니다. 이것은 리포지토리에 추가된 *packageB*의 첫 번째 패키지 버전이므로, 패키지 원본 설정은 **게시: 차단** 및 **업스트림: 허용**으로 구성됩니다. 나중에 패키지 이름이 동일한 버전을 리포지토리에 게시합니다. 퍼블릭 패키지를 모르는 상태에서 관련 없는 패키지를 같은 이름으로 게시하려고 하거나, 패치가 적용된 버전을 게시하려고 하거나, 이미 외부에 있는 패키지 버전을 직접 게시하게 됩니다. CodeArtifact는 사용자가 게시하려는 버전을 거부하지만, 사용자가 거부를 명시적으로 무시하고 필요한 경우에만 버전을 게시할 수 있습니다.

다음 이미지에서 *repoA*는 퍼블릭 리포지토리에 대한 외부 연결이 있는 CodeArtifact 리포지토리입니다. 리포지토리에는 퍼블릭 리포지토리에서 수집된 버전 3.0이 포함되어 있습니다. 버전 1.1을 리포지토리에 게시하려 합니다. 일반적으로 버전 1.2를 *repoA*에 게시할 수 있지만 게시가 **차단**으로 설정되어 있기 때문에 버전 1.2는 게시할 수 없습니다.

![\[퍼블릭 리포지토리에서 차단된 새 외부 패키지 버전을 보여주는 간단한 그래픽입니다.\]](http://docs.aws.amazon.com/ko_kr/codeartifact/latest/ug/images/package-origin-controls-two.png)


**기존 외부 패키지의 패치가 적용된 패키지 버전 게시**

이 시나리오에서는 패키지인 *packageB*가 리포지토리에 연결된 퍼블릭 리포지토리의 외부에 존재합니다. 리포지토리에 연결된 패키지 관리자가 *packageB*를 요청하면 해당 패키지 버전이 퍼블릭 리포지토리에서 사용자의 리포지토리로 수집됩니다. 이것은 사용자의 리포지토리에 추가된 *packageB*의 첫 번째 패키지 버전이므로, 패키지 원본 설정은 **게시: 차단** 및 **업스트림: 허용**으로 구성됩니다. 팀에서 이 패키지의 패치가 적용된 패키지 버전을 리포지토리에 게시하기로 합니다. 패키지 버전을 직접 게시하기 위해 팀은 패키지 원본 제어 설정을 **게시: 허용** 및 **업스트림: 차단**으로 변경합니다. 이제 이 패키지의 버전을 리포지토리에 직접 게시하고 퍼블릭 리포지토리에서 수집할 수 있습니다. 팀에서 패치된 패키지 버전을 게시하면 패키지 원본 설정을 **게시: 차단** 및 **업스트림: 허용**으로 되돌립니다.

## 패키지 원본 제어 설정
<a name="package-origin-control-settings"></a>

패키지 원본 제어를 사용하여 패키지 버전을 리포지토리에 추가하는 방법을 구성할 수 있습니다. 다음 목록에는 사용 가능한 패키지 원본 제어 설정 및 값이 포함되어 있습니다.

**참고**  
패키지 그룹에서 원본 제어를 구성할 때는 사용 가능한 설정과 값이 다릅니다. 자세한 내용은 [패키지 그룹 원본 제어](package-group-origin-controls.md) 단원을 참조하십시오.

**게시**

이 설정은 패키지 관리자 또는 이와 유사한 도구를 사용하여 패키지 버전을 리포지토리에 직접 게시할 수 있는지를 구성합니다.
+ **허용**: 패키지 버전을 직접 게시할 수 있습니다.
+ **차단**: 패키지 버전을 직접 게시할 수 없습니다.

**업스트림**

이 설정은 패키지 관리자가 요청하는 경우 패키지 버전을 외부 또는 퍼블릭 리포지토리에서 수집하거나 업스트림 리포지토리에서 유지할 수 있는지를 구성합니다.
+ **허용**: 모든 패키지 버전은 업스트림 리포지토리로 구성된 다른 CodeArtifact 리포지토리에서 유지하거나 외부 연결을 통해 공개 소스에서 수집할 수 있습니다.
+ **차단**: 패키지 버전은 업스트림 리포지토리로 구성된 다른 CodeArtifact 리포지토리에서 유지하거나 외부 연결을 통해 공개 소스에서 수집할 수 없습니다.

## 기본 패키지 원본 제어 설정
<a name="default-package-origin-control-settings"></a>

기본 패키지 원본 제어 설정은 패키지의 연결된 패키지 그룹 원본 제어 설정을 기반으로 구성됩니다. 패키지 그룹 및 패키지 그룹 원본 제어에 대한 자세한 내용은 [CodeArtifact에서의 패키지 그룹 작업](package-groups.md) 및 [패키지 그룹 원본 제어](package-group-origin-controls.md) 섹션을 참조하세요.

패키지가 모든 제한 유형에 대해 제한 설정이 `ALLOW`인 패키지 그룹과 연결된 경우 패키지에 대한 기본 패키지 원본 제어는 해당 패키지의 첫 번째 버전이 리포지토리에 추가되는 방법을 기반으로 합니다.
+ 패키지 관리자가 첫 번째 패키지 버전을 직접 게시하는 경우 설정은 **게시: 허용** 및 **업스트림: 차단**이 됩니다.
+ 첫 번째 패키지 버전을 공개 소스에서 수집하는 경우 설정은 **게시: 차단** 및 **업스트림: 허용**이 됩니다.

**참고**  
2022년 5월 이전에 CodeArtifact 리포지토리에 존재했던 패키지는 기본 패키지 원본 제어가 **게시: 허용** 및 **업스트림: 허용**으로 설정됩니다. 이러한 패키지에서는 패키지 원본 제어를 수동으로 설정해야 합니다. 현재 기본값은 2022년 5월 이후로 새 패키지에 설정되었고, 2022년 7월 14일 기능이 출시되면서 실행되기 시작했습니다. 패키지 원본 제어 설정에 대한 자세한 내용은 [패키지 원본 제어 편집](#edit-package-origin-controls) 섹션을 참조하세요.

그렇지 않으면 패키지가 `BLOCK` 또는 `ALLOW_SPECIFIC_REPOSITORIES`의 제한 설정이 하나 이상 있는 패키지 그룹과 연결된 경우 해당 패키지의 기본 원본 제어 설정이 **게시: 허용** 및 **업스트림: 허용**으로 설정됩니다.

## 패키지 원본 제어가 패키지 그룹 원본 제어와 상호 작용하는 방법
<a name="package-origin-controls-interaction-package-groups"></a>

패키지에 원본 제어 설정이 있고 연결된 패키지 그룹에도 원본 제어 설정이 있으므로 이러한 서로 다른 두 설정이 서로 어떻게 상호 작용하는지 이해하는 것이 중요합니다.

두 설정 간의 상호 작용은 `BLOCK`의 설정이 항상 `ALLOW`의 설정보다 우선한다는 것입니다. 다음 표에는 몇 가지 예제 구성과 해당 유효 원본 제어 설정이 나와 있습니다.


| 패키지 원본 제어 설정 | 패키지 그룹 원본 제어 설정 | 유효 원본 제어 설정 | 
| --- | --- | --- | 
| 게시: 허용업스트림: 허용 | 게시: 허용업스트림: 허용 | 게시: 허용업스트림: 허용 | 
| 게시: 차단업스트림: 허용 | 게시: 허용업스트림: 허용 | 게시: 차단업스트림: 허용 | 
| 게시: 허용업스트림: 허용 | 게시: 허용업스트림: 차단 | 게시: 허용업스트림: 차단 | 

즉, 원본 설정이 **게시: 허용** 및 **업스트림: 허용**인 패키지는 사실상 연결된 패키지 그룹의 원본 제어 설정을 따르고 있음을 의미합니다.

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

패키지 원본 제어는 패키지 첫 번째 패키지 버전이 리포지토리에 추가되는 방식에 따라 자동으로 구성됩니다. 자세한 내용은 [기본 패키지 원본 제어 설정](#default-package-origin-control-settings) 섹션을 참조하세요. CodeArtifact 리포지토리에서 패키지의 패키지 원본 제어를 추가하거나 편집하려면 다음 절차의 단계를 수행하세요.

**패키지 원본 제어 추가 또는 편집(콘솔)**

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

1. 탐색 창에서 **리포지토리**를 선택한 다음 수정할 패키지가 포함된 리포지토리를 선택합니다.

1. **패키지** 테이블에서 편집할 패키지를 검색하여 선택합니다.

1. 패키지 요약 페이지의 **원본 제어**에서 **편집**을 선택합니다.

1. **원본 제어 편집**에서 이 패키지에 설정할 패키지 원본 제어를 선택합니다. 패키지 원본 제어 설정인 게시와 업스트림을 동시에 설정해야 합니다.
   + 패키지 버전을 직접 게시할 수 있도록 허용하려면 **게시**에서 **허용**을 선택합니다. 패키지 버전 게시를 차단하려면 **차단**을 선택합니다.
   + 외부 리포지토리에서 패키지를 수집하고 업스트림 리포지토리에서 패키지를 가져오도록 허용하려면 **업스트림 소스**에서 **허용**을 선택합니다. 외부 및 업스트림 리포지토리에서의 패키지 버전 수집과 가져오기를 모두 차단하려면 **차단**을 선택합니다.

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

1. 그렇지 않은 경우의 단계에 AWS CLI 따라를 구성합니다[with AWS CodeArtifact 설정](get-set-up-for-codeartifact.md).

1. `put-package-origin-configuration` 명령을 사용하여 패키지 원본 제어를 추가하거나 편집합니다. 다음 필드를 교체합니다.
   + *my\$1domain*을 업데이트할 패키지가 들어 있는 CodeArtifact 도메인으로 바꿉니다.
   + *my\$1repo*를 업데이트할 패키지가 들어 있는 CodeArtifact 리포지토리로 바꿉니다.
   + *npm*을 업데이트할 패키지의 패키지 형식으로 바꿉니다.
   + *my\$1package*를 업데이트할 패키지의 이름으로 바꿉니다.
   + *허용* 및 *차단*을 원하는 패키지 원본 제어 설정으로 바꿉니다.

   ```
   aws codeartifact put-package-origin-configuration --domain my_domain \
   --repository my_repo --format npm --package my_package \ 
   --restrictions publish=ALLOW,upstream=BLOCK
   ```

## 리포지토리 게시 및 업스트림
<a name="package-publishing-upstreams"></a>

CodeArtifact에서는 연결 가능한 업스트림 리포지토리 또는 퍼블릭 리포지토리에 있는 패키지 버전을 게시할 수 없습니다. 예를 들어 Maven 패키지 `com.mycompany.mypackage:1.0`을 리포지토리 `myrepo`에 게시하려고 하는데 `myrepo`에 Maven Central과의 외부 연결이 있는 업스트림 리포지토리가 있다고 가정해 보겠습니다. 다음 시나리오를 고려해 보세요.

1. `com.mycompany.mypackage`에서의 패키지 원본 제어 설정은 **게시: 허용**과 **업스트림: 허용**입니다. `com.mycompany.mypackage:1.0`이 업스트림 리포지토리 또는 Maven Central에 있다면, CodeArtifact는 `myrepo`에서 이에 게시하려는 모든 시도를 거부하며 409 충돌 오류가 발생합니다. `com.mycompany.mypackage:1.1` 같은 다른 버전은 게시할 수 있습니다.

1. `com.mycompany.mypackage`에서의 패키지 원본 제어 설정은 **게시: 허용**과 **업스트림: 차단**입니다. `com.mycompany.mypackage`의 모든 버전은 아직 존재하지 않는 리포지토리에 게시할 수 있습니다. 패키지 버전에 연결할 수 없기 때문입니다.

1. `com.mycompany.mypackage`에서의 패키지 원본 제어 설정은 **게시: 차단**과 **업스트림: 하용**입니다. 패키지 버전은 리포지토리에 직접 게시할 수 없습니다.