컨테이너 레지스트리에 액세스

IBM Cloud® Code Engine에서 사용되는 이미지는 보통 공용(공용 레지스트리)에서 액세스 가능하거나 소형 사용자 그룹(개인용 레지스트리)용으로 액세스가 제한되어 설정되는 레지스트리에 저장됩니다.

컨테이너 레지스트리 또는 레지스트리는 컨테이너 이미지를 저장하는 서비스입니다. 예를 들어, IBM Cloud Container Registry 및 Docker Hub가 컨테이너 레지스트리입니다. 컨테이너 레지스트리는 공용 또는 개인용일 수 있습니다. 공용 컨테이너 레지스트리에 액세스하려면 인증 정보가 필요하지 않습니다. 반대로, 개인용 레지스트리에 액세스하려면 인증 정보가 필요합니다.

Code Engine에서 다음 조치를 완료하려면 컨테이너 레지스트리에 대한 액세스 권한이 필요합니다.

  • 앱 또는 작업을 실행하기 위해 컨테이너 이미지 검색(또는 "가져오기")
  • 새로 작성된 컨테이너 이미지를 이미지 빌드의 출력으로 저장
  • 로컬 소스에서 빌드를 실행할 때 로컬 파일 저장 및 검색

Code Engine은 시스템과 레지스트리 간 상호작용에 대한 많은 기본 세부사항을 처리합니다.

레지스트리에서 이미지를 가져오기 위해 Code Engine은 imagePullSecret이라는 특수 유형의 Kubernetes 시크릿을 사용합니다. 이 이미지 가져오기 시크릿에는 컨테이너 레지스트리에 액세스하는 데 필요한 인증 정보가 저장됩니다. 이미지를 가져오기 위해 Code Engine 로 컨테이너 레지스트리에 액세스 권한을 추가하면 이미지 가져오기 시크릿을 만드는 것입니다. 이미지 풀 시크릿에 대한 자세한 내용은 Kubernetes 문서를 참조하세요.

이미지 레지스트리 유형

일반적으로 이미지는 공용으로 액세스 가능한 레지스트리(공용 레지스트리) 또는 소규모의 사용자 그룹에 대해 제한된 액세스를 제공하는 레지스트리(개인용 레지스트리)에 저장됩니다.

공용 Docker Hub와 같은 공용 레지스트리를 사용하면 Docker 및 Code Engine을 시작하여 첫 번째 애플리케이션 또는 작업을 작성할 수 있습니다. 그러나 엔터프라이즈 워크로드의 경우 IBM Cloud Container Registry에 제공된 것과 같은 개인용 레지스트리를 사용하여 권한이 없는 사용자가 이미지를 사용하지 못하도록 보호하십시오. 비공개 레지스트리의 경우 레지스트리 비밀을 사용하여 비공개 레지스트리에 액세스할 수 있는 자격 증명을 사용할 수 있는지 확인합니다.

공개 및 비공개 이미지 레지스트리 유형
레지스트리 설명
IBM Cloud Container Registry

이러한 유형의 레지스트리를 사용하면 IBM Cloud Container Registry 에서 사용자 간에 이미지를 안전하게 저장하고 공유할 수 있는 자체 보안 이미지 저장소를 설정할 수 있습니다.
IBM Cloud Container Registry 으로

  • 계정의 이미지에 대한 액세스 권한을 관리할 수 있습니다.
  • IBM 제공 이미지 및 샘플 앱(예: IBM Liberty)을 기본 이미지로 사용하고 여기에 나만의 앱 코드를 추가합니다.
기타 개인용 레지스트리

액세스 권한을 추가하여 기존 개인용 레지스트리를 Code Engine에 연결합니다. 액세스 권한을 추가하면 레지스트리 URL과 인증 정보가 Kubernetes 시크릿에 저장됩니다.
비공개 레지스트리를 사용하면 가능합니다:

  • 소스( Docker 허브, 조직 소유의 레지스트리 또는 기타 비공개 클라우드 레지스트리)와 독립적으로 기존 비공개 레지스트리를 사용할 수 있습니다.
공용 Docker Hub

이 유형의 레지스트리를 사용하여 Code Engine 애플리케이션 또는 작업에서 직접 Docker Hub의 기존 공개 이미지를 가져올 수 있습니다.

중요:

  • 이 레지스트리 유형은 액세스 관리, 취약성 검사 또는 앱 개인정보 보호와 같은 조직의 보안 요구사항을 충족하지 못할 수 있습니다.
  • Docker 허브에서 이미지를 가져와 Code Engine 에서 앱 또는 작업에 사용할 경우 무료 요금제(인증되지 않은) 사용자의 Docker 요금 제한에 유의하세요. 끌어오기 속도 제한에 도달했음을 나타내는 429 오류가 표시되는 경우 끌어오기 제한이 발생할 수 있습니다. 요금 한도를 늘리려면 계정을 Docker Pro 또는 Team 구독으로 업그레이드하면 됩니다.

