액세스 제어 구성

이 페이지에서는 Container Registry에서 사용할 수 있는 액세스 제어 옵션과 Container Registry에서 암호화 키를 사용하는 방법을 설명합니다.

Container Registry는 Cloud Storage 버킷을 컨테이너 이미지 제공용 백엔드로 사용합니다. Cloud Storage 버킷에 대한 권한을 조정하면 Container Registry 이미지에 액세스할 수 있는 사용자를 제어할 수 있습니다.

Cloud Console 또는 gsutil 명령줄 도구를 사용하여 Cloud Storage의 액세스 제어를 관리합니다. 자세한 내용은 gsutil iam 문서를 참조하세요.

권한 및 역할

아래 표에서는 Container Registry 작업에 필요한 권한과 역할을 설명합니다.

전체 Google Cloud 프로젝트가 아닌 개별 스토리지 버킷에 대한 역할을 부여할 경우 기존 스토리지 버킷이 존재하도록 먼저 원하는 호스트 위치의 Container Registry로 이미지를 내보내야 합니다.

작업 권한 역할 역할 이름
내보내기(읽기 및 쓰기)

storage.buckets.create

storage.buckets.delete

storage.buckets.get

storage.buckets.list

storage.buckets.update

storage.objects.create

storage.objects.delete

storage.objects.get

storage.objects.list

storage.objects.update

roles/storage.admin 스토리지 관리자
가져오기(읽기 전용)

storage.objects.get

storage.objects.list

roles/storage.objectViewer 스토리지 객체 뷰어

스토리지 버킷에 동일 버킷 수준 액세스를 사용 설정하는 경우 모든 Container Registry 사용자와 서비스 계정에 위의 역할이 명시적으로 설정되어 있는지 확인합니다. 이 경우 소유자와 편집자 역할만으로 필요한 권한이 부여되지 않을 수 있습니다.

사용자 및 기타 프로젝트에 레지스트리 액세스 권한 부여

특정 사용자나 다른 프로젝트에서 실행 중인 컨테이너 클러스터에 레지스트리에서 이미지를 가져올 권한을 부여하려면 기본 Cloud Storage 버킷에 대한 읽기 권한을 부여해야 합니다.

이미지를 백업하는 버킷은 [BUCKET_NAME] 형식을 취합니다.

  • artifacts.[PROJECT-ID].appspot.com - 호스트 gcr.io의 레지스트리로 내보낸 이미지의 경우
  • 또는 [STORAGE-REGION].artifacts.[PROJECT-ID].appspot.com. 각 항목의 의미는 다음과 같습니다.

    • [PROJECT-ID]는 Google Cloud Console 프로젝트 ID입니다.
    • [STORAGE-REGION]은 저장소 버킷의 위치입니다.
      • us - us.gcr.io 호스트의 레지스트리
      • eu - eu.gcr.io 호스트의 레지스트리
      • asia - asia.gcr.io 호스트의 레지스트리

Google Cloud Console 또는 명령줄을 사용하여 기본 Cloud Storage 버킷에 대한 읽기 권한을 부여할 수 있습니다.

