このページでは、Binary Authorization でブレークグラスを使用する方法について説明します。
始める前に
このガイドでは、Binary Authorization が設定されていることを前提としています。
概要
ブレークグラスは、Binary Authorization がブロックするコンテナ イメージをデプロイするために使用します。
ブレークグラスは非常時の手段を提供します。これにより、Binary Authorization ポリシーの適用をオーバーライドして、ポリシーで許可されていないイメージでもデプロイできるようになります。
この機能は、Kubernetes アドミッション コントローラ仕様の推奨事項に沿って実装されています。
ブレークグラスを使用してイメージをデプロイすると、デプロイがポリシーを遵守しているか否かに関係なく、ブレークグラス イベントが自動的に Cloud Audit Logs に記録されます。Cloud Audit Logs では、手動で監査することも、アラートや他のダウンストリーム イベントを自動的にトリガーすることもできます。
ブレークグラスを有効にするには、break-glass
ポリシーフラグを指定して label
フィールドを Pod 仕様に追加します。
ブレークグラス イベントのデモ
このセクションでは、ブレークグラスを使用してイメージ(Binary Authorization ポリシーに違反するイメージを含む)をデプロイする方法について説明します。
Binary Authorization ポリシーを更新して、すべてのデプロイ リクエストを拒否する
すべてのイメージのデプロイを許可しないようにポリシーを更新するには、次の手順を行います。
Google Cloud コンソール
Google Cloud コンソールで [Binary Authorization] ページに移動します。
[ポリシーの編集] をクリックします。
[ポリシーの編集] ページの [プロジェクトのデフォルト ルール] で元の評価モードを確認し、[すべてのイメージを禁止] をクリックします。
[ポリシーを保存] をクリックします。
gcloud
次のコマンドを実行して、現在のプロジェクトにある既存のポリシーを保存します。
gcloud container binauthz policy export > SAVE_POLICY_YAML
SAVE_POLICY_YAML は、エクスポート ファイルのパス(例:
/tmp/save_policy.yaml
)に置き換えます。ポリシー ファイルを作成します。
cat > TEST_POLICY_YAML << EOM admissionWhitelistPatterns: defaultAdmissionRule: enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG evaluationMode: ALWAYS_DENY globalPolicyEvaluationMode: DISABLE EOM
TEST_POLICY_YAML は、ファイルパスに置き換えます(例:
/tmp/policy.yaml
)。ポリシーをインポートします。
gcloud container binauthz policy import TEST_POLICY_YAML
TEST_POLICY_YAML は、ファイルパスに置き換えます(例:
/tmp/policy.yaml
)。
デフォルトで、すべてのイメージのデプロイがブロックされます。
イメージのデプロイを試みる
このセクションでは、イメージのデプロイを試みます。ポリシーのデフォルトのルールは、すべてのイメージのデプロイを許可しないように構成されているため、デプロイ リクエストは失敗します。
YAML 形式の構成ファイルを作成します。このファイルには、Pod の作成に必要な基本情報が含まれています。
cat > /tmp/create_pod.yaml << EOM apiVersion: v1 kind: Pod metadata: name: breakglass-pod spec: containers: - name: container-name image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4 EOM
kubectl
を使用して Pod を作成します。kubectl create -f /tmp/create_pod.yaml
イメージがポリシーによってブロックされたことを示すエラーが表示されます。エラーは次のようになります。
Error from server (Forbidden): error when creating "/tmp/create_pod.yaml": pods "breakglass-pod" is forbidden: image policy webhook backend denied one or more images: Image gcr.io/google-samples/hello-app denied by Binary Authorization default admission rule. Denied by always_deny admission rule`.
ブレークグラスを有効にして再度デプロイする
このセクションでは、ブレークグラスを有効にします。ブレークグラスは Binary Authorization に固有ですが、有効にするには Pod 仕様の label
フィールドを更新する必要があります。
ブレークグラスを有効にするには、次のコマンドを実行します。
YAML 形式の構成ファイルを作成します。
次のコマンドは、
break-glass
ラベルと、Pod の作成に必要なその他の情報を含むファイルを作成します。cat > /tmp/create_pod.yaml << EOM apiVersion: v1 kind: Pod metadata: name: pod-name labels: image-policy.k8s.io/break-glass: "true" spec: containers: - name: container-name image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4 EOM
kubectl
を使用して Pod を作成します。kubectl create -f /tmp/create_pod.yaml
次の出力に注意してください。
pod/pod-name created
Cloud Audit Logs でブレークグラスのログエントリを見つける
Cloud Audit Logs でブレークグラス イベントを表示します。
annotations: alpha.image-policy.k8s.io/break-glass
を指定する古い PodSpecs も、ブレイクグラスをトリガーしてログエントリを生成します。このアノテーションの使用は推奨されなくなりましたが、下位互換性を維持するために引き続きサポートされます。
クリーンアップ
Pod を削除し、ブレークグラスを無効にするには、次の手順を行います。
Pod を削除します。
kubectl delete -f /tmp/create_pod.yaml
pod <var>pod-name</var> deleted
のような出力が表示されていることを確認します。Pod 仕様から
label
ブロックを削除します。ポリシーをリセットします。
Google Cloud コンソール
Google Cloud コンソールで [Binary Authorization] ページに移動します。
[ポリシーの編集] をクリックします。
[ポリシーの編集] ページの [プロジェクトのデフォルト ルール] で、評価モードを前の設定に再設定します。
[ポリシーを保存] をクリックします。
gcloud
元のポリシーを再度インポートします。
gcloud container binauthz policy import SAVE_POLICY_YAML
SAVE_POLICY_YAML は、このガイドの前半で作成したファイルのパスに置き換えます。
ポリシーがリセットされます。
次のステップ
- Cloud Audit Logs でブレークグラス イベントを表示する。