Go 인증 설정

Artifact Registry 인증은 패키징된 Go 모듈의 업로드 및 다운로드에 대해 다르게 작동합니다. Go 모듈을 Artifact Registry에 패키징하고 업로드하는 경우 gcloud CLI 도구는 --json_key 플래그가 서비스 계정 키를 사용하기 위해 전달되지 않는 한 환경에서 사용자 인증 정보를 찾아 다음 순서로 인증을 설정합니다.

  1. 애플리케이션 기본 사용자 인증 정보(ADC) - 다음 순서로 사용자 인증 정보를 찾는 전략

    1. GOOGLE_APPLICATION_CREDENTIALS 환경 변수에 정의된 사용자 인증 정보

    2. Compute Engine, Google Kubernetes Engine, Cloud Run, App Engine 또는 Cloud Run 함수의 기본 서비스 계정에서 제공하는 사용자 인증 정보

  2. gcloud auth application-default login 명령어의 사용자 인증 정보를 포함한 Google Cloud CLI에서 제공하는 사용자 인증 정보

GOOGLE_APPLICATION_CREDENTIALS 변수를 사용하면 인증용 계정이 명시적으로 표시되어 문제 해결이 간편해집니다. 이 변수를 사용하지 않는 경우 ADC에서 사용할 수 있는 모든 계정에 필요한 권한이 있는지 확인합니다. 예를 들어 Compute Engine VM, Google Kubernetes Engine 노드, Cloud Run 버전의 기본 서비스 계정은 저장소에 대한 읽기 전용 액세스 권한이 있습니다. 기본 서비스 계정을 사용하여 이러한 환경에서 업로드하려면 권한을 수정해야 합니다.

Artifact Registry에서 종속 항목으로 사용하기 위해 패키징된 Go 모듈을 다운로드할 때 Go 바이너리는 netrc 파일의 사용자 인증 정보를 사용하여 Artifact Registry에 인증합니다. 인증 프로세스를 간소화하려면 Go 사용자 인증 정보 도우미를 사용하여 Artifact Registry 인증을 위해 netrc 파일의 토큰을 새로고침할 수 있습니다.

netrc 파일의 위치는 netrc 환경 변수로 설정할 수 있습니다. NETRC 변수가 설정되지 않은 경우 go 명령어는 UNIX 계열 플랫폼에서 $HOME/.netrc를, Windows에서는 %USERPROFILE%\_netrc를 읽습니다.

Artifact Registry는 netrc 파일에서 사용자 인증 정보를 사용할 때 다음과 같은 인증 방법을 지원합니다.

단기 사용자 인증 정보(권장)
Artifact Registry Go 사용자 인증 정보 도우미 도구를 사용하여 사용자 환경의 사용자 인증 정보를 통해 netrc 파일의 인증 토큰을 업데이트하거나 Artifact Registry 사용자 인증 정보를 netrc 파일에 수동으로 추가합니다.
서비스 계정 키 사용
사용자 환경에서 인증에 사용자 인증 정보를 사용할 수 없는 경우 이 옵션을 사용하세요. Artifact Registry Go 사용자 인증 정보 도우미 도구를 사용하여 암호화되지 않은 서비스 계정 키를 netrc 파일에 추가하거나 수동으로 파일에 추가할 수 있습니다.

시작하기 전에

  1. Go 1.15 이상을 설치합니다.
  2. package-go-module gcloud CLI 부가기능을 설치합니다.

    gcloud components install package-go-module

