ブレークグラスを使用する(GKE、Distributed Cloud)

このページでは、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 コンソール

  1. Google Cloud コンソールで [Binary Authorization] ページに移動します。

    Binary Authorization に移動

  2. [ポリシーの編集] をクリックします。

  3. [ポリシーの編集] ページの [プロジェクトのデフォルト ルール] で元の評価モードを確認し、[すべてのイメージを禁止] をクリックします。

  4. [ポリシーを保存] をクリックします。

gcloud

  1. 次のコマンドを実行して、現在のプロジェクトにある既存のポリシーを保存します。

    gcloud container binauthz policy export > SAVE_POLICY_YAML
    

    SAVE_POLICY_YAML は、エクスポート ファイルのパス(例: /tmp/save_policy.yaml)に置き換えます。

  2. ポリシー ファイルを作成します。

    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)。

  3. ポリシーをインポートします。

    gcloud container binauthz policy import TEST_POLICY_YAML
    

    TEST_POLICY_YAML は、ファイルパスに置き換えます(例: /tmp/policy.yaml)。

デフォルトで、すべてのイメージのデプロイがブロックされます。

イメージのデプロイを試みる

このセクションでは、イメージのデプロイを試みます。ポリシーのデフォルトのルールは、すべてのイメージのデプロイを許可しないように構成されているため、デプロイ リクエストは失敗します。

  1. 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
    
  2. 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 フィールドを更新する必要があります。

ブレークグラスを有効にするには、次のコマンドを実行します。

  1. 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
    
  2. 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 を削除し、ブレークグラスを無効にするには、次の手順を行います。

  1. Pod を削除します。

      kubectl delete -f /tmp/create_pod.yaml
      

    pod <var>pod-name</var> deleted のような出力が表示されていることを確認します。

  2. Pod 仕様から label ブロックを削除します。

  3. ポリシーをリセットします。

    Google Cloud コンソール

    1. Google Cloud コンソールで [Binary Authorization] ページに移動します。

      Binary Authorization に移動

    2. [ポリシーの編集] をクリックします。

    3. [ポリシーの編集] ページの [プロジェクトのデフォルト ルール] で、評価モードを前の設定に再設定します。

    4. [ポリシーを保存] をクリックします。

    gcloud

    1. 元のポリシーを再度インポートします。

        gcloud container binauthz policy import SAVE_POLICY_YAML
      

      SAVE_POLICY_YAML は、このガイドの前半で作成したファイルのパスに置き換えます。

    ポリシーがリセットされます。

次のステップ