공개 Docker 허브를 사용하면 가능합니다:

  • 앱이나 작업을 만들 때 이러한 이미지를 바로 참조할 수 있으며 추가 설정이 필요하지 않습니다.
  • 다양한 오픈 소스 애플리케이션을 포함합니다.

레지스트리 시크릿의 유형

Code Engine 은 레지스트리의 이미지에 액세스하기 위해 다음 유형의 레지스트리 비밀 중 하나를 사용합니다.

  • Code Engine 관리되는 비밀 - 레지스트리가 계정에 있는 IBM Cloud Container Registry 네임스페이스를 사용하는 경우 Code Engine 에서 레지스트리 비밀을 생성하고 관리하도록 할 수 있습니다. 콘솔에서 자동으로 작성된 이 레지스트리 시크릿을 Code Engine managed secret 라고 합니다. CLI에서 자동으로 생성되는 레지스트리 비밀의 이름은 ce-auto-icr-private-<region> 형식입니다.
  • 사용자 관리 시크릿 - 이 시크릿은 사용자가 작성하고 관리하는 시크릿입니다. API 키를 사용하여 계정의 이미지에 액세스하거나 선택한 컨테이너 레지스트리에 대한 액세스 토큰을 사용할 수 있습니다(예: Docker Hub). 이 경우 콘솔에 나열되는 레지스트리 비밀은 레지스트리 비밀의 이름입니다.

레지스트리가 공개이고 자격 증명이 필요하지 않은 경우(예: icr.io/codeengine 또는 Docker 허브 공개에 있는 Code Engine 샘플 이미지)에는 레지스트리 비밀 번호가 필요하지 않습니다. 이 경우 콘솔에 나열되는 레지스트리 암호는 None 입니다.

이미지 레지스트리의 권한 설정

공용 레지스트리의 경우 이미지를 가져오기 위해 권한을 설정할 필요가 없습니다. Code Engine을 시작하는 동안 공용 레지스트리에서 이미지를 가져오는 것은 허용됩니다. 엔터프라이즈 워크로드의 경우 개인용 레지스트리를 사용하십시오.

어떤 권한이 필요하나요?

필요한 권한을 판별하려면 다음과 같은 경우를 고려하십시오.

  • 앱을 배치하거나 작업을 실행하는 경우 Code Engine에서 사용자 고유 계정의 이미지에 자동으로 액세스할 수 있습니다.

  • 공유 계정, 기타 IBM Cloud 계정 또는 개인용 Docker 계정의 이미지에 액세스할 경우 적절한 액세스 권한이 지정되어야 합니다.

  • 앱을 배포하거나 작업을 실행할 때 레지스트리가 계정에 있는 IBM Cloud Container Registry 네임스페이스를 사용하는 경우 다음 표에 설명된 대로 계정에 필요한 권한이 있는 경우 Code Engine 에서 자동으로 레지스트리 비밀을 만들고 관리하도록 할 수 있습니다.

    • 콘솔에서 이 레지스트리 시크릿을 Code Engine managed secret 라고 합니다. 이 옵션은 Code Engine으로 이미지를 빌드하기 위해 이미지 구성 또는 빌드 세부사항 지정 워크플로우를 사용하는 경우에 사용할 수 있습니다.
    • CLI에서 이 레지스트리 비밀은 ce-auto-icr-private-<region> 형식입니다. 이 레지스트리 시크릿은 --build-source 옵션을 지정하지만 --registry-secret 옵션을 app create, app update, job create 또는 job update 명령과 함께 제공하지 않는 경우 자동으로 작성됩니다.
이미지 레지스트리에 대한 액세스 권한
조치 IAM 서비스 액세스 설명
이미지 가져오기 Reader 서비스 액세스 애플리케이션 또는 작업으로 이미지를 배치하는 경우 레지스트리에서 이미지를 가져와야 합니다. 이미지를 가져오려면 읽기 액세스 권한이 필요합니다. 공용 레지스트리인 경우 이미 이미지에 대한 읽기 액세스 권한이 있습니다. 레지스트리가 비공개인 경우 레지스트리 비밀 번호가 필요합니다.
이미지 푸시 ReaderWriter 서비스 액세스 소스 코드를 빌드하는 경우 이미지를 레지스트리에 푸시해야 합니다. 이미지를 레지스트리에 푸시하려면 읽기 및 쓰기 권한이 있어야 하며 레지스트리 비밀 번호가 있어야 합니다.
네임스페이스 작성 Reader, WriterManager 서비스 액세스 이 조치는 IBM Cloud Container Registry에 대해서만 지원됩니다.
Code Engine에서 자동으로 작성된 레지스트리 시크릿 Administrator 플랫폼 액세스
Reader, WriterManager 서비스 액세스
이 조치는 IBM Cloud Container Registry에 대해서만 지원됩니다.

