ื™ืฆื™ืจืช ืื™ืฉื•ืจ ื‘-Binary Authorization ื‘ืฆื™ื ื•ืจ Cloud Build

ื‘ืžื“ืจื™ืš ื”ื–ื” ืชืœืžื“ื• ืื™ืš ืœื™ืฆื•ืจ ืื™ืฉื•ืจ ืฉืœ Binary Authorization ื‘ืฆื™ื ื•ืจ ืขื™ื‘ื•ื“ ื ืชื•ื ื™ื ืฉืœ Cloud Build. ื”ื”ื’ื“ืจื” ื”ื–ื• ืขื•ื–ืจืช ืœื•ื•ื“ื ืฉืจืง ืงื•ื‘ืฆื™ ืื™ืžื’' ืฉืœ ืงื•ื ื˜ื™ื™ื ืจื™ื ืฉื ื‘ื ื• ื•ื ื—ืชืžื• ื›ื—ืœืง ืžืชื”ืœื™ืš ื”-build ืฉืœ Cloud Build ื™ืงื‘ืœื• ื”ืจืฉืื” ืื•ื˜ื•ืžื˜ื™ืช ืœืคืขื•ืœ ื‘ืกื‘ื™ื‘ืช ื”ืคืจื™ืกื” ืฉืœื›ื.

ืกืงื™ืจื” ื›ืœืœื™ืช ืขืœ Cloud Build

โ€ซCloud Build (ืกืงื™ืจื” ื›ืœืœื™ืช) ืœื•ืงื— ืงื•ื“ ืžืงื•ืจ ืฉืžืื•ื—ืกืŸ ื‘ืžืื’ืจ ืžืืจื—, ืžืจื™ืฅ ืืช ื’ืจืกืื•ืช ื”-build ื•ื”ื‘ื“ื™ืงื•ืช ืฉืœื›ื ื•ืžืื—ืกืŸ ืืช ืคืœื˜ ื”ืชื•ื›ื ื” ืฉืžืชืงื‘ืœ ื‘-Container Registry ืื• ื‘ืฉื™ืจื•ืช ืื—ืกื•ืŸ ืื—ืจ ื‘-Google Cloud Platform.

ืกืงื™ืจื” ื›ืœืœื™ืช ืขืœ Binary Authorization

โ€ซBinary Authorization (ืกืงื™ืจื” ื›ืœืœื™ืช) ื”ื•ื ืžื•ืฆืจ ืฉืœGoogle Cloud ืฉืžื—ื™ืœ ืื™ืœื•ืฆื™ื ืขืœ ืืคืœื™ืงืฆื™ื•ืช ื‘ื–ืžืŸ ื”ืคืจื™ืกื”. ื”ืฉื™ืœื•ื‘ ืฉืœื• ืขื Google Kubernetes Engineโ€ (GKE) ืžืืคืฉืจ ืœืžืฉืชืžืฉื™ื ืœืื›ื•ืฃ ืฉืงื•ื ื˜ื™ื™ื ืจื™ื ืฉื ืคืจืกื• ื‘ืืฉื›ื•ืœ Kubernetes ื—ืชื•ืžื™ื ื‘ืื•ืคืŸ ืงืจื™ืคื˜ื•ื’ืจืคื™ ืขืœ ื™ื“ื™ ืจืฉื•ืช ืžื”ื™ืžื ื”, ื•ืžืื•ืžืชื™ื ืขืœ ื™ื“ื™ ื’ื•ืจื ืžืืžืช (attestor) ืฉืœ Binary Authorization.

ืืชื ื™ื›ื•ืœื™ื ืœื”ื’ื“ื™ืจ ืืช Binary Authorization ื›ืš ืฉื™ื“ืจื•ืฉ ืื™ืฉื•ืจื™ื ืขืœ ืกืžืš ื”ืžื™ืงื•ื ืฉืœ ืงื•ื“ ื”ืžืงื•ืจ, ื›ื“ื™ ืœืžื ื•ืข ืคืจื™ืกื” ืฉืœ ืงื•ื‘ืฆื™ ืื™ืžื’' ืฉืœ ืงื•ื ื˜ื™ื™ื ืจื™ื ืฉื ื‘ื ื• ืžืžืงื•ืจ ืœื ืžื•ืจืฉื”.

