패키지 원본 제어 편집 - CodeArtifact

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

패키지 원본 제어 편집

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

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

put-package-origin-configuration API 작업을 사용한 후 패키지 레코드를 제거하려면 delete-package ( 참조)를 사용합니다패키지 또는 패키지 버전 삭제.

일반적인 패키지 액세스 제어 시나리오

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

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

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

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

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

퍼블릭 리포지토리에서 차단된 새 외부 패키지 버전을 보여주는 간단한 그래픽입니다.

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

이 시나리오에서는 패키지인 packageB가 리포지토리에 연결된 퍼블릭 리포지토리의 외부에 존재합니다. 리포지토리에 연결된 패키지 관리자가 packageB를 요청하면 해당 패키지 버전이 퍼블릭 리포지토리에서 사용자의 리포지토리로 수집됩니다. 리포지토리에 추가된 packageB의 첫 번째 패키지 버전이므로 패키지 오리진 설정은 게시: BLOCK업스트림: ALLOW로 구성됩니다. 나중에 패키지 이름이 동일한 버전을 리포지토리에 게시합니다. 퍼블릭 패키지를 알지 못하여 관련 없는 패키지를 동일한 이름으로 게시하려고 하거나 패치된 버전을 게시하려고 하거나 외부에 이미 존재하는 정확한 패키지 버전을 직접 게시하려고 합니다. CodeArtifact 는 게시하려는 버전을 거부하지만 필요한 경우 거부를 명시적으로 재정의하고 버전을 게시하도록 허용합니다.

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

퍼블릭 리포지토리에서 차단된 새 외부 패키지 버전을 보여주는 간단한 그래픽입니다.

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

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

패키지 원본 제어 설정

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

참고

패키지 그룹에서 오리진 제어를 구성할 때는 사용 가능한 설정과 값이 다릅니다. 자세한 내용은 패키지 그룹 오리진 제어 단원을 참조하십시오.

게시

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

  • ALLOW: 패키지 버전을 직접 게시할 수 있습니다.

  • BLOCK: 패키지 버전은 직접 게시할 수 없습니다.

업스트림

이 설정은 패키지 관리자가 요청하는 경우 패키지 버전을 외부 또는 퍼블릭 리포지토리에서 수집하거나 업스트림 리포지토리에서 유지할 수 있는지를 구성합니다.

  • ALLOW: 모든 패키지 버전은 업스트림 리 CodeArtifact 포지토리로 구성된 다른 리포지토리에서 유지하거나 외부 연결이 있는 퍼블릭 소스에서 수집할 수 있습니다.

  • BLOCK: 패키지 버전은 업스트림 CodeArtifact 리포지토리로 구성된 다른 리포지토리에서 유지하거나 외부 연결이 있는 퍼블릭 소스에서 수집할 수 없습니다.

기본 패키지 원본 제어 설정

기본 패키지 오리진 제어 설정은 패키지의 연결된 패키지 그룹의 오리진 제어 설정을 기반으로 구성됩니다. 패키지 그룹 및 패키지 그룹 오리진 제어에 대한 자세한 내용은 에서 패키지 그룹 작업 CodeArtifact 및 섹션을 참조하세요패키지 그룹 오리진 제어.

패키지가 모든 제한 유형에 ALLOW 대해 제한 설정이 인 패키지 그룹과 연결된 경우 패키지에 대한 기본 패키지 오리진 제어는 해당 패키지의 첫 번째 버전이 리포지토리에 추가되는 방법을 기반으로 합니다.

  • 패키지 관리자가 첫 번째 패키지 버전을 정확하게 게시하는 경우 설정은 게시: ALLOW업스트림: BLOCK가 됩니다.

  • 첫 번째 패키지 버전이 퍼블릭 소스에서 수집되는 경우 설정은 게시: BLOCK업스트림: ALLOW가 됩니다.

참고

2022년 5월경 이전에 CodeArtifact 리포지토리에 있던 패키지는 Publish: ALLOWUpstream: ALLOW의 기본 패키지 오리진 제어를 갖습니다. 이러한 패키지에서는 패키지 원본 제어를 수동으로 설정해야 합니다. 현재 기본값은 2022년 5월 이후로 새 패키지에 설정되었고, 2022년 7월 14일 기능이 출시되면서 실행되기 시작했습니다. 패키지 원본 제어 설정에 대한 자세한 내용은 패키지 원본 제어 편집 섹션을 참조하세요.

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