서비스 ID를 사용할 수 있나요?

예, 서비스 ID를 작성하고 권한을 지정할 수 있습니다. Code Engine에 대한 액세스를 자동으로 작성하면 서비스 ID가 IBM Cloud Container Registry UI에서도 자동으로 작성됩니다. 레지스트리에서 이미지에 액세스할 수 없더라도 이 서비스 ID를 삭제하지 마십시오.

다른 레지스트리에 있는 이미지에 액세스할 수 있나요?

예. 여기를 참조하십시오.

특정 지역 레지스트리 또는 단일 네임스페이스에 대한 풀 액세스를 제한할 수 있나요?

예, 독자 서비스 액세스 역할을 네임스페이스와 같은 레지스트리 리소스 또는 해당 지역 레지스트리로 제한하는 기존 서비스 ID의 IAM 정책을 편집할 수 있습니다. 레지스트리 IAM 정책을 사용자 정의하려면 먼저 IBM Cloud에 대한 IBM Cloud Container Registry IAM 정책을 사용으로 설정해야 합니다.

공용 계정의 이미지에 액세스

이미지가 공용 Docker Hub와 같은 공용 저장소에 저장되는 경우 애플리케이션을 배치하거나 작업을 실행할 때 이미지를 직접 참고만 하면 됩니다. 공용 레지스트리에 이미지를 저장하는 것은 애플리케이션 및 작업을 시작하는 데 좋지만 엔터프라이즈 이미지는 개인용 레지스트리에 저장해야 합니다.

콘솔에서 사용자 고유 계정의 이미지에 액세스

사용자가 소유하거나 관리하는 계정에서 Code Engine에 액세스하는 경우, 콘솔에서 앱, 작업 또는 빌드를 작성하거나 업데이트할 때 Code Engine은 계정의 IBM Cloud Container Registry 네임스페이스에서 이미지를 자동으로 푸시하고 가져올 수 있습니다. 사용자가 이미지를 푸시하면 Code Engine은 네임스페이스를 작성할 수도 있습니다. 자세한 정보는 다음 주제를 참조하십시오.

API 키를 사용하여 계정의 이미지에 액세스

CLI를 사용하여 Code Engine에 액세스하는 경우 먼저 IAM API 키를 작성한 후 Code Engine에 레지스트리 액세스로 IAM API 키를 저장하십시오.

다음 단계에서는 사용자 ID의 인증 정보를 저장하는 API 키를 작성합니다. 사용자 ID를 사용하는 대신, IBM Cloud에 대한 IBM Cloud Container Registry IAM 서비스 액세스 정책이 있는 서비스 ID의 API 키를 작성할 수 있습니다. 사용자 ID 인증을 선택하는 경우 사용자가 기능 ID인지 확인하거나, Code Engine이 레지스트리에 계속 액세스할 수 있도록 사용자가 떠나는 경우에 대한 계획을 세우십시오.

콘솔에서 API 키 작성

콘솔에서 IBM Cloud IAM API 키를 작성하려면 다음을 수행하십시오.

  1. 액세스(IAM) 개요를 실행하십시오.

  2. API 키를 선택하십시오.

  3. IBM Cloud API 키 작성을 클릭하십시오.

  4. API 키에 대한 이름과 선택적 설명을 입력하고 작성을 클릭하십시오.

  5. API 키를 복사하거나 다운로드를 클릭하여 저장하십시오.

    이 API 키는 다시 볼 수 없으므로 안전한 장소에 기록해 둬야 합니다.

이제 API 키를 작성했으므로 레지스트리 액세스로 저장하십시오.

CLI를 사용하여 API 키 작성

CLI로 IBM Cloud IAM API 키를 작성하려면 iam api-key-create 명령을 실행하십시오. 예를 들어 My CLI API key 설명이 포함된 cliapikey 라는 API 키를 생성하고 key_file 라는 파일에 저장하려면 다음 명령을 실행합니다:

ibmcloud iam api-key-create cliapikey -d "My CLI API key" --file key_file

키를 파일에 저장하지 않도록 선택한 경우 키를 작성할 때 표시되는 API 키를 기록해 두어야 합니다. 나중에 검색할 수 없습니다.

이제 API 키를 작성했으므로 레지스트리 액세스로 저장하십시오.

공유 계정의 이미지에 액세스