ืžื™ื“ืข ื ื•ืกืฃ:

ืืจื›ื™ื˜ืงื˜ื•ืจื”

ื”ืชืจืฉื™ื ื”ื‘ื ืžืฆื™ื’ ืืช ื”ืจื›ื™ื‘ื™ื ื‘ื”ื’ื“ืจื” ืฉืœ Binary Authorization/Cloud Build:

ืคื™ื™ืคืœื™ื™ืŸ ืื™ืžื•ืช (attestation) ืฉืœ Binary Authorization ื‘-Cloud Build.
ืชืจืฉื™ื 1. ืฆื™ื ื•ืจ ืขื™ื‘ื•ื“ ื ืชื•ื ื™ื ืฉืœ Cloud Build ืฉื™ื•ืฆืจ ืื™ืฉื•ืจ ืฉืœ Binary Authorization.

ื‘ืฆื™ื ื•ืจ ื”ื–ื”:

  1. ืงื•ื“ ืœื™ืฆื™ืจืช ืงื•ื‘ืฅ ืื™ืžื’' ืฉืœ ืงื•ื ื˜ื™ื™ื ืจ ืžื•ืขื‘ืจ ืœืžืื’ืจ ืžืงื•ืจ.

  2. ื›ืœื™ ืœืื™ื ื˜ื’ืจืฆื™ื” ืจืฆื™ืคื” (CI),โ€ Cloud Build, ื™ื•ืฆืจ ื•ื‘ื•ื“ืง ืืช ื”ืงื•ื ื˜ื™ื™ื ืจ.

  3. ื”-build ืžืขื‘ื™ืจ ืืช ืงื•ื‘ืฅ ื”ืื™ืžื’' ืฉืœ ื”ืงื•ื ื˜ื™ื™ื ืจ ืืœ Container Registry ืื• ืืœ ืžืื’ืจ ืื—ืจ ืฉื‘ื• ืžืื•ื—ืกื ื™ื ืงื•ื‘ืฆื™ ื”ืื™ืžื’' ืฉื ื•ืฆืจื•.

  4. โ€ซCloud Key Management Service, ืฉืžืกืคืง ื ื™ื”ื•ืœ ืžืคืชื—ื•ืช ืœื–ื•ื’ ื”ืžืคืชื—ื•ืช ื”ืงืจื™ืคื˜ื•ื’ืจืคื™ื™ื, ื—ื•ืชื ืขืœ ืงื•ื‘ืฅ ื”ืื™ืžื’' ืฉืœ ื”ืงื•ื ื˜ื™ื™ื ืจ. ื”ื—ืชื™ืžื” ืฉืžืชืงื‘ืœืช ื ืฉืžืจืช ื‘ืื™ืฉื•ืจ ื—ื“ืฉ ืฉื ื•ืฆืจ.

  5. ื‘ื–ืžืŸ ื”ืคืจื™ืกื”, ื”ื’ื•ืจื ื”ืžืืฉืจ ืžืืžืช ืืช ื”ืื™ืฉื•ืจ ื‘ืืžืฆืขื•ืช ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ืžื–ื•ื’ ื”ืžืคืชื—ื•ืช. โ€ซBinary Authorization ืื•ื›ืฃ ืืช ื”ืžื“ื™ื ื™ื•ืช ืขืœ ื™ื“ื™ ื“ืจื™ืฉื” ืฉืœ ืื™ืžื•ืช (attestation) ื—ืชื•ืžื™ื ื›ื“ื™ ืœืคืจื•ืก ืืช ืงื•ื‘ืฅ ืื™ืžื’' ืฉืœ ืงื•ื ื˜ื™ื™ื ืจ.

ื™ืฆื™ืจืช ืื™ืฉื•ืจ ื‘ืืžืฆืขื•ืช Cloud Build ืขื Cloud Key Management Service