Console

  1. 기본 스토리지 버킷이 존재하도록 이미지를 Container Registry에 내보냈는지 확인합니다.
  2. Cloud Console에서 Cloud Storage 페이지를 방문합니다.
  3. 버킷의 artifacts.[PROJECT-ID].appspot.com 또는 [STORAGE-REGION].artifacts.[PROJECT-ID].appspot.com 링크를 클릭합니다. 여기서 [PROJECT-ID]는 Container Registry를 호스팅하는 프로젝트의 Google Cloud 프로젝트 ID이고 [STORAGE-REGION]은 이미지를 호스팅하는 이미지의 멀티 리전(asia, eu 또는 us)입니다.

  4. 권한 탭을 선택합니다.

  5. 멤버 추가를 클릭합니다.

  6. 표시되는 메뉴 중 멤버 입력란에 읽기 권한이 필요한 사용자의 이메일 주소를 쉼표로 구분해서 입력합니다. 이 이메일 주소는 다음 중 하나일 수 있습니다.

    • Google 계정(예: someone@example.com)
    • Cloud IAM 서비스 계정
    • 다른 프로젝트의 Compute Engine 기본 서비스 계정. 이 계정은 Google Kubernetes Engine이 컨테이너 이미지 클러스터를 가져올 때 기본적으로 사용하는 계정으로, [PROJECT_NUMBER]-compute@developer.gserviceaccount.com 형식입니다. 여기서 [PROJECT-NUMBER]는 Google Kubernetes Engine 클러스터를 실행 중인 프로젝트의 Google Cloud 프로젝트 번호입니다.
  7. 역할 선택 드롭다운 메뉴의 스토리지 카테고리에서 스토리지 객체 뷰어를 선택합니다.

  8. 추가를 클릭합니다.

이 절차는 사용자에게 전체 버킷에 대한 읽기 권한을 부여합니다.

gsutil

  1. 기본 스토리지 버킷이 존재하도록 이미지를 Container Registry에 내보냈는지 확인합니다.
  2. 셸 또는 터미널 창에서 다음 명령어를 실행합니다.

    gsutil iam ch [TYPE]:[EMAIL-ADDRESS]:objectViewer gs://[BUCKET_NAME]
        

    각 매개변수는 다음과 같습니다.

    • [TYPE]은 다음 중 하나일 수 있습니다.
      • [EMAIL-ADDRESS]에 서비스 계정이 지정된 경우 serviceAccount
      • [EMAIL-ADDRESS]가 Google 계정인 경우 user
    • [EMAIL-ADDRESS]는 다음 중 하나일 수 있습니다.
      • Google 계정(예: someone@example.com)
      • Cloud IAM 서비스 계정
      • 다른 프로젝트의 Compute Engine 기본 서비스 계정. 이 계정은 Google Kubernetes Engine이 컨테이너 이미지 클러스터를 가져올 때 기본적으로 사용하는 계정으로, [PROJECT_NUMBER]-compute@developer.gserviceaccount.com 형식입니다. 여기서 [PROJECT-NUMBER]는 Google Kubernetes Engine 클러스터를 실행 중인 프로젝트의 Google Cloud 프로젝트 번호입니다.
    • [BUCKET_NAME]은 위에서 설명한 방식으로 이미지를 호스팅하는 Cloud Storage 버킷의 이름입니다.

gsutil iam ch 명령어는 레지스트리가 호스팅되는 스토리지 버킷의 IAM 권한을 변경합니다. 계정에 objectViewer 권한을 부여하면 해당 계정은 레지스트리에서 이미지를 가져올 수 있습니다.

서비스 계정의 경우 스토리지 액세스 범위도 구성해야 합니다.

  • '읽기 전용' 권한을 설정하려면 다음 명령어를 실행합니다.

    gcloud compute instances set-service-account INSTANCE --scopes=storage-ro
        
  • '읽기-쓰기' 권한을 설정하려면 다음 명령어를 실행합니다.

    gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
        

자세한 내용은 Google Cloud에서 Container Registry 사용을 참조하세요.

공개적으로 이미지 제공

호스트 위치의 기본 스토리지 버킷에 공개적으로 액세스할 수 있다면 Container Registry에도 공개적으로 액세스할 수 있습니다. 프로젝트 내에서 각 호스트 위치에 있는 모든 이미지는 공개 또는 비공개일 수 있습니다. 프로젝트의 호스트 내에서는 특정 이미지만 공개적으로 제공할 수 없습니다. 특정 이미지만 공개하고 싶다면 다음 방법을 이용하세요.

  • 공개로 설정할 별도의 호스트 위치에 이미지를 유지합니다. 또는
  • 공개적으로 액세스할 수 있는 이미지를 저장할 새 프로젝트를 만듭니다.

