GKE を使用して Binary Authorization ポリシーを構成する
このクイックスタートでは、Binary Authorization ポリシーで基本的なルールを構成してテストする方法について説明します。
このクイックスタートでは、ポリシーのデフォルト ルールを表示して構成します。デフォルト ルールでは、すべてのイメージのデプロイが許可されます。これをテストするには、Google Kubernetes Engine(GKE)クラスタにコンテナ イメージをデプロイします。次に、すべてのイメージのデプロイを禁止するデフォルトのルールを設定して、イメージのデプロイを試みます。
始める前に
- 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
kubectl
をインストールします。
Binary Authorization の適用を有効にしたクラスタを作成する
次に、Binary Authorization を有効にした GKE クラスタを作成します。このクラスタで、デプロイしたコンテナ イメージを実行します。
Binary Authorization は、Autopilot クラスタまたは Standard クラスタで使用できます。
Google Cloud コンソール
次の手順では、Autopilot クラスタを構成します。
Google Cloud コンソールで、GKE の [Kubernetes クラスタ] ページに移動します。
[作成] をクリックします。
[Autopilot クラスタの作成] で、次の操作を行います。
[名前] フィールドに「
test-cluster
」と入力します。[リージョン] メニューで [
us-central1
] を選択します。[詳細設定] セクションを開きます。
[セキュリティ] リンクをクリックして、[セキュリティ] パネルを表示します。
[セキュリティ] パネルで、[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/PROJECT_ID/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"
このコマンドを実行すると、次の出力が生成されます。
{ "name": "projects/PROJECT_ID/policy", "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_ALLOW", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } }
適用ポリシーをテストする
クラスタにサンプル コンテナ イメージをデプロイすることで、適用ポリシーをテストできます。
このクイックスタートでは、Container Registry のパス gcr.io/google-samples/hello-app
にあるサンプル コンテナ イメージを使用します。これは Google が作成した公開コンテナ イメージで、「Hello, World!」というサンプル アプリケーションが含まれています。
Google Cloud コンソール
ポリシーをテストするには、次の手順を行います。
Google Cloud コンソールで [Kubernetes クラスタ] ページに移動します。
[デプロイ] をクリックします。
デプロイの詳細を入力するよう求められます。
[既存のコンテナ イメージ] を選択します。
コンテナ イメージのパスとして「
gcr.io/google-samples/hello-app:1.0
」と入力します。[続行] をクリックします。
[アプリケーション名] フィールドに「
hello-server
」と入力します。[デプロイ] をクリックします。
kubectl
ポリシーをテストするには、次の手順を行います。
ローカルの
kubeconfig
ファイルを更新します。gcloud container clusters get-credentials \ --zone us-central1-a \ test-cluster
これにより、GKE でクラスタにアクセスするために必要な認証情報とエンドポイント情報が提供されます。
イメージをデプロイします。
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
ここで、Binary Authorization でデプロイが許可されたことを確認します。
Google Cloud コンソール
イメージがデプロイされたことを確認するには、Google Cloud コンソールで GKE の [ワークロード] ページに移動します。
デプロイのワークロードに、イメージが正常にデプロイされたことを示す緑色のアイコンが表示されます。
kubectl
イメージがデプロイされたことを確認するには、次の手順を行います。
kubectl get pods
このコマンドを実行すると、デプロイが成功したことを示す次のようなメッセージが出力されます。
NAME READY STATUS RESTARTS AGE hello-server-579859fb5b-h2k8s 1/1 Running 0 1m
デプロイを削除して次の手順に進みます。
Google Cloud コンソール
デプロイを削除するには、次の手順を行います。
Google Cloud コンソールで GKE の [ワークロード] ページに戻ります。
hello-server
ワークロードを選択します。[削除] をクリックします。
kubectl
デプロイを削除するには、次の操作を行います。
kubectl delete deployment hello-server
すべてのイメージを禁止するように適用ポリシーを構成する
次に、すべてのイメージのデプロイを許可せず、ブロックするようにポリシーを変更します。
Google Cloud コンソール
ポリシーを変更するには、次の手順を行います。
Google Cloud コンソールの [Binary Authorization] ページに戻ります。
[ポリシーの編集] をクリックします。
[すべてのイメージを禁止] を選択します。
[ポリシーを保存] をクリックします。
gcloud
ポリシーを変更するには、次の手順を行います。
ポリシーの YAML ファイルをエクスポートします。
gcloud container binauthz policy export > /tmp/policy.yaml
テキスト エディタで、
evaluationMode
をALWAYS_ALLOW
からALWAYS_DENY
に変更します。ポリシーの YAML ファイルが次のように表示されます。
globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_DENY enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/PROJECT_ID/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", "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"
ポリシーの再テスト
クラスタにサンプル コンテナ イメージをデプロイして、ポリシーを再度テストします。今度は、Binary Authorization がイメージのデプロイをブロックします。
Google Cloud コンソール
イメージをデプロイします。
Google Cloud コンソールで [Kubernetes クラスタ] ページに移動します。
[デプロイ] をクリックします。
デプロイの詳細を入力するよう求められます。
[既存のコンテナ イメージ] を選択します。
コンテナ イメージのパスとして「
gcr.io/google-samples/hello-app:1.0
」と入力します。[続行] をクリックします。
[アプリケーション名] フィールドに「
hello-server
」と入力します。[デプロイ] をクリックします。
kubectl
イメージをデプロイします。
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
ポリシーがブロックされたことを確認できます。
Google Cloud コンソール
イメージがデプロイされなかったことを確認するには、次の手順を行います。
Google Cloud コンソールで GKE の [ワークロード] ページに戻ります。
コンテナ イメージのワークロードに、イメージのデプロイが失敗したことを示す赤色のアイコンが表示されます。
kubectl
次のコマンドを実行して、イメージがデプロイされたことを確認します。
kubectl get pods
このコマンドを実行すると、イメージがデプロイされなかったことを示す次のメッセージが出力されます。
No resources found.
次のコマンドによってデプロイの詳細を確認できます。
kubectl get event --template \ '{{range.items}}{{"\033[0;36m"}}{{.reason}}:{{"\033[0m"}}{{.message}}{{"\n"}}{{end}}'
次のようなレスポンスが表示されます。
FailedCreate: Error creating: pods POD_NAME is forbidden: admission webhook "imagepolicywebhook.image-policy.k8s.io" denied the request: Image IMAGE_NAME denied by Binary Authorization default admission rule. Denied by always_deny admission rule
この出力で:
- POD_NAME: Pod の名前。
- IMAGE_NAME: イメージの名前。
- ATTESTOR_NAME: 認証者の名前。
クリーンアップ
このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の操作を行います。
GKE で作成したクラスタを削除します。
コンソール
クラスタを削除するには、次の手順を行います。
Google Cloud コンソールで [Kubernetes クラスタ] ページに移動します。
test-cluster
クラスタを選択し、[削除] をクリックします。
gcloud
クラスタを削除するには、次の手順を行います。
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster
次のステップ
built-by-cloud-build
認証者を使用して、Cloud Build によってビルドされたイメージのみをデプロイする(プレビュー)。- 証明書を要求するエンドツーエンドのチュートリアルについては、以下をご覧ください。
- DevOps に関するリソースをご覧ください。また、DevOps Research and Assessment(DORA) 研究プログラムについてもご確認ください。