ื‘ืงื˜ืข ื”ื–ื” ืžื•ืกื‘ืจ ืื™ืš ืžื˜ืžื™ืขื™ื ืืช ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ืฉืœืžืขืœื”. ื”ื•ื ืžืฉืชืžืฉ ื‘ืฉืœื‘ ื‘ื ื™ื™ื” ืžื•ืชืื ืื™ืฉื™ืช ื‘ืงื•ื“ ืคืชื•ื— ืž-Cloud Build Community. ืฉืœื‘ ื”-build ื”ืžื•ืชืื ืื™ืฉื™ืช ื—ื•ืชื ืขืœ ืงื•ื‘ืฅ ืื™ืžื’' ืฉืœ ืงื•ื ื˜ื™ื™ื ืจ, ื™ื•ืฆืจ ืืช ื”ืื™ืžื•ืช (attestation) ื•ืžืขืœื” ืื•ืชื• ืœ-Binary Authorization.

ื”ื’ื“ืจืช ื ื™ื”ื•ืœ ื–ื”ื•ื™ื•ืช ื•ื”ืจืฉืื•ืช ื’ื™ืฉื” (IAM)

ื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘ืฉืœื‘ ื”ื‘ื ื™ื™ื” ื”ื–ื”, ืœื—ืฉื‘ื•ืŸ ื”ืฉื™ืจื•ืช ืฉืœ Cloud Build ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ืชืคืงื™ื“ื™ ื”-IAM ื”ื‘ืื™ื:

  • Binary Authorization Attestor Viewer
    • roles/binaryauthorization.attestorsViewer
  • โ€ซCloud KMS CryptoKey Signer/Verifier (ืื ืžืฉืชืžืฉื™ื ื‘ืžืคืชื— ื‘-KMS ืœื—ืชื™ืžื” ืขืœ ืื™ืฉื•ืจ)
    • roles/cloudkms.signerVerifier
  • Artifact Analysis Notes Attacher
    • roles/containeranalysis.notes.attacher

ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ืคืงื•ื“ื•ืช ื”ื‘ืื•ืช ื›ื“ื™ ืœื”ื•ืกื™ืฃ ืืช ื”ืชืคืงื™ื“ื™ื ืœื—ืฉื‘ื•ืŸ ื”ืฉื™ืจื•ืช ื‘-Cloud Build ืฉืžืฉื•ื™ืš ืœืคืจื•ื™ืงื˜:

  1. ืžืคืขื™ืœื™ื ืืช Cloud Build:

    ืžืคืขื™ืœื™ื ืืช Cloud Build API ื‘ืคืจื•ื™ืงื˜ ื”ื™ืขื“ Google Cloud .

  2. ืฉื•ืžืจื™ื ืืช ืžื–ื”ื” ื”ืคืจื•ื™ืงื˜ ื‘ืžืฉืชื ื” ืกื‘ื™ื‘ื”:

    PROJECT_ID=PROJECT_ID
    

    ื›ืืฉืจ PROJECT_ID ื”ื•ื ืžื–ื”ื” ื”ืคืจื•ื™ืงื˜ Google Cloud .

  3. ืžื’ื“ื™ืจื™ื ืืช ื”ืคืจื•ื™ืงื˜ ื‘-Google Cloud CLI:

    gcloud config set project ${PROJECT_ID}
    
  4. ืžืงื‘ืœื™ื ืืช ืžืกืคืจ ื”ืคืจื•ื™ืงื˜:

    PROJECT_NUMBER=$(gcloud projects list --filter="${PROJECT_ID}" --format="value(PROJECT_NUMBER)")
    
  5. ืžื•ืกื™ืคื™ื ืืช ื”ืชืคืงื™ื“ Binary Authorization Attestor Viewer ืœื—ืฉื‘ื•ืŸ ื”ืฉื™ืจื•ืช ื‘-Cloud Build:

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
      --role roles/binaryauthorization.attestorsViewer
    
  6. ื”ื•ืกืคืช ื”ืชืคืงื™ื“ Cloud KMS CryptoKey Signer/Verifier ืœื—ืฉื‘ื•ืŸ ื”ืฉื™ืจื•ืช ืฉืœ Cloud Build (ื—ืชื™ืžื” ืžื‘ื•ืกืกืช-KMS):

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
      --role roles/cloudkms.signerVerifier
    
  7. ืžื•ืกื™ืคื™ื ืืช ื”ืชืคืงื™ื“ Artifact Analysis Notes Attacher ืœื—ืฉื‘ื•ืŸ ื”ืฉื™ืจื•ืช ืฉืœ Cloud Build:

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
      --role roles/containeranalysis.notes.attacher
    

