Console에서 증명자 만들기

이 페이지에서는 Google Cloud Console에서 Binary Authorization의 증명자를 만드는 방법을 설명합니다. 또는 명령줄에서 gcloud 명령어를 사용하거나 REST API을 사용하여 이러한 단계를 수행해도 됩니다. 이 작업은 Binary Authorization 설정의 일부입니다.

시작하기 전에

증명자를 만들기 전:

  1. Binary Authorization을 사용 설정해야 합니다. 자세한 내용은 Binary Authorization 사용 설정을 참조하세요.

  2. 증명자가 검증한 이미지만 허용하도록 정책을 구성해야 합니다. 자세한 내용은 Console을 사용하여 정책 구성을 참조하세요.

개요

증명자는 Binary Authorization에서 증명을 확인하는 데 사용하는 GCP 리소스입니다. Binary Authorization에 대한 자세한 내용은 Binary Authorization 개요를 참조하세요.

증명자를 만들려면 다음을 수행해야 합니다.

  • 증명자의 ID를 확인하는 데 사용할 수 있는 PKIX 키 쌍을 설정합니다. Cloud Key Management Service(Cloud KMS)에서 생성된 비대칭 키 쌍은 PKIX와 호환되는 형식입니다.
  • Binary Authorization에서 증명자를 만들고 생성한 공개 키와 연결합니다.

단일 프로젝트 설정 시 Binary Authorization 정책을 구성한 것과 동일한 프로젝트에 증명자를 만듭니다. 다중 프로젝트 설정에는 정책이 구성된 배포자 프로젝트와 증명자가 저장된 증명자 프로젝트가 있을 가능성이 높습니다.

암호화 키 설정

Binary Authorization에서는 PKIX 키를 사용하여 증명자의 ID를 안전하게 확인할 수 있습니다. 이렇게 하면 확인된 당사자만 컨테이너 이미지를 승인할 수 있습니다.

이 가이드에서는 PKIX 키 쌍을 생성하는 데 타원 곡선 디지털 서명 알고리즘(ECDSA) 사용이 권장됩니다. 서명에 RSA 또는 PGP 키를 사용할 수도 있습니다. 서명 알고리즘에 대한 자세한 내용은 키 용도 및 알고리즘을 참조하세요.

PKIX 키 쌍 만들기

Binary Authorization에서는 비대칭 PKIX 키 쌍 사용하여 증명자의 ID를 안전하게 확인할 수 있습니다. 키 쌍은 증명자가 증명을 디지털 서명하는 데 사용하는 비공개 키와 Binary Authorization 서비스에 저장된 대로 증명자에 추가하는 공개 키로 구성됩니다.

PKIX 키 쌍서명자가 증명을 디지털 서명하는 데 사용하는 비공개 키와 증명자에 추가하는 공개 키로 구성됩니다. Binary Authorization은 배포 시에 이 공개 키를 사용하여 비공개 키로 서명된 증명을 확인합니다.

Cloud KMS에서 생성되고 저장된 비대칭 키 쌍은 PKIX와 호환되는 형식입니다. Binary Authorization에서 사용할 Cloud KMS 키를 만들려면 비대칭 키 만들기를 참조하세요. 키를 만들 때 키 용도로 비대칭 서명을 선택해야 합니다.

PKIX(로컬 키)

로컬 비대칭 PKIX 키 쌍을 새로 생성하여 파일에 저장하려면 다음 안내를 따르세요.

  1. 키를 생성합니다.

    PRIVATE_KEY_FILE="/tmp/ec_private.pem"
    openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}
    
  2. 이 파일에는 공개 키와 비공개 키가 모두 포함되어 있으므로 공개 키를 별도의 파일로 추출하여 증명자에 추가해야 합니다.

    PUBLIC_KEY_FILE="/tmp/ec_public.pem"
    openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}
    

PKIX(Cloud KMS)

Cloud KMS에서 키 쌍을 만들려면 다음 안내를 따르세요.

  1. 키 쌍을 만드는 데 필요한 환경 변수를 설정합니다.

    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
    
  2. 키링을 만듭니다.

    gcloud kms keyrings create ${KMS_KEYRING_NAME} \
      --location ${KMS_KEY_LOCATION}
    
  3. 키를 만듭니다.

    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}
    

증명자 만들기

다음 단계는 증명자를 만들고 컨테이너 분석 메모와 공개 키를 연결하는 것입니다.

