Binary Authorization ポリシーを更新する
このドキュメントでは、Binary Authorization ポリシーでイメージを除外する方法について説明します。
このドキュメントでは、Artifact Registry のコンテナ イメージを Binary Authorization の適用から除外するようにポリシーを更新し、他のすべてのコンテナのデプロイを禁止するようにデフォルト ルールを設定します。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init
- Cloud Shell を使用していない場合は、
kubectl
をインストールします。 Google Cloud コンソールで GKE の [クラスタ] ページに移動します。
Google Cloud プロジェクトの GKE クラスタのリストが表示されます。
[クラスタを作成] をクリックします。
[名前] フィールドに「
test-cluster
」と入力します。[ロケーション タイプ] オプションで [ゾーン] を選択します。
[ゾーン] プルダウン リストから
us-central1-a
を選択します。[セキュリティ] リンクをクリックして、[セキュリティ] パネルを表示します。
[セキュリティ] パネルで [Binary Authorization の有効化] を選択します。
[適用のみ] を選択します。
[作成] をクリックします。
Google Cloud コンソールの [Binary Authorization] ページに移動します。
ポリシーの詳細が表示されます。
[ポリシーの編集] をクリックします。
[プロジェクトのデフォルト ルール] で、[すべての画像を許可] オプションが選択されています。
Google Cloud コンソールの [Binary Authorization] ページに戻ります。
[ポリシーの編集] をクリックします。
[Disallow All Images](すべての画像を禁止)を選択します。
[デプロイルールからイメージを除外] で [イメージパス] を展開します。
[イメージパスを追加] をクリックします。
Artifact Registry
[新しいイメージパス] に、Artifact Registry リポジトリから次のパスを貼り付けます。
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
[完了] をクリックして、イメージパスを保存します。
[ポリシーを保存] をクリックします。
ポリシーの YAML ファイルをエクスポートします。
gcloud container binauthz policy export > /tmp/policy.yaml
テキスト エディタで、
evaluationMode
をALWAYS_ALLOW
からALWAYS_DENY
に変更し、除外イメージをadmissionWhitelistPatterns
に追加します。Artifact Registry から次のサンプル イメージを除外するには、ポリシー YAML ファイルを次のように変更します。
admissionWhitelistPatterns: - namePattern: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_DENY enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/<var>PROJECT_ID</var>/policy
ポリシーの YAML ファイルを Binary Authorization にあらためてインポートします。
gcloud container binauthz policy import /tmp/policy.yaml
テキスト ファイルを作成し、更新したポリシーを JSON 形式で記述します。
cat > /tmp/policy.json << EOM { "name": "projects/${PROJECT_ID}/policy", "admissionWhitelistPatterns": [ { "namePattern": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0" } ], "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_DENY", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } } EOM
更新されたポリシーを REST API に送信します。
curl -X PUT \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: ${PROJECT_ID}" \ --data-binary @/tmp/policy.json \ "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
除外イメージをクラスタにデプロイします。
Google Cloud コンソール
除外イメージをデプロイします。
Google Cloud コンソールで GKE の [クラスタ] ページに移動します。
[デプロイ] をクリックします。
デプロイの詳細を入力するよう求められます。
[既存のコンテナ イメージ] を選択します。
コンテナ イメージのパスを入力します。
Artifact Registry
Artifact Registry からイメージをデプロイするには、次のように入力します。
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
[続行] をクリックします。
[アプリケーション名] フィールドに「
hello-server
」と入力します。[デプロイ] をクリックします。
kubectl
Artifact Registry
Artifact Registry からイメージをデプロイします。
kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
イメージのデプロイが許可されたことを確認します。
Google Cloud コンソール
イメージがデプロイされたことを確認するには、次の手順を行います。
- GKE ページに移動します。
- [ワークロード] ページに移動します。
hello-server
ワークロードと、実行中であることを示す緑色のアイコンが表示されます。kubectl
イメージのデプロイが許可されたことを確認するには、次のコマンドを入力します。
kubectl get pods
イメージが動作していることを確認します。
Pod を削除します。
Google Cloud コンソール
GKE の [ワークロード] ページで次の操作を行います。
hello-server ワークロードを選択します。
[削除] をクリックします。
リソースの削除を求めるプロンプトが表示されたら、[削除] をクリックします。
kubectl
kubectl delete pod hello-server
Google Cloud コンソールで GKE の [クラスタ] ページに移動します。
test-cluster
クラスタを選択し、[削除] をクリックします。- ワイルドカードを使用して複数のイメージを除外するなど、イメージの除外の詳細については、イメージの除外をご覧ください。
- 証明書を必要とするポリシーを設定および適用する方法を説明するエンドツーエンドのチュートリアルについては、以下をご覧ください。
- DevOps に関するリソースをご覧ください。また、DevOps Research and Assessment(DORA) 研究プログラムについてもご確認ください。
Binary Authorization を有効にしたクラスタの作成
Binary Authorization を有効にした GKE クラスタを作成します。このクラスタで、デプロイしたコンテナ イメージを実行します。
Google Cloud コンソール
gcloud
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
フラグを指定して gcloud container clusters create
を実行します。
gcloud container clusters create \ --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \ --zone us-central1-a \ test-cluster
デフォルトのポリシーを表示する
デフォルトでは、Binary Authorization ポリシーはすべてのコンテナ イメージがデプロイされるように構成されています。
Google Cloud コンソール
デフォルト ポリシーを表示するには、次の操作を行います。
gcloud
デフォルト ポリシーを表示するには、次のファイルを実行して、ポリシーの YAML ファイルをエクスポートします。
gcloud container binauthz policy export
デフォルトでは、このファイルの内容は次のようになっています。
globalPolicyEvaluationMode: ENABLE
defaultAdmissionRule:
evaluationMode: ALWAYS_ALLOW
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
name: projects/<var>PROJECT_ID</var>/policy
REST API
デフォルト ポリシーを表示するには、次のように JSON 形式で取得します。
curl \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: ${PROJECT_ID}" \ "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
REST API は以下を返します。
{ "name": "projects/PROJECT_ID/policy", "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_ALLOW", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } }
除外イメージのみを許可する
このセクションでは、ポリシーを変更してイメージを除外し、他のすべてのイメージのデプロイを禁止する方法について説明します。
Google Cloud コンソール
ポリシーを変更するには、次の手順を行います。
gcloud
Artifact Registry からのサンプル イメージを許可するようにポリシーを変更するには、次の操作を行います。
REST API
ポリシーを変更するには、次の手順を行います。
ポリシーのテスト
Exempt image
許可リストに追加したイメージをデプロイしてポリシーをテストするには、次の手順を行います。
クリーンアップ
このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、次の手順を実施します。
GKE で作成したクラスタを削除します。
コンソール
クラスタを削除するには、次の手順を行います。
gcloud
クラスタを削除するには、次のコマンドを入力します。
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster