このページでは、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 を使用して、認証プロセスで使用される信頼できるメタデータを保存します。作成する認証者ごとに、1 つの Artifact Analysis メモを作成する必要があります。それぞれの証明書が、このメモのオカレンスとして保存されます。
認証者を作成するには:
attestor プロジェクトの Binary Authorization ページに移動します。
[認証者] タブで [作成] をクリックします。
[Create New Attestor] をクリックします。
[認証者の名前] に認証者の名前を入力します(例: build-secure または prod-qa)。
認証者に公開鍵を追加するには、次のようにします。
PKIX(ローカル鍵)
- [Add a PKIX Key] をクリックします。
- [ファイルからインポート] をクリックします。
- 前に保存した PKIX 鍵ファイルに移動して選択します。注: 公開鍵を PEM 形式で貼り付けることもできます。
- 署名アルゴリズムを選択します。このガイドの鍵の例は、楕円曲線 P256 - SHA ダイジェスト アルゴリズムで生成されます。
PKIX(Cloud KMS)
- [Add a PKIX Key] をクリックします。
- [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}
[送信] をクリックします。
以前に作成した既存のメモを使用する場合は、[詳細設定] セクションを開きます。
[Automatically generate an Artifact Analysis] の選択を解除します。
[Artifact Analysis Note ID] フィールドに完全修飾名を入力します。名前の形式は
projects/PROJECT_ID/notes/NOTE_ID
です。
[作成] をクリックします。
認証者が作成されたことを確認する
認証者が作成されたことを確認するには:
Google Cloud コンソールの [Binary Authorization] ページに戻ります。
[認証者] タブを開きます。
マルチプロジェクト設定
マルチプロジェクト設定を使用している場合は、デプロイ担当者と認証者のプロジェクトを別々に作成しています。この場合、作成された証明書をデプロイ担当者がデプロイ時に使用できるように、認証者のリソースに追加の権限を設定する必要があります。
デプロイ担当者プロジェクトの 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 ロール バインディングを追加する
追加する認証者を表示する権限が必要になるため、認証者を追加するユーザーの IAM ロール バインディングをデプロイ担当者プロジェクトの Binary Authorization ポリシーに追加する必要があります。認証者の追加後、必要であれば、この権限を安全に取り消すことができます。
このステップは 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 ポリシーを更新し、証明書を要求する。