Binary Authorization은 컨테이너 분석을 사용하여 승인 프로세스에 사용된 신뢰할 수 있는 메타데이터를 저장합니다. 생성된 증명자마다 컨테이너 분석 메모를 하나씩 만들어야 합니다. 각 증명은 이 메모의 어커런스로 저장됩니다.

증명자를 만들려면 다음 안내를 따르세요.

  1. 증명자 프로젝트의 Binary Authorization 페이지로 이동합니다.

    Binary Authorization 페이지로 이동

  2. 증명자 탭에서 만들기를 클릭합니다.

  3. 새 증명자 만들기를 클릭합니다.

  4. 증명자 이름에 증명자의 이름(예: build-secure 또는 prod-qa)을 입력합니다.

  5. 컨테이너 분석 메모 자동 생성을 선택하여 새 메모를 만듭니다.

    이전에 만든 기존 메모를 사용하려면 이 옵션을 선택 취소하고 컨테이너 분석 메모 ID 필드에 정규화된 이름을 입력합니다. 이 이름의 형식은 projects/PROJECT_ID/notes/NOTE_ID입니다.

  6. 공개 키를 증명자에 추가합니다.

    PKIX(로컬 키)

    1. PKIX 키 추가를 클릭합니다.
    2. 파일에서 가져오기를 클릭합니다.
    3. 앞에서 저장한 PKIX 키 파일로 이동하여 선택합니다. 참고: 공개 키는 PEM 형식으로 붙여넣을 수도 있습니다.
    4. 서명 알고리즘을 선택합니다. 이 가이드의 예시 키는 Elliptic Curve P256 - SHA Digest 알고리즘으로 생성됩니다.

    PKIX(Cloud KMS)

    1. PKIX 키 추가를 클릭합니다.
    2. Cloud KMS에서 가져오기를 클릭합니다.
    3. 창이 열리면 키 버전의 리소스 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}
      
    4. 제출을 클릭합니다.

  7. 만들기를 클릭합니다.

증명자가 생성되었는지 확인

증명자가 생성되었는지 확인하려면 다음을 실행하세요.

  1. Google Cloud Console의 Binary Authorization 페이지로 돌아갑니다.

  2. 증명자 탭을 엽니다.

다중 프로젝트 설정

별도의 배포자 프로젝트와 증명자 프로젝트가 있는 다중 프로젝트 설정을 사용하는 경우 배포자 프로젝트에서 배포 중 생성된 증명을 k용하기 위해 증명자 리소스에 설정해야 하는 추가 권한이 있습니다.

배포자 프로젝트에 IAM 역할 binding 추가

증명자에 배포자 프로젝트 서비스 계정의 IAM 역할 binding을 추가해야 합니다. 이는 Binary Authorization에서 계정에 증명자에 액세스할 수 있는 권한이 있는지 확인하기 위해 정책을 평가할 때 사용됩니다.

Google Cloud Console에서는 이 단계가 지원되지 않으므로 명령줄에서 IAM 역할 binding을 추가해야 합니다.

IAM 역할 binding을 추가하려면 다음을 실행하세요.

  1. 프로젝트 이름과 버전을 저장할 환경 변수를 설정합니다.

    DEPLOYER_PROJECT_ID=PROJECT_ID
    DEPLOYER_PROJECT_NUMBER="$(
        gcloud projects describe "${DEPLOYER_PROJECT_ID}" \
          --format="value(projectNumber)"
    )"
    
  2. 프로젝트의 서비스 계정 이름을 저장할 환경 변수를 설정합니다.

    DEPLOYER_SERVICE_ACCOUNT="service-${DEPLOYER_PROJECT_NUMBER}@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
    
  3. IAM 역할 binding을 추가합니다.

    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 역할 binding 추가

배포자 프로젝트의 Binary Authorization 정책에 증명자를 추가하는 사용자는 추가할 증명자를 볼 수 있는 권한이 있어야 하므로 IAM 역할 binding을 추가해야 합니다. 원할 경우 이 권한은 증명자를 추가한 후에 안전하게 취소할 수 있습니다.

Google Cloud Console에서는 이 단계가 지원되지 않으므로 명령줄에서 IAM 역할 binding을 추가해야 합니다.

IAM 역할 binding을 추가하려면 다음을 실행하세요.

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 역할 binding을 삭제하려면 다음을 실행하세요.

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

다음 단계