패키지 오리진 컨트롤이 패키지 그룹 오리진 컨트롤과 상호 작용하는 방법

패키지에는 오리진 제어 설정이 있고 연결된 패키지 그룹에는 오리진 제어 설정이 있기 때문에 이러한 두 가지 설정이 서로 어떻게 상호 작용하는지 이해하는 것이 중요합니다.

두 설정 간의 상호 작용은 의 설정이 BLOCK 항상 의 설정보다 성공한다는 것입니다ALLOW. 다음 표에는 일부 예제 구성과 해당 유효 오리진 제어 설정이 나열되어 있습니다.

패키지 오리진 제어 설정 패키지 그룹 오리진 제어 설정 유효 오리진 제어 설정

PUBLISH: ALLOW

UPSTREAM: ALLOW

PUBLISH: ALLOW

UPSTREAM: ALLOW

PUBLISH: ALLOW

UPSTREAM: ALLOW

PUBLISH: BLOCK

UPSTREAM: ALLOW

PUBLISH: ALLOW

UPSTREAM: ALLOW

PUBLISH: BLOCK

UPSTREAM: ALLOW

PUBLISH: ALLOW

UPSTREAM: ALLOW

PUBLISH: ALLOW

UPSTREAM: BLOCK

PUBLISH: ALLOW

UPSTREAM: BLOCK

즉, 오리진 설정이 게시: ALLOW업스트림:인 ALLOW패키지는 연결된 패키지 그룹의 오리진 제어 설정으로 효과적으로 지연됩니다.

패키지 원본 제어 편집

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

패키지 원본 제어 추가 또는 편집(콘솔)
  1. https://console.aws.amazon.com/codesuite/codeartifact/home 에서 AWS CodeArtifact 콘솔을 엽니다.

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

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

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

  5. 원본 제어 편집에서 이 패키지에 설정할 패키지 원본 제어를 선택합니다. 패키지 원본 제어 설정인 게시와 업스트림을 동시에 설정해야 합니다.

    • 패키지 버전을 직접 게시할 수 있도록 허용하려면 게시에서 허용을 선택합니다. 패키지 버전 게시를 차단하려면 차단을 선택합니다.

    • 외부 리포지토리에서 패키지를 수집하고 업스트림 리포지토리에서 패키지를 가져오도록 허용하려면 업스트림 소스에서 허용을 선택합니다. 외부 및 업스트림 리포지토리에서의 패키지 버전 수집과 가져오기를 모두 차단하려면 차단을 선택합니다.

패키지 원본 제어 추가 또는 편집(AWS CLI)
  1. 그렇지 않은 경우 의 단계에 AWS CLI 따라 를 구성합니다로 설정 AWS CodeArtifact.

  2. put-package-origin-configuration 명령을 사용하여 패키지 원본 제어를 추가하거나 편집합니다. 다음 필드를 교체합니다.

    • Replace my_domain 업데이트하려는 패키지가 포함된 CodeArtifact 도메인이 있는 .

    • Replace my_repo 업데이트하려는 패키지가 포함된 CodeArtifact 리포지토리를 사용합니다.

    • Replace npm 업데이트하려는 패키지의 패키지 형식을 사용합니다.

    • Replace my_package 업데이트하려는 패키지의 이름이 표시됩니다.

    • Replace ALLOW 그리고 BLOCK 원하는 패키지 오리진 제어 설정과 함께.

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

리포지토리 게시 및 업스트림

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

  1. 의 패키지 오리진 제어 설정은 게시: ALLOW업스트림: ALLOWcom.mycompany.mypackage입니다. com.mycompany.mypackage:1.0 가 업스트림 리포지토리 또는 Maven Central에 있는 경우 는 409 충돌 오류myrepo와 함께 에 게시하려는 모든 시도를 CodeArtifact 거부합니다. com.mycompany.mypackage:1.1 같은 다른 버전은 게시할 수 있습니다.

  2. 의 패키지 오리진 제어 설정은 게시: ALLOW업스트림: BLOCKcom.mycompany.mypackage입니다. com.mycompany.mypackage의 모든 버전은 아직 존재하지 않는 리포지토리에 게시할 수 있습니다. 패키지 버전에 연결할 수 없기 때문입니다.

  3. 의 패키지 오리진 제어 설정은 게시: BLOCK업스트림: ALLOWcom.mycompany.mypackage입니다. 패키지 버전은 리포지토리에 직접 게시할 수 없습니다.