ืคื™ืชื•ื— ื•ืจื™ืฉื•ื ืฉืœ ืฉืœื‘ ื”-build ื”ืžื•ืชืื ืื™ืฉื™ืช ื‘ืืžืฆืขื•ืช Cloud Build

  1. ืžืฉื›ืคืœื™ื ืืช ืžืื’ืจ ื”ืงื”ื™ืœื” ืฉืœ Google Cloud Build:

    git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
    
  2. ืžื’ื“ื™ืจื™ื ืืช ื”ื—ื•ืชื ืฉืœ Binary Authorization ืœ-Cloud Build:

    ืœืคื ื™ ื”ืฉื™ืžื•ืฉ, ืฆืจื™ืš ืœื™ืฆื•ืจ ืงื•ื ื˜ื™ื™ื ืจ ืžื”ืงื•ื“ ืฉืœ ืฉืœื‘ ื”ื‘ื ื™ื™ื” ื”ืžื•ืชืื ืื™ืฉื™ืช ื•ืœื”ืขื‘ื™ืจ ืื•ืชื• ื‘ื“ื—ื™ืคื” ืœ-Cloud Build. ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ืžืจื™ืฆื™ื ืืช ื”ืคืงื•ื“ื•ืช ื”ื‘ืื•ืช:

    cd cloud-builders-community/binauthz-attestation
    gcloud builds submit . --config cloudbuild.yaml
    

    ืฉืœื‘ ื”ื‘ื ื™ื™ื” ื‘ื”ืชืืžื” ืื™ืฉื™ืช ื”ื•ืขื‘ืจ ืืœ Google Container Registry ืฉืœ ื”ืคืจื•ื™ืงื˜ ื”ื ื•ื›ื—ื™ ื•ืžื•ื›ืŸ ืœืฉื™ืžื•ืฉ.

ื™ืฆื™ืจืช ื’ื•ืจื ืžืืžืช (attestor) ื‘-Binary Authorization

ื™ื•ืฆืจื™ื ื’ื•ืจื ืžืืžืช (attestor) ืฉ-Binary Authorization ื™ืฉืชืžืฉ ื‘ื• ื‘ื–ืžืŸ ื”ืคืจื™ืกื” ื›ื“ื™ ืœืืžืช ืืช ื”ืื™ืžื•ืช (attestation).

ื”ื’ื“ืจื” ืฉืœ ืžืืžืช ื•ืฉืœ ืฆืžื“ ืžืคืชื—ื•ืช ืฉืœ Cloud Key Management Service ื‘-Binary Authorization:

ืื™ืš ื™ื•ืฆืจื™ื ืžืืžืช ื‘ืืžืฆืขื•ืช ื”-CLI

ืžื•ื•ื“ืื™ื ืฉื”ืžืืžืช ื ื•ืฆืจ

   gcloud --project="${ATTESTOR_PROJECT_ID}" container binauthz attestors list
   

ื”ื•ืกืคืช ืฉืœื‘ ืฉืœ ื™ืฆื™ืจืช ืื™ืฉื•ืจ ืœ-cloudbuild.yaml

ื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘ืฉืœื‘ binauthz-attestation, ืฆืจื™ืš ืœืขื“ื›ืŸ ืืช cloudbuild.yaml ื•ืœื”ื•ืกื™ืฃ ืืช ื”ืฉืœื‘ ืฉื™ื—ืชื•ื ืขืœ ื”-build ืฉื ืฉืœื— ืืœ Container Registry.

ื‘ื”ืžืฉืš ืžืคื•ืจื˜ื•ืช ืฉืชื™ ืฉื™ื˜ื•ืช:

  • ืžืขื“ื›ื ื™ื ืืช cloudbuild.yaml ื‘ืื•ืคืŸ ื™ื“ื ื™.

  • ืžืจื™ืฆื™ื ืฆื™ื ื•ืจ ืœื“ื•ื’ืžื” ืขื ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” ืฉื”ื’ื“ืจืชื ืงื•ื“ื.

