Binary Authorization ポリシーを更新する
このドキュメントでは、Binary Authorization ポリシーでイメージを除外する方法について説明します。
このドキュメントでは、Container Registry と 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Cloud Shell を使用していない場合は、
kubectl
をインストールします。
Binary Authorization を有効にしたクラスタの作成
Binary Authorization を有効にした GKE クラスタを作成します。このクラスタで、デプロイしたコンテナ イメージを実行します。
Google Cloud コンソール
Google Cloud コンソールで [Kubernetes クラスタ] ページに移動します。
Google Cloud プロジェクトの GKE クラスタのリストが表示されます。
[クラスタを作成] をクリックします。
[名前] フィールドに「
test-cluster
」と入力します。[ロケーション タイプ] オプションで [ゾーン] を選択します。
[ゾーン] プルダウン リストから
us-central1-a
を選択します。[セキュリティ] リンクをクリックして、[セキュリティ] パネルを表示します。
[セキュリティ] パネルで [Binary Authorization の有効化] を選択します。
[適用のみ] を選択します。
[作成] をクリックします。
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 コンソール
デフォルト ポリシーを表示するには、次の操作を行います。
Google Cloud コンソールで [Binary Authorization] ページに移動します。
ポリシーの詳細が表示されます。
[ポリシーの編集] をクリックします。
[プロジェクトのデフォルト ルール] で、オプション [すべてのイメージを許可] が選択されています。
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 コンソール
ポリシーを変更するには、次の手順を行います。
Google Cloud コンソールの [Binary Authorization] ページに戻ります。
[ポリシーの編集] をクリックします。
[すべてのイメージを禁止] を選択します。
[デプロイルールからイメージを除外] で [イメージパス] を展開します。
[イメージパスを追加] をクリックします。
Container Registry
[新しいイメージパス] に、Container Registry リポジトリから次のパスを貼り付けます。
gcr.io/google-samples/hello-app:1.0
Artifact Registry
[新しいイメージパス] に、Artifact Registry リポジトリから次のパスを貼り付けます。
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
[完了] をクリックして、イメージパスを保存します。
[ポリシーを保存] をクリックします。
gcloud
Container Registry と Artifact Registry からのサンプル イメージを許可するようにポリシーを変更するには、次の操作を行います。
ポリシーの YAML ファイルをエクスポートします。
gcloud container binauthz policy export > /tmp/policy.yaml
テキスト エディタで、
evaluationMode
をALWAYS_ALLOW
からALWAYS_DENY
に変更し、除外イメージをadmissionWhitelistPatterns
に追加します。Container Registry と Artifact Registry からの次のサンプル イメージを除外するには、ポリシー YAML ファイルを次のように変更します。
admissionWhitelistPatterns: - namePattern: gcr.io/google-samples/hello-app:1.0 - 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
REST API
ポリシーを変更するには、次の手順を行います。
テキスト ファイルを作成し、更新したポリシーを JSON 形式で記述します。
cat > /tmp/policy.json << EOM { "name": "projects/${PROJECT_ID}/policy", "admissionWhitelistPatterns": [ { "namePattern": "gcr.io/google-samples/hello-app:1.0" }, { "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"
ポリシーのテスト
Exempt image
許可リストに追加したイメージをデプロイしてポリシーをテストするには、次の手順を行います。
除外イメージをクラスタにデプロイします。
Google Cloud コンソール
除外イメージをデプロイします。
Google Cloud コンソールで [Kubernetes クラスタ] ページに移動します。
[デプロイ] をクリックします。
デプロイの詳細を入力するよう求められます。
[既存のコンテナ イメージ] を選択します。
コンテナ イメージのパスを入力します。
Container Registry
Container Registry からイメージをデプロイするには、次のように入力します。
gcr.io/google-samples/hello-app:1.0
Artifact Registry
Artifact Registry からイメージをデプロイするには、次のように入力します。
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
[続行] をクリックします。
[アプリケーション名] フィールドに「
hello-server
」と入力します。[デプロイ] をクリックします。
kubectl
Container Registry
Container Registry からイメージをデプロイします。
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
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 で作成したクラスタを削除します。
コンソール
クラスタを削除するには、次の手順を行います。
Google Cloud コンソールで [Kubernetes クラスタ] ページに移動します。
test-cluster
クラスタを選択し、[削除] をクリックします。
gcloud
クラスタを削除するには、次のコマンドを入力します。
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster
次のステップ
- ワイルドカードを使用して複数のイメージを除外するなど、イメージの除外の詳細については、イメージの除外をご覧ください。
- 証明書を必要とするポリシーを設定および適用する方法を説明するエンドツーエンドのチュートリアルについては、以下をご覧ください。
- DevOps に関するリソースをご覧ください。また、DevOps Research and Assessment(DORA) 研究プログラムについてもご確認ください。