다운로드 규칙으로 아티팩트 다운로드 제한

이 페이지에서는 다운로드 규칙을 만들고 관리하여 Artifact Registry 저장소에서 아티팩트 다운로드를 제한하는 방법을 설명합니다.

다운로드 규칙을 사용하면 저장소 및 패키지에서 아티팩트 다운로드를 허용하거나 거부할 수 있습니다. 또한 특정 태그 또는 버전에 규칙이 적용되도록 조건을 설정할 수 있습니다.

다운로드 규칙의 작동 방법에 대한 자세한 내용은 액세스 제어 및 아티팩트 보호 개요의 아티팩트 다운로드 제한 섹션을 참조하세요.

시작하기 전에

  1. 아직 만들지 않았으면 Docker 형식 표준 저장소를 만듭니다.
  2. (선택사항) Google Cloud CLI 명령어의 기본값을 구성합니다.

필요한 역할

다운로드 규칙을 만들고 관리하는 데 필요한 권한을 얻으려면 관리자에게 저장소에 대해 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

다운로드 규칙 만들기

gcloud

아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

  • RULE_NAME: 규칙의 이름입니다. 이름은 저장소 내에서 고유하고, 최대 길이가 256자이고, 영숫자 문자, 퍼센트 인코딩 문자, [-, ., _, ~, :, @, +, ^] 목록에 있는 문자로 구성되어야 합니다.
  • ACTION: 이 규칙과 일치하는 다운로드에 적용된 작업입니다. 일치하는 다운로드를 허용하려면 ALLOW를 선택하고 일치하는 다운로드가 발생하지 않도록 차단하려면 DENY를 선택합니다.
  • PACKAGE: (선택사항) 패키지의 이름입니다. 제공된 경우 전체 저장소 대신 지정된 패키지에만 규칙이 적용됩니다.
  • CONDITION: (선택사항) 일치하는 규칙을 정의하는 CEL 표현식입니다. 제공된 경우 지정된 조건과 일치하는 다운로드에만 규칙을 적용합니다. 예를 들면 pkg.version.id < '3.0'입니다.
  • PROJECT: Google Cloud 프로젝트 ID입니다. 프로젝트 ID에 콜론(:)이 포함되어 있으면 도메인 범위 프로젝트를 참조하세요.
  • LOCATION: 저장소의 리전 또는 멀티 리전 위치입니다.
  • REPOSITORY: 저장소 ID입니다.

다음 명령어를 실행합니다.

Linux, macOS 또는 Cloud Shell

gcloud artifacts rules create RULE_NAME \
    --action=ACTION \
    --project=PROJECT \
    --location=LOCATION \
    --repository=REPOSITORY \
    --package=PACKAGE \
    --condition="CONDITION"

Windows(PowerShell)

gcloud artifacts rules create RULE_NAME `
    --action=ACTION `
    --project=PROJECT `
    --location=LOCATION `
    --repository=REPOSITORY `
    --package=PACKAGE `
    --condition="CONDITION"

Windows(cmd.exe)

gcloud artifacts rules create RULE_NAME ^
    --action=ACTION ^
    --project=PROJECT ^
    --location=LOCATION ^
    --repository=REPOSITORY ^
    --package=PACKAGE ^
    --condition="CONDITION"
다음 출력과 함께 새 규칙이 생성됩니다.
Created rule [RULE_NAME].
자세한 내용은 gcloud artifacts rules create 명령어를 참조하세요.

API

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • RULE_NAME: 규칙의 이름입니다. 이름은 저장소 내에서 고유하고, 최대 길이가 256자이고, 영숫자 문자, 퍼센트 인코딩 문자, [-, ., _, ~, :, @, +, ^] 목록에 있는 문자로 구성되어야 합니다.
  • ACTION: 이 규칙과 일치하는 다운로드에 적용된 작업입니다. 일치하는 다운로드를 허용하려면 ALLOW를 선택하고 일치하는 다운로드가 발생하지 않도록 차단하려면 DENY를 선택합니다.
  • PACKAGE: (선택사항) 패키지의 이름입니다. 제공된 경우 전체 저장소 대신 지정된 패키지에만 규칙이 적용됩니다.
  • CONDITION: (선택사항) 일치하는 규칙을 정의하는 CEL 표현식입니다. 제공된 경우 지정된 조건과 일치하는 다운로드에만 규칙을 적용합니다. 예를 들면 pkg.version.id < '3.0'입니다.
  • PROJECT: Google Cloud 프로젝트 ID입니다. 프로젝트 ID에 콜론(:)이 포함되어 있으면 도메인 범위 프로젝트를 참조하세요.
  • LOCATION: 저장소의 리전 또는 멀티 리전 위치입니다.
  • REPOSITORY: 저장소 ID입니다.