공유 계정의 IBM Cloud Container Registry에서 이미지에 액세스하려면 적절한 권한이 지정되어 있어야 합니다.

앱을 배치하고 공유 계정에서 작업을 실행하는 경우 애플리케이션을 배치하거나 작업을 작성할 때 Code Engine은 이미지를 가져오거나 푸시할 수 있습니다.

공유 계정에서 사용자 고유 계정으로 이미지를 가져올 경우 IBM Cloud Container Registry 액세스 권한이 부여되어야 합니다.

다른 계정의 이미지에 액세스

IBM Cloud IAM 액세스 정책을 사용자 또는 서비스 ID에 지정하여 권한을 특정 레지스트리 이미지 네임스페이스 또는 조치(예: 푸시 또는 가져오기)로 제한할 수 있습니다. 그런 다음 API 키를 작성하고 이러한 레지스트리 인증 정보를 Code Engine에 저장하십시오.

예를 들어, 다른 IBM Cloud 계정의 이미지에 액세스하려면 해당 계정에 있는 사용자 또는 서비스 ID의 IBM Cloud Container Registry 인증 정보를 저장하는 API 키를 작성하십시오. 그런 다음 Code Engine에서 해당 키를 사용하여 계정에서 액세스를 작성하십시오.

개인용 Docker Hub 계정의 이미지에 액세스

개인용 Docker Hub 계정의 이미지에 액세스하려면 비밀번호 또는 액세스 토큰을 제공하여 레지스트리 액세스를 작성하십시오. 액세스 토큰을 사용하면 비밀번호를 변경하지 않고도 Docker Hub 계정에 대한 액세스 권한을 더 쉽게 부여하고 취소할 수 있습니다. 액세스 토큰 및 Docker 허브에 대한 자세한 내용은 액세스 토큰 만들기 및 관리하기를 참조하세요.

비밀번호를 직접 사용할지 아니면 액세스 토큰을 작성할지 여부를 결정한 후 레지스트리 액세스를 작성하십시오.

Code Engine에 레지스트리 액세스 권한 추가

다른 IBM Cloud Container Registry 계정에서 IBM Cloud에 대한 액세스를 설정하거나 개인용 Docker Hub 계정에서 이미지를 가져오거나 Code Engine CLI를 사용하여 이미지를 가져오거나 푸시하기 위해 IBM API 키 또는 Docker Hub 비밀번호 또는 액세스 토큰을 사용하면 Code Engine을 통해 레지스트리 액세스를 작성하여 인증 키 또는 토큰을 저장할 수 있습니다.

콘솔에서 레지스트리 액세스 권한 추가

시작하기 전에 프로젝트를 작성하십시오.

  1. 프로젝트가 활성 상태가 되면 Code Engine 프로젝트 페이지에서 프로젝트 이름을 클릭합니다.
  2. 컴포넌트 페이지에서 시크릿 및 configmap을 클릭하십시오.
  3. 시크릿 및 configmap 페이지에서 작성을 클릭하여 시크릿을 작성하십시오.
  4. 시크릿 또는 configmap 작성 페이지에서 다음 단계를 완료하십시오.
    1. 레지스트리 시크릿을 선택하고 다음을 클릭하십시오.
    2. 이름을 입력합니다(예: mysecret-registry).
    3. 이 시크릿의 대상 레지스트리를 지정하십시오 (예: IBM Cloud Container Registry 또는 Docker Hub).
    4. 레지스트리의 위치를 지정하십시오.
    5. 사용자 이름을 지정합니다. 이 시크릿이 IBM Cloud Container Registry에 대한 것인 경우 사용자 이름은 iamapikey 입니다. 이 시크릿이 Docker 허브에 대한 것이면 Docker ID입니다.
    6. 사용자 아이디에 대한 자격 증명을 입력합니다. IBM Cloud Container Registry의 경우 IAM API키를 사용하십시오. Docker Hub의 경우 Docker Hub 비밀번호 또는 액세스 토큰을 사용할 수 있습니다. 기타 대상 레지스트리의 경우 사용자 이름에 대한 비밀번호 또는 API키를 지정하십시오.
    7. 작성을 클릭하여 시크릿을 작성하십시오.

이제 콘솔에서 비밀번호가 만들어졌으므로 비밀번호 및 구성 맵 페이지로 이동하여 정의된 비밀번호 및 구성 맵 목록을 확인합니다. 필터를 적용하여 필요에 맞게 목록을 사용자 정의할 수 있습니다.

애플리케이션 또는 작업을 작성하거나 이미지를 빌드할 때 컨테이너 레지스트리에 대한 액세스 권한을 추가할 수 있습니다. 이미지 구성을 클릭하고 이미지가 저장된 레지스트리와 이미지 검색에 사용할 레지스트리 액세스를 포함하여 실행할 컨테이너 이미지를 지정하십시오.