Go 환경 설정

  1. Artifact Registry에서 모듈, 공개 Go 모듈 프록시, 그리고 소스의 순서대로 다운로드하도록 Go에 지시합니다.

      export GOPROXY=https://LOCATION-go.pkg.dev/PROJECT/REPOSITORY,https://proxy.golang.org,direct
    

    다음을 바꿉니다.

    • LOCATION은 저장소의 리전 또는 멀티 리전 위치입니다.
    • PROJECT는 Google Cloud 프로젝트 ID입니다.
    • REPOSITORY는 패키지가 저장된 저장소의 이름입니다.
  2. 공개 체크섬 데이터베이스를 사용하여 모듈을 검사에서 제외합니다.

      export GONOSUMDB=MODULE_PATH_REGEX
    

    모듈 여러 개를 제외하려면 MODULE_PATH_REGEX를 모듈 경로나 정규 표현식으로 바꿉니다.

    예를 들어 공개 체크섬 데이터베이스를 사용하는 검사에서 example.com/foo 모듈을 제외하려면 다음 명령어를 실행합니다.

      export GONOSUMDB=example.com/foo
    

    다음 명령어는 example.com으로 시작하는 모듈 경로가 있는 모든 모듈을 공개 체크섬 데이터베이스를 사용하는 검사에서 제외합니다.

      export GONOSUMDB=example.com/*
    

netrc 파일에 Artifact Registry 사용자 인증 정보 추가

  1. 다음 명령어를 실행하여 Go 사용자 인증 정보 도우미를 사용해 Artifact Registry 사용자 인증 정보를 netrc 파일에 추가합니다.

      GOPROXY=proxy.golang.org \
          go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 \
          add-locations --locations=LOCATION \
          --json_key=PATH_TO_JSON_KEY
    

    각 항목의 의미는 다음과 같습니다.

    • LOCATION은 저장소의 리전 또는 멀티 리전 위치입니다. 여러 위치를 추가하려면 쉼표로 구분된 목록으로 입력합니다.
    • PATH_TO_JSON_KEY 선택사항입니다. 서비스 계정 키 파일의 경로입니다.

      Go 사용자 인증 정보 도우미는 Artifact Registry 인증을 위해 netrc 파일에 설정을 추가합니다. --json_key 플래그를 전달하면 키는 비밀번호 인증에 사용되는 netrc 파일에 추가됩니다.

  2. Artifact Registry에 인증하는 데 단기 사용자 인증 정보를 사용하는 경우 모듈을 종속 항목으로 사용하기 전에 다음 명령어를 실행하여 OAuth 토큰을 새로고침해야 합니다.

      GOPROXY=proxy.golang.org \
      go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 refresh
    

서비스 계정 키로 인증

사용자 이름과 비밀번호를 사용한 인증이 필요한 경우 이 방법을 사용합니다.

서비스 계정 키는 장기 사용자 인증 정보입니다. 다음 가이드라인을 사용하여 저장소에 대한 액세스를 제한합니다.

  • 저장소와 상호작용할 수 있도록 전용 서비스 계정을 사용하는 것이 좋습니다.
  • 서비스 계정에 필요한 최소한의 Artifact Registry 역할을 부여합니다. 예를 들어 아티팩트만 다운로드하는 서비스 계정에 Artifact Registry 리더를 할당합니다.
  • 조직의 그룹에 특정 저장소에 대한 여러 액세스 수준이 필요한 경우 프로젝트 수준이 아닌 저장소 수준에서 액세스 권한을 부여합니다.
  • 사용자 인증 정보 관리 권장사항을 따릅니다.

인증을 구성하려면 다음 안내를 따르세요.

  1. 애플리케이션 대신 작동하도록 서비스 계정을 만들거나 자동화에 사용할 기존 서비스 계정을 선택합니다.

    Artifact Registry로 인증을 설정하려면 서비스 계정 키 파일의 위치가 필요합니다. 기존 계정의 경우 서비스 계정 페이지에서 키를 보고 새 키를 만들 수 있습니다.

    서비스 계정 페이지로 이동

  2. 저장소 액세스 권한을 부여하기 위해 서비스 계정에 적절한 Artifact Registry 역할을 부여합니다.

  3. 다음 명령어를 실행하여 Go 사용자 인증 정보 도우미를 사용해 netrc 파일에 서비스 계정 사용자 인증 정보를 추가합니다.

      GOPROXY=proxy.golang.org \
          go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 \
          add-locations --locations=LOCATION \
          --json_key=PATH_TO_JSON_KEY
    

    각 항목의 의미는 다음과 같습니다.

    • LOCATION은 저장소의 리전 또는 멀티 리전 위치입니다. 여러 위치를 추가하려면 쉼표로 구분된 목록으로 입력합니다.
    • PATH_TO_JSON_KEY은 서비스 계정 JSON 키 파일의 경로입니다.

      Go 사용자 인증 정보 도우미는 비밀번호 인증을 위해 서비스 계정 키를 netrc 파일에 추가합니다.

다음 형식으로 서비스 계정 키를 netrc 파일에 수동으로 추가할 수도 있습니다.

machine LOCATION.pkg.dev
login _json_key_base64
password KEY

다음을 바꿉니다.

  • LOCATION을 저장소의 리전 또는 멀티 리전 위치로 바꿉니다.
  • KEY를 서비스 계정 키 파일의 base64로 인코딩된 키로 바꿉니다.

GONOPROXY에 Go 사용자 인증 정보 도우미 추가

Go 사용자 인증 정보 도우미를 사용하기 전에 GONOPROXY 목록에 추가하여 Go가 GitHub에서 직접 다운로드하도록 해야 합니다. 소스에서 직접 다운로드하려는 다른 모듈이 있는 경우 다음 예시와 같이 쉼표로 구분된 목록에 추가할 수 있습니다.

  export GONOPROXY=MODULE_PATH1, MODULE_PATH2

여기서 MODULE_PATH1MODULE_PATH2는 소스에서 다운로드할 모듈의 모듈 경로입니다.

Go 사용자 인증 정보 도우미를 GONOPROXY 목록에 추가하고 실행하여 사용자 인증 정보를 설정합니다.

  1. Go 사용자 인증 정보 도우미를 GONOPROXY에 추가

      export GONOPROXY=github.com/GoogleCloudPlatform/artifact-registry-go-tools
    
  2. 다음 명령어를 실행하여 Go 모듈 패키지 도구로 Artifact Registry 사용자 인증 정보를 netrc 파일에 추가합니다.

      GOPROXY=proxy.golang.org \
          go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 \
          add-locations --locations=LOCATION \
          [--json_key=path/to/service/account/key.json]
    

    여기서 LOCATION은 저장소의 리전 또는 멀티 리전 위치입니다. 여러 위치를 추가하려면 쉼표로 구분된 목록으로 입력합니다.

    Go 사용자 인증 정보 도우미는 Artifact Registry 인증을 위해 netrc 파일에 설정을 추가합니다. --json_key 플래그를 전달하면 키는 비밀번호 인증에 사용되는 netrc 파일에 추가됩니다.

다음 단계