HTTP 메서드 및 URL:

POST https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules?ruleID=RULE_NAME

JSON 요청 본문:

{
  "action":"ACTION",
  "packageId":"PACKAGE",
  "condition":
  {
    "expression":"CONDITION"
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음 출력과 함께 새 규칙이 생성됩니다.
{
  "name": "projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME",
  "action": ACTION,
  "operation": "DOWNLOAD"
}
자세한 내용은 REST 참조를 확인하세요.

다운로드 규칙 나열

gcloud

아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT: Google Cloud 프로젝트 ID입니다. 프로젝트 ID에 콜론(:)이 포함되어 있으면 도메인 범위 프로젝트를 참조하세요.
  • LOCATION: 저장소의 리전 또는 멀티 리전 위치입니다.
  • REPOSITORY: 저장소의 이름입니다.

다음 명령어를 실행합니다.

Linux, macOS 또는 Cloud Shell

gcloud artifacts rules list \
    --project=PROJECT \
    --location=LOCATION \
    --repository=REPOSITORY

Windows(PowerShell)

gcloud artifacts rules list `
    --project=PROJECT `
    --location=LOCATION `
    --repository=REPOSITORY

Windows(cmd.exe)

gcloud artifacts rules list ^
    --project=PROJECT ^
    --location=LOCATION ^
    --repository=REPOSITORY
지정된 프로젝트, 위치, 저장소에 대한 규칙 목록이 다음과 비슷하게 표시됩니다.
RULE: my-rule
PACKAGE: example.com/foo
ACTION: DENY
OPERATION: DOWNLOAD
CONDITION: pkg.version.id < '3.0'
자세한 내용은 gcloud artifacts rules list 명령어를 참조하세요.

API

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT: Google Cloud 프로젝트 ID입니다. 프로젝트 ID에 콜론(:)이 포함되어 있으면 도메인 범위 프로젝트를 참조하세요.
  • LOCATION: 저장소의 리전 또는 멀티 리전 위치입니다.
  • REPOSITORY: 저장소의 이름입니다.

HTTP 메서드 및 URL:

GET https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

지정된 프로젝트, 위치, 저장소에 대한 규칙 목록이 다음과 비슷하게 표시됩니다.
{
  "rules": [
    {
      "name": "projects/my-project/locations/us-central1/repositories/my-repo/rules/my-rule",
      "action": "DENY",
      "operation": "DOWNLOAD",
      "condition": {
        "expression": "pkg.version.id \u003c '3.0'"
      },
      "packageId": "example.com/foo"
    }
  ]
}
자세한 내용은 REST 참조를 확인하세요.

다운로드 규칙 설명

gcloud

아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

  • RULE_NAME: 규칙의 이름입니다. 이름은 저장소 내에서 고유해야 합니다.
  • PROJECT: Google Cloud 프로젝트 ID입니다. 프로젝트 ID에 콜론(:)이 포함되어 있으면 도메인 범위 프로젝트를 참조하세요.
  • LOCATION: 저장소의 리전 또는 멀티 리전 위치입니다.
  • REPOSITORY: 저장소의 이름입니다.

다음 명령어를 실행합니다.

Linux, macOS 또는 Cloud Shell

gcloud artifacts rules describe RULE_NAME \
    --project=PROJECT \
    --location=LOCATION \
    --repository=REPOSITORY

Windows(PowerShell)

gcloud artifacts rules describe RULE_NAME `
    --project=PROJECT `
    --location=LOCATION `
    --repository=REPOSITORY

Windows(cmd.exe)

gcloud artifacts rules describe RULE_NAME ^
    --project=PROJECT ^
    --location=LOCATION ^
    --repository=REPOSITORY
규칙 세부정보는 다음과 비슷하게 표시됩니다.
RULE: my-rule
PACKAGE: example.com/foo
ACTION: DENY
OPERATION: DOWNLOAD
CONDITION: pkg.version.id < '3.0'
자세한 내용은 gcloud artifacts rules describe 명령어를 참조하세요.

API

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • RULE_NAME: 규칙의 이름입니다. 이름은 저장소 내에서 고유해야 합니다.
  • PROJECT: Google Cloud 프로젝트 ID입니다. 프로젝트 ID에 콜론(:)이 포함되어 있으면 도메인 범위 프로젝트를 참조하세요.
  • LOCATION: 저장소의 리전 또는 멀티 리전 위치입니다.
  • REPOSITORY: 저장소의 이름입니다.

HTTP 메서드 및 URL:

GET https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

규칙 세부정보는 다음과 비슷하게 표시됩니다.
{
  "rules": [
    {
      "name": "projects/my-project/locations/us-central1/repositories/my-repo/rules/my-rule",
      "action": "DENY",
      "operation": "DOWNLOAD",
      "condition": {
        "expression": "pkg.version.id \u003c '3.0'"
      },
      "packageId": "example.com/foo"
    }
  ]
}
자세한 내용은 REST 참조를 확인하세요.

다운로드 규칙 업데이트

gcloud

업데이트하지 않을 변수를 삭제합니다.

아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

  • RULE_NAME: 규칙의 이름입니다. 이름은 저장소 내에서 고유해야 합니다.
  • ACTION: 이 규칙과 일치하는 다운로드에 적용된 작업입니다. ALLOWDENY 중에서 선택합니다.
  • PACKAGE: 패키지의 이름입니다. 제공하지 않으면 전체 저장소에 규칙이 적용됩니다.
  • CONDITION: 일치하는 규칙을 정의하는 CEL 표현식입니다. 제공된 경우 지정된 조건과 일치하는 다운로드에만 규칙을 적용합니다. 예를 들면 pkg.version.id < '3.0'입니다.
  • PROJECT: Google Cloud 프로젝트 ID입니다. 프로젝트 ID에 콜론(:)이 포함되어 있으면 도메인 범위 프로젝트를 참조하세요.
  • LOCATION: 저장소의 리전 또는 멀티 리전 위치입니다.
  • REPOSITORY: 저장소의 이름입니다.

다음 명령어를 실행합니다.

Linux, macOS 또는 Cloud Shell

gcloud artifacts rules update RULE_NAME \
    --action=ACTION \
    --project=PROJECT \
    --location=LOCATION \
    --repository=REPOSITORY \
    --package=PACKAGE \
    --condition="CONDITION"

Windows(PowerShell)

gcloud artifacts rules update RULE_NAME `
    --action=ACTION `
    --project=PROJECT `
    --location=LOCATION `
    --repository=REPOSITORY `
    --package=PACKAGE `
    --condition="CONDITION"

Windows(cmd.exe)

gcloud artifacts rules update RULE_NAME ^
    --action=ACTION ^
    --project=PROJECT ^
    --location=LOCATION ^
    --repository=REPOSITORY ^
    --package=PACKAGE ^
    --condition="CONDITION"
업데이트된 규칙 세부정보는 다음과 비슷하게 표시됩니다.
Updated rule [RULE_NAME].
action: ACTION
condition:
  expression: CONDITION
name: projects/PROJECT/locationsLOCATION/repositories/REPOSITORY/rules/RULE_NAME
operation: DOWNLOAD
자세한 내용은 gcloud artifacts rules update 명령어를 참조하세요.

API

업데이트하지 않을 변수를 삭제합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • RULE_NAME: 규칙의 이름입니다. 이름은 저장소 내에서 고유해야 합니다.
  • ACTION: 이 규칙과 일치하는 다운로드에 적용된 작업입니다. ALLOWDENY 중에서 선택합니다.
  • PACKAGE: 패키지의 이름입니다. 제공하지 않으면 전체 저장소에 규칙이 적용됩니다.
  • CONDITION: 일치하는 규칙을 정의하는 CEL 표현식입니다. 제공된 경우 지정된 조건과 일치하는 다운로드에만 규칙을 적용합니다. 예를 들면 pkg.version.id < '3.0'입니다.
  • PROJECT: Google Cloud 프로젝트 ID입니다. 프로젝트 ID에 콜론(:)이 포함되어 있으면 도메인 범위 프로젝트를 참조하세요.
  • LOCATION: 저장소의 리전 또는 멀티 리전 위치입니다.
  • REPOSITORY: 저장소의 이름입니다.

HTTP 메서드 및 URL:

PATCH https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME

JSON 요청 본문:

{
  "action":"ACTION",
  "packageId":"PACKAGE",
  "condition":
  {
    "expression":"CONDITION"
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

업데이트된 규칙 세부정보는 다음과 비슷하게 표시됩니다.
{
  "name": "projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME",
  "action": ACTION,
  "operation": "DOWNLOAD"
}
자세한 내용은 REST 참조를 확인하세요.

다운로드 규칙 삭제

gcloud

아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

  • RULE_NAME: 규칙의 이름입니다. 이름은 저장소 내에서 고유해야 합니다.
  • PROJECT: Google Cloud 프로젝트 ID입니다. 프로젝트 ID에 콜론(:)이 포함되어 있으면 도메인 범위 프로젝트를 참조하세요.
  • LOCATION: 저장소의 리전 또는 멀티 리전 위치입니다.
  • REPOSITORY: 저장소의 이름입니다.

다음 명령어를 실행합니다.

Linux, macOS 또는 Cloud Shell

gcloud artifacts rules describe RULE_NAME \
    --project=PROJECT \
    --location=LOCATION \
    --repository=REPOSITORY

Windows(PowerShell)

gcloud artifacts rules describe RULE_NAME `
    --project=PROJECT `
    --location=LOCATION `
    --repository=REPOSITORY

Windows(cmd.exe)

gcloud artifacts rules describe RULE_NAME ^
    --project=PROJECT ^
    --location=LOCATION ^
    --repository=REPOSITORY
규칙이 삭제되고 다음 출력이 표시됩니다.
You are about to delete rule [RULE_NAME]

Do you want to continue (Y/n)?  Y

Deleted rule [RULE_NAME].
자세한 내용은 gcloud artifacts rules delete 명령어를 참조하세요.

API

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • RULE_NAME: 규칙의 이름입니다. 이름은 저장소 내에서 고유해야 합니다.
  • PROJECT: Google Cloud 프로젝트 ID입니다. 프로젝트 ID에 콜론(:)이 포함되어 있으면 도메인 범위 프로젝트를 참조하세요.
  • LOCATION: 저장소의 리전 또는 멀티 리전 위치입니다.
  • REPOSITORY: 저장소의 이름입니다.

HTTP 메서드 및 URL:

DELETE https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

자세한 내용은 REST 참조를 확인하세요.

CEL을 사용하여 조건 정의

표현식 평가를 위한 오픈소스 언어인 Common Expression Language(CEL)를 사용하여 다운로드 규칙의 조건을 정의할 수 있습니다. Artifact Registry는 다음 속성이 포함된 pkg 객체를 제공합니다.

  • pkg.id: 아티팩트의 패키지 이름을 나타내는 문자열입니다. 저장소 수준에서 규칙 집합과 함께 사용할 수 있습니다.
  • pkg.version.id: 아티팩트 버전을 나타내는 문자열입니다.
  • pkg.version.tag: 아티팩트의 태그를 나타내는 문자열입니다. Docker 저장소만 사용합니다.

CEL에서 논리적 연산자 및 기본 제공되는 함수를 사용할 수 있습니다. 다음은 다운로드 규칙에 유용할 수 있는 CEL 표현식 예시입니다.

  • 저장소 수준에서 설정된 규칙에 유용합니다.

      pkg.id == 'myPackage'  #Artifact package matches 'myPackage'
      pkg.id.startsWith('my') #Artifact package must start with 'my'
    
  • 패키지에 설정된 규칙에 유용합니다.

      pkg.version.id != '1.0.0' #Artifact version is not '1.0.0'
      pkg.version.id > '1.0.1' || pkg.version.id < '0.0.1' #Artifact version is greater than '1.0.1' or less than '0.0.1'
      pkg.version.id.startsWith('1.0.') #Artifact version must start with '1.0.'
      pkg.version.id in ['1.0.0', '1.2.0'] #Artifact version must be a member of the list ['1.0.0', '1.2.0']
      pkg.version.tag == 'tag1' #Artifact tag must be 'tag1'
      pkg.version.tag.startsWith('tag') #Artifact tag must start with 'tag'
      pkg.version.tag in ['tag1', 'tag2'] #Artifact tag must be a member of the list ['tag1', 'tag2']
    

Docker 저장소의 pkg.version.tag == 'latest'와 같이 태그 기반 조건으로 규칙을 추가할 때는 다음에 유의하세요.

  • 다이제스트로 가져올 때 클라이언트는 태그를 제공하지 않습니다. 태그를 사용하는 조건은 빈 태그에 대해 일치하며 예상치 않은 동작을 일으킬 수 있습니다.
  • 멀티 아키텍처 이미지의 경우 태그를 사용하는 조건이 예상한 대로 작동하지 않을 수 있으며 사용하지 않아야 합니다.