CLI를 사용하여 레지스트리 액세스 권한 추가

CLI 버전 1.42.0 부터는 CLI에서 비밀 번호를 정의하고 작업하는 것이 secret 명령 그룹으로 통합됩니다. ibmcloud ce secret 명령을 참조하십시오. --format 옵션을 사용하여 basic_auth, generic, hmac, ssh, tls 또는 registry 과 같은 비밀 카테고리를 지정합니다. 명령 그룹을 계속 사용할 수 있지만 registry 명령 그룹을 계속 사용할 수 있지만, 통합된 secret 명령 그룹을 활용하세요. 컨테이너 레지스트리에 액세스하기 위한 비밀번호를 만들려면 ibmcloud ce secret create --format registry 명령을 사용합니다. Code Engine 에서 비밀 번호로 작업하는 방법에 대해 자세히 알아보려면 비밀 번호로 작업하기를 참조하세요.

CLI를 사용하여 IBM Cloud Container Registry 또는 Docker 허브 액세스를 추가하려면 secret create --format registry 명령을 사용합니다. 이 명령에는 레지스트리 비밀 이름, 레지스트리 서버의 URL, 레지스트리 서버에 액세스하기 위한 사용자 이름 및 비밀번호 정보가 필요하며 다른 선택적 인수도 사용할 수 있습니다. 전체 옵션 목록을 보려면 ibmcloud ce secret create 명령을 참조하세요.

IBM Cloud Container Registry 예를 들어 다음 명령은 us.icr.io 레지스트리 서버에 있는 myregistry 인스턴스에 대한 레지스트리 액세스를 생성합니다:

ibmcloud ce secret create --format registry --name myregistry --server us.icr.io --username iamapikey --password API_KEY

출력 예

Creating registry secret 'myregistry'...
OK

다음 표에는 이 예제에서 사용된 secret create --format registry 명령과 함께 사용된 옵션을 요약한 표입니다. 명령 및 해당 옵션에 대한 자세한 내용은 ibmcloud ce secret create 명령을 참조하세요.

명령 설명
옵션 설명
--name

레지스트리 본인확인정보의 이름입니다. 프로젝트 내에서 고유한 이름을 사용하십시오. 이 값은 필수입니다.

  • 이름은 소문자 영숫자로 시작하고 끝나야 합니다.
  • 이름은 253자 이하여야 하며 소문자, 숫자, 마침표 및 하이픈(-)을 포함할 수 있습니다.
--server 레지스트리 서버의 URL을 입력하십시오. Container Registry의 경우 서버 이름은 <region>.icr.io입니다. 예를 들어, us.icr.io입니다. Docker Hub의 경우, 값은 https://index.docker.io/v1/입니다.
--username 레지스트리 서버에 액세스하려면 사용자 이름을 입력하십시오. Container Registry의 경우 iamapikey입니다. Docker Hub의 경우 Docker ID입니다.
--password 비밀번호를 입력하십시오. Container Registry의 경우 비밀번호는 API 키입니다. Docker Hub의 경우 Docker Hub 비밀번호 또는 액세스 토큰을 사용할 수 있습니다.

서비스 ID를 사용하여 Container Registry에 대한 액세스 권한 부여

다른 계정에서 서비스 ID에 대한 액세스를 추가하려면 먼저 서비스 ID에 대한 액세스 권한을 부여해야 합니다.

서비스 ID를 작성할 때 하나의 지역 IBM Cloud Container Registry 또는 해당 IBM Cloud Container Registry 계정 내의 특정 네임스페이스로 액세스를 제한할 수 있습니다.

콘솔에서 서비스 ID를 사용하여 Container Registry에 대한 액세스 권한 부여

이미지를 IBM Cloud Container Registry에서 가져오거나 푸시하려면 서비스 ID를 작성하고 서비스 ID에 대한 액세스 정책을 작성한 다음 인증 정보를 저장할 API 키를 작성해야 합니다.

