이 페이지에서는 Google Cloud 콘솔을 사용하여 Binary Authorization의 커스텀 증명자를 만드는 방법을 설명합니다. 또는 Google Cloud CLI 또는 REST API를 사용하여 이 단계를 수행할 수 있습니다. 이 태스크는 Binary Authorization 설정의 일부입니다.
Cloud Build 사용자: 대신 built-by-cloud-build
증명자를 사용하여 Cloud Build에서 빌드한 이미지만 배포할 수 있습니다.
시작하기 전에
증명자를 만들기 전에 다음을 수행합니다.
개요
증명자는 Binary Authorization에서 증명을 확인하는 데 사용하는 Google Cloud 리소스입니다. Binary Authorization에 대한 자세한 내용은 Binary Authorization 개요를 참조하세요.
증명자를 만들려면 다음 안내를 따르세요.
- 먼저 이미지에 서명하여 증명을 생성하고 나중에 이미지가 배포될 때 이미지를 확인하는 데 사용할 수 있는 키 쌍을 설정합니다. PKIX 키 쌍은 Cloud Key Management Service(Cloud KMS)에서 PKIX와 호환되는 형식으로 생성된 키 쌍입니다.
- Binary Authorization에서 증명자를 만들고 생성한 공개 키와 연결합니다.
단일 프로젝트 설정 시 Binary Authorization 정책을 구성한 것과 동일한 프로젝트에 증명자를 만듭니다. 다중 프로젝트 설정에는 정책이 구성된 배포자 프로젝트와 증명자가 저장된 증명자 프로젝트가 있을 가능성이 높습니다.
암호화 키 설정
Binary Authorization을 사용하면 PKIX 키를 사용하여 이미지에 안전하게 서명한 후 나중에 확인할 수 있습니다. 이렇게 하면 확인된 당사자만 컨테이너 이미지를 승인할 수 있습니다.
이 가이드에서는 PKIX 키 쌍을 생성하는 데 타원 곡선 디지털 서명 알고리즘(ECDSA) 사용이 권장됩니다. 서명에 RSA 또는 PGP 키를 사용할 수도 있습니다. 서명 알고리즘에 대한 자세한 내용은 키 용도 및 알고리즘을 참조하세요.
PKIX 키 쌍 만들기
Binary Authorization을 사용하면 비대칭 PKIX 키 쌍을 사용하여 이미지에 서명하고 확인할 수 있습니다.
PKIX 키 쌍은 서명자가 증명을 디지털 서명하는 데 사용하는 비공개 키와 증명자에 추가하는 공개 키로 구성됩니다. Binary Authorization은 배포 시에 이 공개 키를 사용하여 비공개 키로 서명된 증명을 확인합니다.
Cloud KMS에서 생성되고 저장된 비대칭 키 쌍은 PKIX와 호환되는 형식입니다. Binary Authorization에서 사용할 Cloud KMS 키를 만들려면 비대칭 키 만들기를 참조하세요. 키를 만들 때 키 용도로 비대칭 서명을 선택해야 합니다.
PKIX(Cloud KMS)
Cloud KMS에서 키 쌍을 만들려면 다음 안내를 따르세요.
키 쌍을 만드는 데 필요한 환경 변수를 설정합니다.
KMS_KEY_PROJECT_ID=${PROJECT_ID} KMS_KEYRING_NAME=my-binauthz-keyring KMS_KEY_NAME=my-binauthz-kms-key-name KMS_KEY_LOCATION=global KMS_KEY_PURPOSE=asymmetric-signing KMS_KEY_ALGORITHM=ec-sign-p256-sha256 KMS_PROTECTION_LEVEL=software KMS_KEY_VERSION=1
키링을 만듭니다.
gcloud kms keyrings create ${KMS_KEYRING_NAME} \ --location ${KMS_KEY_LOCATION}
키를 만듭니다.
gcloud kms keys create ${KMS_KEY_NAME} \ --location ${KMS_KEY_LOCATION} \ --keyring ${KMS_KEYRING_NAME} \ --purpose ${KMS_KEY_PURPOSE} \ --default-algorithm ${KMS_KEY_ALGORITHM} \ --protection-level ${KMS_PROTECTION_LEVEL}
PKIX(로컬 키)
새로운 로컬 비대칭 PKIX 키 쌍을 생성하고 이를 파일로 저장하려면 다음을 수행합니다.
키를 생성합니다.
PRIVATE_KEY_FILE="/tmp/ec_private.pem" openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}
이 파일에는 공개 키와 비공개 키가 모두 포함되어 있으므로 공개 키를 별도의 파일로 추출하여 증명자에 추가해야 합니다.
PUBLIC_KEY_FILE="/tmp/ec_public.pem" openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}
증명자 만들기
다음 단계는 증명자를 만들고 Artifact Analysis 메모와 공개 키를 연결하는 것입니다.
Binary Authorization은 Artifact Analysis를 사용하여 승인 프로세스에 사용된 신뢰할 수 있는 메타데이터를 저장합니다. 생성된 증명자마다 Artifact Analysis 메모를 하나씩 만들어야 합니다. 각 증명은 이 메모의 어커런스로 저장됩니다.
증명자를 만들려면 다음 안내를 따르세요.
증명자 프로젝트의 Binary Authorization 페이지로 이동합니다.
증명자 탭에서 만들기를 클릭합니다.
새 증명자 만들기를 클릭합니다.
증명자 이름에 증명자의 이름(예: build-secure 또는 prod-qa)을 입력합니다.
공개 키를 증명자에 추가하려면 다음을 수행합니다.
PKIX(로컬 키)
- PKIX 키 추가를 클릭합니다.
- 파일에서 가져오기를 클릭합니다.
- 앞에서 저장한 PKIX 키 파일로 이동하여 선택합니다. 참고: 공개 키를 PEM 형식으로 붙여넣을 수도 있습니다.
- 서명 알고리즘을 선택합니다. 이 가이드의 예시 키는 Elliptic Curve P256 - SHA Digest 알고리즘으로 생성됩니다.
PKIX(Cloud KMS)
- PKIX 키 추가를 클릭합니다.
- Cloud KMS에서 가져오기를 클릭합니다.
창이 열리면 키 버전의 리소스 ID를 입력합니다. 리소스 ID의 형식은 다음과 같습니다.
projects/KMS_KEY_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/KMS_KEYRING_NAME/cryptoKeys/KMS_KEY_NAME/cryptoKeyVersions/KMS_KEY_VERSION
각 항목의 의미는 다음과 같습니다.
- KMS_KEY_PROJECT_ID는 키가 저장된 프로젝트의 ID입니다.
- KMS_KEY_LOCATION은 키의 위치입니다(
global
이 기본값임). - KMS_KEYRING_NAME은 키링의 이름입니다.
- KMS_KEY_NAME은 키의 이름입니다.
- KMS_KEY_VERSION은 키 버전입니다.
이 페이지에서 샘플 환경 변수를 사용하여 Cloud KMS 키 쌍을 만든 경우 다음 명령어로 리소스 ID를 볼 수 있습니다.
echo projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION}
제출을 클릭합니다.
이전에 만든 기존 메모를 사용하려면 고급 설정 섹션을 펼칩니다.
Artifact Analysis 메모 자동 생성을 선택 해제합니다.
Artifact Analysis 메모 ID 필드에 정규화된 이름을 입력하세요. 이 이름의 형식은
projects/PROJECT_ID/notes/NOTE_ID
입니다.
만들기를 클릭합니다.
증명자가 생성되었는지 확인
증명자가 생성되었는지 확인하려면 다음을 실행하세요.
Google Cloud 콘솔의 Binary Authorization 페이지로 돌아갑니다.
증명자 탭을 엽니다.
다중 프로젝트 설정
별도의 배포자 프로젝트와 증명자 프로젝트가 있는 다중 프로젝트 설정을 사용하는 경우 배포자 프로젝트에서 배포 중 생성된 증명을 k용하기 위해 증명자 리소스에 설정해야 하는 추가 권한이 있습니다.
배포자 프로젝트에 IAM 역할 바인딩 추가
증명자에 배포자 프로젝트 서비스 계정의 IAM 역할 바인딩을 추가해야 합니다. 이는 Binary Authorization에서 계정에 증명자에 액세스할 수 있는 권한이 있는지 확인하기 위해 정책을 평가할 때 사용됩니다.
Google Cloud 콘솔에서는 이 단계가 지원되지 않으므로 명령줄에서 IAM 역할 바인딩을 추가해야 합니다.
IAM 역할 바인딩을 추가하려면 다음을 실행하세요.
프로젝트 이름과 버전을 저장할 환경 변수를 설정합니다.
DEPLOYER_PROJECT_ID=PROJECT_ID DEPLOYER_PROJECT_NUMBER="$( gcloud projects describe "${DEPLOYER_PROJECT_ID}" \ --format="value(projectNumber)" )"
프로젝트의 서비스 계정 이름을 저장할 환경 변수를 설정합니다.
DEPLOYER_SERVICE_ACCOUNT="service-${DEPLOYER_PROJECT_NUMBER}@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
IAM 역할 바인딩을 추가합니다.
gcloud --project ATTESTOR_PROJECT_ID \ beta container binauthz attestors add-iam-policy-binding \ "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \ --member="serviceAccount:${DEPLOYER_SERVICE_ACCOUNT}" \ --role=roles/binaryauthorization.attestorsVerifier
Binary Authorization을 설정하는 사용자에 IAM 역할 바인딩 추가
배포자 프로젝트의 Binary Authorization 정책에 증명자를 추가하는 사용자는 추가할 증명자를 볼 수 있는 권한이 있어야 하므로 IAM 역할 바인딩을 추가해야 합니다. 원할 경우 이 권한은 증명자를 추가한 후에 안전하게 취소할 수 있습니다.
Google Cloud 콘솔에서는 이 단계가 지원되지 않으므로 명령줄에서 IAM 역할 바인딩을 추가해야 합니다.
IAM 역할 바인딩을 추가하려면 다음을 실행하세요.
gcloud --project ATTESTOR_PROJECT_ID \ beta container binauthz attestors add-iam-policy-binding \ "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \ --member=ADMIN_EMAIL_ACCOUNT \ --role=roles/binaryauthorization.attestorsViewer
증명자를 추가한 후 IAM 역할 바인딩을 삭제하려면 다음을 실행하세요.
gcloud --project ATTESTOR_PROJECT_ID \ beta container binauthz attestors remove-iam-policy-binding \ "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \ --member=ADMIN_EMAIL_ACCOUNT \ --role=roles/binaryauthorization.attestorsViewer
다음 단계
- 증명자에 대한 증명 만드는 방법 알아보기
- Google Cloud 콘솔, Google Cloud CLI, REST API를 사용하여 증명을 요구하도록 Binary Authorization 정책 업데이트하기