ืขื“ื›ื•ืŸ ื™ื“ื ื™ ืฉืœ cloudbuild.yaml

  1. ืžืขื“ื›ื ื™ื ืืช cloudbuild.yaml ื‘ืื•ืคืŸ ื™ื“ื ื™ ืขืœ ื™ื“ื™ ื”ื•ืกืคืช ืฉืœื‘ ื”-build ืฉื‘ื”ืžืฉืš ืื—ืจื™ ื”ืฉืœื‘ ืฉื‘ื• ื”ืžืื’ืจ ืžื•ืขืœื” ืœ-Container Registry. ื”ืขืจื”: ืฆืจื™ืš ืœื”ื—ืœื™ืฃ ืืช ATTESTOR_NAME,โ€ KMS_KEY_LOCATION,โ€ KMS_KEYRING_NAME,โ€ KMS_KEY_NAME ื•-KMS_KEY_VERSION ื‘ืขืจื›ื™ื ืฉืœื›ื ื‘ืื•ืคืŸ ื™ื“ื ื™:

    - id: 'create-attestation'
      name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest'
      args:
        - '--artifact-url'
        - 'gcr.io/${PROJECT_ID}/helloworld:latest'
        - '--attestor'
        - 'projects/${PROJECT_ID}/attestors/ATTESTOR_NAME'
        - '--keyversion'
        - 'projects/${PROJECT_ID}/locations/KMS_KEY_LOCATION/keyRings/KMS_KEYRING_NAME/cryptoKeys/KMS_KEY_NAME/cryptoKeyVersions/KMS_KEY_VERSION'
    

    ื’ื ื”ืžื—ืจื•ื–ืช ื”ื‘ืื” ืชืงื™ื ื”:

    - id: 'create-attestation'
      name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest'
      args:
        - '--artifact-url'
        - 'gcr.io/${PROJECT_ID}/helloworld:latest'
        - '--attestor'
        - 'ATTESTOR_NAME'
        - '--attestor-project'
        - '${PROJECT_ID}'
        - '--keyversion'
        - 'KEY_VERSION'
        - '--keyversion-project'
        - '${PROJECT_ID}'
        - '--keyversion-location'
        - 'KEY_LOCATION'
        - '--keyversion-keyring'
        - 'KEYRING_NAME'
        - '--keyversion-key'
        - 'KEY_NAME'
    

ืื•ืคืฆื™ื•ื ืœื™: ื‘ื“ื™ืงืช ืฆื™ื ื•ืจ ื”ื ืชื•ื ื™ื

ื›ื“ื™ ืœื‘ื“ื•ืง ืฆื™ื ื•ืจ ืขื™ื‘ื•ื“ ื ืชื•ื ื™ื ืœื“ื•ื’ืžื” ืฉืœ ืื™ืฉื•ืจ ื‘-Cloud Build, ืžื‘ืฆืขื™ื ืืช ื”ืฉืœื‘ื™ื ื”ื‘ืื™ื:

  1. ื™ื•ืฆืจื™ื ืงื•ื‘ืฅ cloudbuild.yaml ืขื ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” ืฉื”ื’ื“ืจืชื ืงื•ื“ื:

    cd example
    cat <<EOM > cloudbuild_example.yaml
    steps:
      - id: 'build'
        name: 'gcr.io/cloud-builders/docker'
        args:
          - 'build'
          - '-t'
          - 'gcr.io/$PROJECT_ID/helloworld:latest'
          - '.'
      - id: 'publish'
        name: 'gcr.io/cloud-builders/docker'
        args:
          - 'push'
          - 'gcr.io/$PROJECT_ID/helloworld:latest'
      - id: 'create-attestation'
        name: 'gcr.io/$PROJECT_ID/binauthz-attestation:latest'
        args:
          - '--artifact-url'
          - 'gcr.io/$PROJECT_ID/helloworld:latest'
          - '--attestor'
          - 'projects/$PROJECT_ID/attestors/${ATTESTOR_NAME}'
          - '--keyversion'
          - 'projects/${PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION}'
    tags: ['cloud-builders-community']
    
    EOM
    
  2. ืžืจื™ืฆื™ื ืืช Cloud Build ืขื ื”ื“ื•ื’ืžื” cloudbuild_example.yaml:

    ืžื”ืกืคืจื™ื™ื” cloud-builders-community/binauthz-attestation/example, ืžืจื™ืฆื™ื ืืช ื”ืคืงื•ื“ื•ืช ื”ื‘ืื•ืช:

    gcloud builds submit . --config cloudbuild_example.yaml
    

ื”ืžืืžืจื™ื ื”ื‘ืื™ื