컨테이너 이미지를 공개적으로 제공하려면, 다음 단계에 따라 저장소의 기본 스토리지 버킷을 공개적으로 액세스할 수 있게 해야 합니다.

Console

  1. 기본 스토리지 버킷이 존재하도록 이미지를 Container Registry에 내보냈는지 확인합니다.

  2. Cloud Console에서 Container Registry 페이지를 엽니다.

    Container Registry 페이지 열기

  3. 왼쪽 패널에서 설정을 클릭합니다.

  4. 공개 액세스설정 페이지에서 공개 상태를 공개 또는 비공개로 전환합니다. 이 설정은 기본 스토리지 버킷에 대한 액세스를 제어합니다.

    호스트 공개 상태가 공개이면 해당 호스트 위치에 있는 Google Cloud 프로젝트의 모든 이미지에 공개적으로 액세스할 수 있습니다.

gsutil

  1. 기본 스토리지 버킷이 존재하도록 이미지를 Container Registry에 내보냈는지 확인합니다.

  2. 해당 레지스트리에 대한 Cloud Storage 버킷의 이름을 찾습니다. 이렇게 하려면 버킷을 나열해야 합니다.

    gsutil ls
        

    Container Registry 버킷 URL은 gs://artifacts.[PROJECT-ID].appspot.com 또는 gs://[STORAGE-REGION].artifacts.[PROJECT-ID].appspot.com으로 표시됩니다. 각 항목의 의미는 다음과 같습니다.

    • [PROJECT-ID]는 Google Cloud Console 프로젝트 ID입니다. 도메인 범위 프로젝트의 경우 도메인 이름이 프로젝트 ID의 일부가 됩니다.
    • [STORAGE-REGION]은 저장소 버킷의 위치입니다.
      • us - us.gcr.io 호스트의 레지스트리
      • eu - eu.gcr.io 호스트의 레지스트리
      • asia - asia.gcr.io 호스트의 레지스트리
  3. 다음 명령어를 실행하여 Container Registry의 스토리지 버킷을 공개 액세스로 전환합니다. 이 명령어는 버킷의 모든 이미지를 공개적으로 액세스할 수 있게 합니다.

    gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME]
        

    각 매개변수는 다음과 같습니다.

    • gs://[BUCKET_NAME]은 Container Registry의 버킷 URL입니다.

공개적으로 액세스할 수 있는 이미지 가져오기

Container Registry가 공개적으로 액세스 가능한 경우 모든 사용자가 이미지를 가져올 수 있습니다. 자세한 내용은 레지스트리에서 이미지 가져오기를 참조하세요.

권한 취소

Console

  1. Cloud Console에서 Cloud Storage 페이지를 방문합니다.
  2. 버킷의 artifacts.[PROJECT-ID].appspot.com 또는 [STORAGE-REGION].artifacts.[PROJECT-ID].appspot.com 링크를 클릭합니다. 여기서 [PROJECT-ID]은 Container Registry를 호스팅하는 프로젝트의 Google Cloud 프로젝트 ID이고 [STORAGE-REGION]은 이미지를 호스팅하는 레지스트리의 멀티 리전(asia, eu 또는 us)입니다.

  3. 권한 탭을 선택합니다.

  4. 삭제할 멤버 옆에 있는 휴지통 아이콘을 클릭합니다.

gsutil

셸 또는 터미널 창에서 다음 명령어를 실행합니다.

gsutil iam ch -d [MEMBER] gs://[BUCKET_NAME]
    

각 매개변수는 다음과 같습니다.

  • [MEMBER]는 다음 중 하나일 수 있습니다.
    • Google 계정의 경우 user:[EMAIL_ADDRESS]
    • Cloud IAM 서비스 계정의 경우 serviceAccount:[EMAIL_ADDRESS]
    • 공개 액세스를 취소하는 경우 allUsers
  • [BUCKET_NAME]은 원하는 버킷의 이름입니다.