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

このページでは、Binary Authorization でブレークグラスを使用する方法について説明します。

始める前に

このガイドでは、Binary Authorization が設定されていることを前提としています。

概要

ブレークグラスを使用して、Binary Authorization が通常ブロックするコンテナ イメージをデプロイします。

ブレークグラスを回避策として使用することで、Binary Authorization ポリシーの適用をオーバーライドし、ポリシーでは許可されないコンテナ イメージをデプロイすることが可能になります。

この機能は、Kubernetes アドミッション コントローラ仕様の推奨事項に沿って実装されています。

ブレークグラスを使用してイメージをデプロイすると、ブレークグラス イベントが自動的に Cloud Audit Logs に記録されます。Cloud Audit Logs では、アラートやその他のダウンストリーム イベントを手動で監査できます。または、自動的にトリガーすることもできます。

ブレークグラスを有効にするには、break-glass ポリシーフラグを使用して Podspec にラベルを追加します。

ブレークグラス イベントのデモ

このセクションでは、Binary Authorization ポリシーに違反するイメージを含むブレークグラスを使用してイメージをデプロイする方法について説明します。

Binary Authorization ポリシーを更新して、すべてのデプロイ リクエストを拒否する

すべてのイメージのデプロイを禁止するようにポリシーを更新するには、次の手順を行います。

Cloud Console

  1. Google Cloud Console で [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)に置き換えます。

デフォルトで、すべてのイメージのデプロイがブロックされるようになりました。

コンテナイ メージをデプロイする

ブレークグラスは Binary Authorization に固有ですが、Podspec のラベルを更新して有効にする必要があります。これを行うには、次のコマンドを実行します。

  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`.

ブレークグラスを有効にして再度デプロイする

  1. YAML 形式の構成ファイルを作成します。

    次のコマンドは、break-glass ラベルと、ポッドの作成に必要なその他の情報を含むファイルを作成します。

    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
    

    以前の Kubernetes マスター バージョンの場合、次のように annotations ノードに alpha.image-policy.k8s.io/break-glass を追加してブレークグラスを有効にします。

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-name
      annotations:
         alpha.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 監査ログでブレークグラスのログエントリを見つける

Cloud 監査ログでブレークグラス イベントを表示します。

クリーンアップ

  1. Pod を削除します。

      kubectl delete -f /tmp/create_pod.yaml
      

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

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

      gcloud container binauthz policy import /tmp/policy_save.yaml