1단계서비스 ID 작성 또는 식별 및 IBM Cloud Container Registry 서비스에 대한 권한 부여

  1. 액세스(IAM) 개요를 실행하십시오.
  2. 서비스 ID를 선택하십시오.
  3. 사용하려는 서비스 ID가 있는 경우에는 해당 ID를 선택하십시오. 없는 경우 작성을 선택하고 이름과 설명을 입력한 후 작성을 클릭하십시오.
  4. 서비스 ID 페이지의 액세스 정책 섹션에서 액세스 지정을 선택하십시오.
  5. 서비스 ID에게 추가 액세스 권한 지정 섹션에서 다음을 수행하십시오.
    1. 액세스 유형에 대한 Container Registry를 선택하십시오. 다음을 클릭하십시오.
    2. 액세스 유형 ( 모든 자원 또는 특정 자원) 을 선택하십시오. 특정 자원을 지정하는 경우, 자원 그룹, 지역, 지역, 자원 유형, 자원 ID 또는 자원 이름을 기반으로 속성을 추가하여 액세스를 추가로 제한할 수 있습니다. 특정 리소스 그룹을 선택하는 경우 리소스 그룹 액세스에 대해 뷰어 액세스 권한을 선택해야 합니다. Next를 클릭하십시오.
    3. 역할 및 조치 섹션에서 부여할 액세스 유형을 선택하십시오. 애플리케이션 및 작업에 대한 이미지만 사용하려는 경우 독자를 선택하십시오. 소스 코드 및 이미지를 Container Registry에 푸시하려면 작성자도 선택하십시오. 검토를 클릭하십시오.
    4. 추가를 클릭한 후 지정을 클릭하십시오.

2단계 Container Registry 감지 사용

Code Engine 콘솔이 컨테이너 레지스트리를 자동으로 발견하도록 허용하려면 IAM Identity Service에 서비스 ID를 인증해야 합니다.

  1. 서비스 ID 페이지의 액세스 정책 섹션에서 액세스 지정을 선택하십시오.
  2. 서비스 ID에게 추가 액세스 권한 지정 섹션에서 다음을 수행하십시오.
    1. 를 선택합니다 IAM Identity Service 을 선택합니다. 다음을 클릭하십시오.
    2. 자원 범위에 대해 특정 자원 을 선택하십시오. 자원 유형 을 속성 유형으로 선택하고 string equals 를 연산자로 유지하고 serviceid 를 값으로 입력하십시오. 조건 추가를 클릭하십시오.
    3. 자원 ID 를 속성 유형으로 선택하고 string equals 를 연산자로 유지한 후 서비스 ID의 ID를 넣으십시오. 서비스 ID는 서비스 ID의 세부정보 페이지 또는 브라우저( URL )에서 서비스 ID를 구성할 때 찾을 수 있습니다. 다음을 클릭하십시오.
    4. 역할 및 조치 섹션에서 플랫폼 운영자 액세스를 선택하십시오. 검토를 클릭합니다
    5. 추가를 클릭한 후 지정을 클릭하십시오.

3단계: 서비스 ID에 대한 API 키 작성

서비스 ID에 대한 API 키를 작성하십시오.

  1. 서비스 ID 페이지에서 API 키를 선택한 후 작성을 선택하십시오.

  2. API 키에 대한 이름과 선택적 설명을 입력하고 작성을 클릭하십시오.

  3. API 키를 복사하거나 다운로드를 클릭하여 저장하십시오.

    이 API 키는 다시 볼 수 없으므로 안전한 장소에 기록해 둬야 합니다.

서비스 ID 및 작성된 API 키에 대한 액세스 정책이 준비되었으므로 Code Engine에 대한 액세스를 추가하여 컨테이너 레지스트리에서 이미지를 가져올 수 있습니다.

CLI를 사용하여 Container Registry에 대한 액세스 권한 부여

이미지를 다른 계정의 IBM Cloud Container Registry에서 가져오려면 서비스 ID를 작성하고 서비스 ID에 대한 액세스 정책을 작성한 다음 인증 정보를 저장할 API 키를 작성해야 합니다.

  1. iam service-id-create 명령을 사용하여 이미지 가져오기 시크릿의 IAM 정책 및 API 키 인증 정보에 사용되는 프로젝트에 대해 IBM Cloud IAM 서비스 ID를 작성하십시오. 나중에 서비스 ID를 검색하는 데 도움이 되는 설명(예: 프로젝트 이름 포함)을 서비스 ID에 제공해야 합니다. iam service-id-create 명령 및 해당 옵션에 대한 전체 목록은 ibmcloud iam service-id-create 명령을 참조하십시오.

    예를 들면, 다음 명령은 codeengine-myproject-id라는 서비스 ID를 Service ID for IBM Cloud Container Registry in Code Engine project myproject라는 설명과 함께 작성합니다.

    ibmcloud iam service-id-create codeengine-myproject-id --description "Service ID for IBM Cloud Container Registry in Code Engine project my proj"
    
  2. iam service-policy-create 명령을 사용하여 IBM Cloud에 대한 액세스 권한을 부여하는 서비스 ID에 대해 사용자 정의 IBM Cloud Container Registry IAM 정책을 작성하십시오. iam service-policy-create 명령 및 해당 옵션에 대한 전체 목록은 ibmcloud iam service-policy-create 명령을 참조하십시오.

    예를 들면, 다음 명령은 codeengine-myproject-id 역할이 있는 Reader 서비스 ID에 대한 정책을 작성합니다.

    ibmcloud iam service-policy-create codeengine-myproject-id --roles Reader --service-name container-registry
    

    다음 표에는 이 예제에서 사용된 iam service-policy-create 명령과 함께 사용된 옵션을 요약한 표입니다. 명령 및 해당 옵션에 대한 자세한 내용은 ibmcloud iam service-policy-create 명령을 참조하세요.

    iAM 서비스-정책-생성 명령 구성 요소
    옵션 설명
    <service_ID> 필수. 앞에서 작성한 codeengine-<project_name>-id 서비스 ID로 대체하십시오.
    --roles <service_access_role> 필수. 서비스 ID의 액세스 범위를 지정할 IBM Cloud Container Registry에 대한 서비스 액세스 역할을 입력하십시오. 가능한 값은 Reader, Writer, Manager입니다. 이미지를 가져오는 경우 Reader 권한으로 충분합니다. 자세한 정보는 이미지 레지스트리의 권한 설정을 참조하십시오.
    --service-name <container-registry> 필수. IBM Cloud Container Registry에 대한 IAM 정책을 작성하려면 container-registry를 입력하십시오.
  3. iam-identity 명령을 사용하여 Code Engine이 서비스 ID에 대한 API 키를 검색할 수 있도록 iam service-policy-create 서비스에 대한 액세스를 허용하는 사용자 정의 서비스 정책을 작성하십시오.

    예를 들면, codeengine-myproject-id 역할이 있는 Operator 서비스 ID에 대한 정책을 작성하십시오.

    ibmcloud iam service-policy-create codeengine-myproject-id --roles Operator --service-name iam-identity
    

    다음 표에는 이 예제에서 사용된 iam service-policy-create 명령과 함께 사용된 옵션을 요약한 표입니다. 명령 및 해당 옵션에 대한 자세한 내용은 ibmcloud iam service-policy-create 명령을 참조하세요.

    iAM 서비스-정책-생성 명령 구성 요소
    옵션 설명
    <service_ID> 필수. 앞에서 작성한 codeengine-<project_name>-id 서비스 ID로 대체하십시오.
    --roles <platform_access_role> 필수. 서비스 ID의 액세스 범위를 지정할 플랫폼 액세스 역할을 입력하십시오. 가능한 값은 Administrator, Editor, OperatorViewer입니다. 서비스 ID에는 Operator 이상이 필요합니다.
    --service-name <iam-identity> 필수. IAM ID 서비스에 대한 IAM 정책을 작성하려면 iam-identity를 입력하십시오.
  4. iam service-api-key-create 명령을 사용하여 서비스 ID에 대한 API키를 작성하십시오. iam service-api-key-create 명령 및 해당 옵션에 대한 전체 목록은 ibmcloud iam service-api-key-create 명령을 참조하십시오. API 키의 이름을 서비스 ID와 유사하게 지정하고 앞에서 작성한 서비스 ID(codeengine-<project_name>-id)를 포함시키십시오. 나중에 키를 검색하는 데 도움이 되는 설명을 API 키에 제공해야 합니다.

    예를 들어 다음 명령은 codeengine-myproject-id 서비스 ID에 대해 API key for service ID codeengine-myproject-id for Code Engine myproject 설명이 포함된 codeengine-myproject-key 이라는 키를 만듭니다:

    ibmcloud iam service-api-key-create codeengine-myproject-key codeengine-myproject-id --description "API key for service ID codeengine-myproject-id for Code Engine myproject"
    

    출력 예

    Please preserve the API key! It cannot be retrieved after it's created.
    
    Name          codeengine-myproject-key
    Description   API key for service ID codeengine-myproject-id for Code Engine myproject
    Bound To      crn:v1:bluemix:public:iam-identity::a/1bb222bb2b33333ddd3d3333ee4ee444::serviceid:ServiceId-ff55555f-5fff-6666-g6g6-777777h7h7hh
    Created At    2019-02-01T19:06+0000
    API Key       i-8i88ii8jjjj9jjj99kkkkkkkkk_k9-llllll11mmm1
    Locked        false
    UUID          ApiKey-222nn2n2-o3o3-3o3o-4p44-oo444o44o4o4
    

    이 API 키는 다시 볼 수 없으므로 안전한 장소에 기록해 둬야 합니다.

    서비스 ID 및 작성된 API 키에 대한 액세스 정책이 준비되었으므로 Code Engine에 대한 액세스를 추가하여 컨테이너 레지스트리에서 이미지를 가져올 수 있습니다.

Code Engine 워크로드의 Container Registry 에 대한 액세스 제어

Code Engine 가 이미지를 가져올 때 IBM Cloud Container Registry 에 대한 액세스를 제어하려 한다고 가정합니다. 예를 들어, 특정 IP 주소에 대한 Container Registry 에 대한 액세스를 제어하려고 합니다. 다음 접근 방식을 고려하십시오.

  • 컨텍스트 기반 제한사항 을 사용하십시오. 컨텍스트 기반 제한사항을 사용하여 Code Engine 프로젝트의 IP 주소가 변경되는 경우 액세스를 변경할 필요가 없습니다. Container Registry 에 대한 액세스를 네트워크 구역으로 제한할 수 있습니다. 여기서 네트워크 구역에는 Code Engine 및 레지스트리에 대한 액세스가 필요한 모든 항목이 포함됩니다.

  • IBM Cloud Container Registry 에 대한 공용 액세스를 사용 안함으로 설정하고 Code Engine 가 공용 엔드포인트 대신 개인용 엔드포인트를 사용하는지 확인하십시오. Container Registry에 대한 연결 보안 을 참조하십시오.

  • 특정 IP 범위별로 액세스를 제어하려면 API 엔드포인트를 사용하여 특정 Code Engine 프로젝트의 IP 주소를 페치하십시오. 이러한 IP 주소는 변경될 수 있으므로 이 경우 적절한 단계를 수행해야 합니다. Code Engine 공용 및 사설 IP 주소내 Code Engine 앱을 허용 목록에 어떻게 추가할 수 있습니까 를 참조하십시오.

레지스트리의 이미지에 대한 고려사항

앱 또는 작업에 사용되는 이미지의 이름은 다음 형식 중 하나여야 합니다.

  • REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY:TAG 여기서 REGISTRYTAG 는 선택사항입니다. REGISTRY를 지정하지 않으면 기본값은 docker.io입니다. TAG 가 지정되지 않은 경우 콜론 (:) 을 포함하지 마십시오. TAG 의 기본값은 latest 입니다.
  • REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY@IMAGEID 여기서 REGISTRY 는 선택사항입니다. REGISTRY 가 지정되지 않은 경우 기본값은 Docker 조직으로서 docker.ioibm 입니다.
이미지 이름 규칙
컴포넌트 허용되는 문자 길이 추가 규칙
REGISTRY a-zA-Z0-9 -_. --__ 1-253 (0-127Periods)(label:1-63,noDashOnEnd)
NAMESPACE a-z 0-9 -_ --__ 4-30 (start/end with letterOrNumber)
DOCKERUSERorDOCKERORG a-z 0-9 4-30
REPOSITORY a-z 0-9 -_. / 2-255 (start/end with letterOrNumber)
TAG a-zA-Z0-9 -_. --__.. 0-128 (NOT start with periodOrDash)
IMAGEID a-z 0-9 : (startwith sha256: noOtherColon)

이미지 이름의 파트는 다음 기준을 충족해야 합니다.

  • REGISTRY 는 253자이하여야 하며 소문자 또는 대문자, 숫자, 마침표 (.), 하이픈 (-) 및 밑줄 (_) 을 포함할 수 있습니다. 마지막 문자로 대시 (.) 를 사용하지 마십시오. 127개이상의 마침표 (.) 를 사용하지 마십시오. 마침표 사이의 레이블 길이는 1-63자입니다.
  • NAMESPACE 는 4-30자사이여야 하며 소문자 또는 숫자로 시작하고 끝나야 합니다. NAMESPACE 에는 소문자 영숫자 문자, 하이픈 (-) 및 밑줄 (_) 이 포함될 수 있습니다.
  • DOCKERUSERorDOCKERORGNAMESPACE 대신 Docker 레지스트리에 사용할 수 있습니다. Docker 사용자 이름 또는 Docker 조직을 지정하십시오. Docker 사용자 이름 및 조직은 4-30자여야 하며 소문자 영숫자 또는 숫자만 포함해야 합니다.
  • REPOSITORY 는 2-255자사이여야 하며 소문자 또는 숫자로 시작하고 끝나야 합니다. REPOSITORY 에는 소문자 영숫자 문자, 슬래시 (/), 마침표 (.), 하이픈 (-) 및 밑줄 (_) 이 포함될 수 있습니다.
  • TAG 는 0-128자사이여야 하며 소문자 또는 대문자, 숫자, 마침표 (.), 하이픈 (-) 및 밑줄 (_) 을 포함할 수 있습니다. TAG 은 마침표나 대시로 시작하지 않아야 합니다. TAG 를 포함하지 않는 경우 콜론도 포함하지 마십시오.
  • IMAGEID 의 접두부는 sha256: 이며 소문자 및 숫자를 포함할 수 있습니다.