チェックポイント
Create a Kubernetes Cluster with Binary Authorization
/ 20
Update Binary Authorization Policy to add Disallow all images rule at project level and allow at cluster level
/ 10
Update cluster specific policy to Disallow all images
/ 10
Create a Nginx pod to verify cluster admission rule is applied for disallow all images (denies to create)
/ 10
Update BA policy to denying images except from whitelisted container registries (your project container registry)
/ 10
Update BA policy to modify cluster specific rule to allow only images that have been approved by attestors
/ 20
Tear Down (delete cluster)
/ 20
Google Kubernetes Engine のセキュリティ: Binary Authorization
- GSP479
- 概要
- アーキテクチャ
- 設定
- タスク 1. リソースのコピー
- タスク 2. デフォルトのクラスタ バージョンの設定
- タスク 3. デプロイ手順
- タスク 4. 検証
- タスク 5. Binary Authorization の使用
- タスク 6. 限定公開の GCR イメージを作成する
- タスク 7. すべてのイメージを禁止する
- タスク 8. 許可リストに登録されているコンテナ レジストリ以外のイメージを禁止する
- タスク 9. 証明書を必須にする
- タスク 10. コンテナ イメージに「署名」する
- タスク 11. 証明書の必須化を有効にしてイメージを実行する
- タスク 12. 緊急事態に対処する
- タスク 13. 破棄
- 独自の環境でのトラブルシューティング
- 関連資料
- お疲れさまでした
GSP479
概要
Kubernetes クラスタ実行時の主なセキュリティ上の重要事項のひとつとして、各 Pod 内で実行されているコンテナ イメージと、その出所を把握できなければならないという点があります。コンテナの由来を明確化するためには、コンテナのソースを信頼できる出所までトレースできるようにし、また組織がアーティファクト(コンテナ)作成時に望ましいプロセスに従う必要があります。
主な懸念事項を以下に示します。
- 安全な由来 - クラスタ内で実行されているすべてのコンテナ イメージが承認済みのソースからのものであることを、どのように確認するか
- 整合性と検証 - コンテナのビルドとデプロイごとにすべての必要な検証ステップが正常に完了していることを、どのように確認するか
- 完全性 - 由来が証明されてから実行されるまでの間にコンテナが変更されていないことを、どのように確認するか
イメージの出所の管理が厳密に適用されていない場合、セキュリティの観点から見て次のようなリスクが生じます。
- 悪意のある人物によってコンテナが侵害された場合に、ソース不明の別のコンテナを起動できるクラスタ権限が取得されてしまう可能性があります。
- Pod を作成する権限を持つ正規のユーザーが、意図的かどうかにかかわらず、望ましくないコンテナをクラスタ内で直接実行する可能性があります。
- 正規のユーザーが、意図的かどうかにかかわらず、望ましくないコードが知らない間に追加された実行可能なコンテナを使って Docker イメージタグを上書きする可能性があります。この場合、そのコンテナは、Deployment の一部として自動的に pull されてデプロイされます。
こうした懸念にシステム オペレーターが対処できるように、Google Cloud には Binary Authorization と呼ばれる機能が用意されています。Binary Authorization は Google Cloud のマネージド サービスで、GKE と緊密に連携してデプロイ時のセキュリティ管理を強化し、信頼されたコンテナ イメージのみがデプロイされるようにします。Binary Authorization を使用すると、コンテナ レジストリを許可リストに登録したり、信頼できる機関によるイメージへの署名を必須にしたり、それらのポリシーを一元的に適用したりできます。このポリシーを適用することで、承認されたイメージまたは適切であると認められたイメージのみがビルドとリリースのプロセスに組み込まれるため、コンテナの環境をより厳密に管理できます。
このラボでは、Binary Authorization 機能が有効な Kubernetes Engine クラスタをデプロイして、承認済みのコンテナ レジストリを許可リストに登録する方法や、署名付きのコンテナを作成して実行するプロセスについて説明します。
このラボは、GKE Binary Authorization に関する理解を深めていただくために GKE Helmsman のエンジニアによって作成されました。Google Cloud はアセットへの協力を歓迎しています。
アーキテクチャ
Binary Authorization API と Container Analysis API は、オープンソース プロジェクトの Grafeas と Kritis に基づいています。
- Grafeas は、コンテナ イメージ、仮想マシン(VM)イメージ、JAR ファイル、スクリプトなどのソフトウェア リソースに関するメタデータを管理するための API 仕様を定義しています。Grafeas を使用すると、プロジェクトのコンポーネントに関する情報を定義したり集約したりできます。
- Kritis は、一元的に管理されているポリシーに準拠していないアーティファクト(コンテナ イメージ)のデプロイを防止するための API を定義しています。必要な証明書があるかどうかを確認することもできます。
たとえば次のような、シンプルなコンテナ デプロイ パイプラインがあったとします。
この場合、コンテナは少なくとも次の 4 つのステップを通過します。
- コンテナを作成するためのソースコードがソース管理に保存されます。
- ソース管理に変更が commit されると、コンテナがビルドされてテストされます。
- ビルドとテストのステップが完了すると、コンテナ イメージのアーティファクトが中央のコンテナ レジストリに配置されて、デプロイできるようになります。
- そのコンテナ バージョンのデプロイのリクエストが Kubernetes API に送信されると、コンテナ ランタイムがそのコンテナ イメージをコンテナ レジストリから pull して Pod として実行します。
コンテナ ビルド パイプラインでは、各ステップが正常に完了したことを示す(「証明」する)追加のプロセスを挿入することが可能です。たとえば、単体テスト、ソース管理の分析の確認、ライセンスの確認、脆弱性分析などが実行されたことを確認できます。各ステップに、そのステップが完了したことを示す署名を行う権限、すなわち「証明書の認証局」としての役割を割り当てることもできます。「証明書の認証局」とは、正しい PGP 鍵とその「証明書」を Container Analysis API に登録する権限を持つ、人物またはシステムです。
ステップごとに異なる PGP 鍵を使用することで、各証明ステップをそれぞれ異なる人物、システム、またはパイプラインのビルドステップが実行できるようになります。(a) 各 PGP 鍵は、Container Analysis API に保存されている「証明書のメモ」に関連付けられています。ビルドステップによってイメージへの「署名」が行われると、そのイメージに関する JSON メタデータのスニペットに PGP による署名が行われて、その署名付きのスニペットが Container Analysis API に「メモのオカレンス」として送信されます。
(b) コンテナ イメージがビルドされて必要な証明書が一元的に保存されると、ポリシー決定プロセスの一部として証明書のクエリを実行できるようになります。この場合、Kubernetes アドミッション コントローラが Pod の create
または update
の API リクエストを受け取ると次の処理が行われます。
- ポリシー決定のための Webhook が Binary Authorization API に送信されます。
- Binary Authorization ポリシーが参照されます。
- 必要に応じて Container Analysis API のクエリも行われ、必要な証明書のオカレンスがあるかどうかが確認されます。
- コンテナ イメージがポリシーに準拠している場合は実行が許可されます。
- コンテナ イメージがポリシーの要件を満たしていない場合は API クライアントにエラーが返されます。エラーには、実行が阻止された理由を説明するメッセージが含まれています。
設定
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
- ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。 -
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}} [ラボの詳細] パネルでも [ユーザー名] を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}} [ラボの詳細] パネルでも [パスワード] を確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。 -
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
- Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン をクリックします。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
-
[承認] をクリックします。
-
出力は次のようになります。
出力:
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
出力:
出力例:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
タスク 1. リソースのコピー
- 次のコマンドを実行して、このラボに必要なリソースをコピーします。
- このデモ用のディレクトリに移動します。
リージョンとゾーンを設定する
一部の Compute Engine リソースは、リージョン内やゾーン内に存在します。リージョンとは、リソースを実行できる特定の地理的位置です。1 つのリージョンには 1 つ以上のゾーンがあります。
次のコマンドを実行して、ラボのリージョンとゾーンを設定します(最適なリージョンとゾーンを使用できます)。
ファイルへのアクセス許可を更新する
- 次に、このラボに必要なリソースによる一部のファイルの読み取り、書き込み、実行を可能にします。
タスク 2. デフォルトのクラスタ バージョンの設定
-
create.sh
の GKE_VERSION 変数をdefaultClusterVersion
に変更します。
タスク 3. デプロイ手順
- クラスタをデプロイするには次のコマンドを実行します。テキスト
my-cluster-1
は、作成したいクラスタの名前に自由に置き換えてかまいません。
この create
スクリプトが完了すると、次のようなメッセージが出力されます。
このスクリプトによって行われる処理は次のとおりです。
- プロジェクトで必要な API を有効にします。具体的には、
container
、containerregistry
、containeranalysis
、binaryauthorization
が有効になります。 - デフォルトのゾーン、VPC、ネットワークを使用して新しい Kubernetes Engine クラスタを作成します。
- クラスタの認証情報を取得して
kubectl
を使用できるようにします。
警告は無視してかまいません。
タスク 4. 検証
- 次のスクリプトを使用して、デモが正しくデプロイされていることを確認します。
このスクリプトが失敗すると次のような出力が返されます。
および / または
このスクリプトが成功すると次のような出力が返されます。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。Binary Authorization の有効な Kubernetes クラスタが正常に作成されている場合は、評価スコアが表示されます。
タスク 5. Binary Authorization の使用
Binary Authorization ポリシーを管理する
Binary Authorization のポリシー構成 UI にアクセスするには、次の手順に沿って操作します。
- Google Cloud コンソールで、[セキュリティ] > [Binary Authorization] に移動します。
- [ポリシーの編集] をクリックします。
gcloud
で Binary Authorization のポリシー構成にアクセスする手順は次のとおりです。
gcloud beta container binauthz policy export > policy.yaml
を実行します。policy.yaml
を必要に応じて編集します。gcloud beta container binauthz policy import policy.yaml
を実行します。これから編集するポリシーは「デフォルト」のポリシーです。デフォルトのポリシーは、クラスタ固有のポリシーを構成しない限り、Google Cloud プロジェクトのすべての GKE クラスタに適用されます。
おすすめの方法は、クラスタごとに固有のポリシーを作成してオペレーションが成功するように構成(必要に応じてレジストリを許可リストに登録するなど)し、デフォルトのプロジェクト レベルのポリシーを、すべてのイメージを禁止するように設定することです。その場合、このプロジェクトで新しいクラスタを作成するたびにそのクラスタに固有のポリシーを構成する必要があります。
- [ポリシーを編集] をクリックすると、次の画面が表示されます。[カスタム除外ルール] の横にある下矢印をクリックしてカスタム除外ルールを表示します。
デフォルトのポリシールールは [すべてのイメージを許可
] です。この場合、クラスタで Binary Authorization が有効になっていない場合と同様に動作します。
デフォルトのルールを [すべてのイメージを禁止
] に変更すると、除外されたレジストリ イメージのパスに一致しないイメージがブロックされます。[次のすべての認証によって承認されたイメージのみを許可
] に変更すると、必要な証明書がないイメージがブロックされます。
次に、このポリシーを次のように編集します。
-
[デフォルトのルール] を [
すべてのイメージを禁止
] に変更します。 -
[GKE と Anthos のデプロイ向けの追加設定] で、[固有のルールを作成] をクリックします。
-
プルダウンから [GKE クラスタ] を選択し、[変更] をクリックします。
-
[GKE クラスタ固有のルール] で、[固有のルールを追加] をクリックします。
-
[GKE クラスタ固有のルールの追加] フィールドに、使用しているロケーションとクラスタ名を
location.clustername
という形式で入力します(たとえば、ゾーン名がでクラスタ名が my-cluster-1
の場合は.my-cluster-1)。 -
クラスタのデフォルト ルールとして [
すべてのイメージを許可
] を選択します。 -
[追加] をクリックします。
- [ポリシーを保存] をクリックします。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。Binary Authorization ポリシーが正常に更新されて、プロジェクト レベルの「すべてのイメージを禁止」ルールとクラスタレベルの「すべてのイメージを許可」ルールが追加されている場合は、評価スコアが表示されます。
タスク 6. 限定公開の GCR イメージを作成する
-
実際の構成をシミュレートするために、限定公開の Google Container Registry(GCR)コンテナ イメージをプロジェクトで作成します。
-
nginx
プロジェクトからnginx
コンテナを pull して、変更しないまま現在の GCR リポジトリに push します。 -
Cloud Shell で、
latest
のnginx
コンテナを pull します。
- プロジェクトに対して Docker を認証します。
Do you want to continue (Y/n)?
というプロンプトが表示されたら、「Y
」と入力します。
- PROJECT_ID シェル変数を設定します。
- pull したイメージにタグを付けて現在のプロジェクトの GCR に push します。
- 現在の GCR リポジトリにある「限定公開」の nginx イメージを表示します。
タスク 7. すべてのイメージを禁止する
ポリシーによるイメージの禁止が想定どおりに機能することを実証するために、まず、クラスタ固有の allow
ルールが適用されており、すべてのコンテナの実行が許可されることを確認します。
- そのためには、
nginx
Pod を 1 つ起動します。
「pod/nginx created
」というメッセージが表示されます。
- Pod を一覧表示します。
出力:
失敗した場合は、クラスタ固有のルールのリージョンと名前を再確認してやり直します。
- 完了したら、この Pod を削除します。
- 次に、望ましくないイメージが Binary Authorization ポリシーによってブロックされてクラスタ内で実行されないことを確認します。
[Binary Authorization] ページで [ポリシーを編集] をクリックします。
-
GKE クラスタ固有のルールの右にあるその他アイコン(3 つの点)、[編集] の順にクリックします。
-
次に、[
すべてのイメージを禁止
] を選択し、[送信] をクリックします。
ポリシーが次のようになります。
- 最後に、[ポリシーを保存] をクリックしてこれらの変更を適用します。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。Binary Authorization ポリシーが正常に更新されて、クラスタレベルのルールが [すべてのイメージを禁止] に変更されている場合は、評価スコアが表示されます。
- 次に、先ほどと同じコマンドを実行して静的な
nginx
Pod を作成します。
今回は、ポリシーが原因でこの Pod を実行できなかったという内容のメッセージが API サーバーから返されます。
Binary Authorization ポリシーによってイメージがブロックされた日時を確認するには、オペレーション スイートの GKE 監査ログに移動して、このアクティビティに関連するエラー メッセージでフィルタします。
- Google Cloud コンソールで、ナビゲーション メニュー > [ロギング] > [ログ エクスプローラ] に移動します。
- クエリビルダー ボックスに次のコードを入力します。
- [クエリを実行] をクリックします。
-
nginx
Pod の実行のブロックに対応するエラーが表示されます。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。クラスタ アドミッション ルールの確認が正常に行われた場合は、評価スコアが表示されます。
タスク 8. 許可リストに登録されているコンテナ レジストリ以外のイメージを禁止する
-
この nginx コンテナのみに実行を許可したい場合はどうすればよいでしょうか。最も簡単な方法は、このコンテナのソースであるレジストリを許可リストに登録することです。
-
次のコマンドの出力をイメージパスとして使用します。
-
イメージパスの出力をバッファにコピーします。
-
ナビゲーション メニュー > [セキュリティ] > [Binary Authorization] に移動します。
-
Binary Authorization ポリシーを編集します。[カスタム除外ルール] イメージパスが表示されてから、[イメージ パターンを追加] をクリックします。
-
先ほどコピーしたイメージパスを貼り付けて、[完了] をクリックします。次の図は、パスの例を示しています。
- [ポリシーを保存] をクリックして、次のコマンドを実行します。
今度はこの Pod を起動できるはずです。これにより、レジストリの許可リストが正常に機能していることがわかります。
- クリーンアップと次のステップの準備のために次のコマンドを実行します。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。Binary Authorization ポリシーが正常に更新されて、コンテナ レジストリが許可リストに登録されている場合は、評価スコアが表示されます。
タスク 9. 証明書を必須にする
コンテナ イメージ レジストリを許可リストに登録することは、望ましくないコンテナ イメージがクラスタ内で実行されるのを防ぐための最初のステップとして効果的ですが、コンテナが正しくビルドされていることを確認するためにできることは他にもあります。
たとえば、特定のコンテナ イメージのデプロイが承認されているかどうかを暗号によって確認できます。これには「証明書の認証局」を使用します。証明書の認証局は、特定のステップが完了したことを証明するために、コンテナ イメージの SHA256 ハッシュを記述するメタデータのスニペットに PGP 鍵で署名して、それを一元的なメタデータ リポジトリ(Container Analysis API)に送信します。
その後、コンテナ イメージの実行が許可されているかどうかをアドミッション コントローラが確認します。これは、イメージに証明書が存在することを要件とする Binary Authorization ポリシーを調べることによって行われます。このとき、完了したステップを示す署名付きメタデータ スニペットが Container Analysis API に保持されているかどうかが確認されます。この情報により、アドミッション コントローラは、その Pod の実行を許可すべきかどうかを判断します。
次に、コンテナ イメージに手動の証明書を適用します。人間の「証明書の認証局」として、コンテナ イメージへの署名に必要なすべてのステップを実行し、クラスタ内で実行されるイメージに証明書が存在することを要求するポリシーを作成して、署名したイメージが Pod で正常に実行されることを確認します。
必要な変数を設定する
- 認証者の詳細(名前とメールアドレス)を設定します。
- 証明書の認証局の Container Analysis メモの ID と説明を設定します。
- ペイロードとリクエストを作成するためのファイルの名前を設定します。
証明書のメモを作成する
まず、証明書の認証局を Container Analysis メモとして Container Analysis API に登録します。そのためには、ATTESTATION
メモを作成して Container Analysis API に送信します。
-
ATTESTATION
メモのペイロードを作成します。
-
ATTESTATION
メモを Container Analysis API に送信します。
作成されたメモは、前のコマンドの出力に表示されますが、次のコマンドでも表示できます。
PGP 署名鍵を作成する
この証明書の認証局はイメージ メタデータへの暗号署名に PGP 鍵を使用するため、新しい PGP 鍵を作成して公開 PGP 鍵をエクスポートします。
- 別のシェル変数を設定します。
- PGP 鍵を作成します。
-
Enter キーを押して空のパスフレーズを使用し、表示される警告を承諾します。
-
公開 PGP 鍵を抽出します。
Binary Authorization API で認証者を登録する
次に、Binary Authorization API で「認証者」を作成して公開 PGP 鍵を追加します。
- Binary Authorization API で認証者を作成します。
- 認証者に PGP 鍵を追加します。
- 新たに作成された認証者を表示します。
出力は次のようになります。
タスク 10. コンテナ イメージに「署名」する
これまでのステップと次以降のステップを実行するのは 1 回だけですが、このステップは新しいコンテナ イメージを作成するたびに実行する必要があります。
nginx:latest
の nginx
イメージは、すでにビルドされて使用できる状態になっています。このイメージに対して、独自のプロセスによってビルドされた独自のイメージの場合と同様に、手動の証明書を適用します。これにより、イメージをビルドする手間を省くことができます。
- シェル変数をいくつか設定します。
- PGP フィンガープリントを取得します。
- このコンテナ イメージの SHA256 ダイジェストを取得します。
- JSON 形式の署名ペイロードを作成します。
- 生成された署名ペイロードを表示します。
- PGP 鍵を使用してペイロードに「署名」します。
- 生成された署名(PGP メッセージ)を表示します。
- 証明書を作成します。
- 新たに作成された証明書を表示します。
タスク 11. 証明書の必須化を有効にしてイメージを実行する
次に、Binary Authorization ポリシーを変更して、許可リストのパターンに一致しないすべてのイメージで証明書の存在を必須にします。
- 証明書を要求するようにポリシーを変更するには、まず、次のコマンドを実行して、証明書の認証局のフルパスと名前をコピーします。
- 次に、Binary Authorization ポリシーを編集して、GKE クラスタ固有のルールを
編集
します。
現在のクラスタ名の横にあるその他アイコン(3 つの点)をクリックして、[編集] を選択します。
- ポップアップ ウィンドウの [
すべてのイメージを禁止
] の代わりに、[証明書を要求: 次の認証者によって検証されたイメージのみを許可します
] を選択します。
- 次に、[
認証者の追加
] をクリックし、[認証者リソース ID により追加
] をクリックします。コピー / 貼り付けバッファの内容をprojects/${PROJECT_ID}/attestors/${ATTESTOR}
という形式で入力し、[認証者の追加]、[送信]、[ポリシーを保存] の順にクリックします。
デフォルトのポリシーは [すべてのイメージを禁止
] のままですが、クラスタ固有のルールでは証明書が要求されています。
- 次に、前のステップで署名したイメージの最新の SHA256 ダイジェストを取得します。
- Binary Authorization ポリシーを更新してから 30 秒以上経ったら Pod を実行して、正常に実行されることを確認します。
お疲れさまでした。コンテナ イメージに手動の証明書を適用し、GKE クラスタ内でそのイメージに対してポリシーを適用できました。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。Binary Authorization ポリシーが正常に更新されて、認証者によって承認されているイメージのみを許可するようにクラスタ固有のルールが変更されている場合は、評価スコアが表示されます。
タスク 12. 緊急事態に対処する
ユーザー側から見ると、Binary Authorization ポリシーがイメージを誤ってブロックする可能性や、アドミッション コントローラ Webhook の正常な機能を妨げるその他の問題が発生する可能性があります。
こうした「緊急事態」に対処するために、「ブレークグラス」機能が用意されています。これにより、特殊なアノテーションを使用して、ポリシーの適用をスキップして Pod を実行するようにアドミッション コントローラに通知できます。
ただし、そのような場合、アクティビティの発生から数秒で対応を開始できます。ログは Stackdriver で確認できます。
- 「ブレークグラス」アノテーションを使用して未署名の
nginx
コンテナを実行するには、次のコマンドを使用します。
-
Google Cloud コンソールで、ナビゲーション メニュー > [ロギング] > [ログ エクスプローラ] ページに移動します。
-
クエリビルダー ボックスに次のコードを入力し、[クエリを実行] をクリックします。
resource.type="k8s_cluster" protoPayload.request.metadata.annotations."alpha.image-policy.k8s.io/break-glass"="true" -
前述のアノテーションによって Pod が許可された場合は、イベントが表示されます。このフィルタから
シンク
を作成して、このフィルタに一致するログを外部の宛先に送信できます。
タスク 13. 破棄
このラボで作成したすべてのリソースは Qwiklabs によって削除されますが、実際の環境をクリーンアップする方法を学習しておきましょう。
- 次のスクリプトで Kubernetes Engine クラスタを破棄します。
このラボの始めに独自のクラスタ名を指定した場合はその名前を使用してください。この例で使用されている名前は my-cluster-1
です。
出力の最後の行が次のようになります。
gcloud container clusters list
コマンドを使用します。クラスタが削除されるまで待ちます。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。クラスタが正常に削除された場合は、評価スコアが表示されます。
以下のコマンドで残りのリソースを削除します。
- GCR に push したコンテナ イメージを削除します。
-
[
Do you want to continue (Y/n)
] というメッセージが表示されたら、「Y」
と入力します。 -
認証者を削除します。
- Container Analysis メモを削除します。
独自の環境でのトラブルシューティング
- Binary Authorization ポリシーを更新してすぐに新しい Pod やコンテナを起動しようとすると、ポリシーがまだ有効になっていないことがあります。ポリシーの変更が有効になるまでには 30 秒以上かかる場合があります。再試行するには、
kubectl delete <podname>
を使用して Pod を削除してから Pod 作成コマンドを再送信します。 - クラスタのステータスを確認するには
gcloud container clusters list
コマンドを実行します。 - 追加機能を有効にした場合は(
--enable-network-policy
、--accelerator
、--enable-tpu
、--enable-metadata-concealment
など)、Binary Authorization ポリシーの許可リストにレジストリをさらに追加しないと Pod を実行できない可能性があります。kubectl describe pod <podname>
を使用してイメージ仕様でレジストリパスを確認し、gcr.io/example-registry/*
という形式で許可リストに追加してポリシーを保存します。 - 割り当てに関するエラーが表示された場合は、プロジェクトの割り当てを増やしてください。リソースの割り当ての詳細については、リソースの割り当てに関するドキュメントをご覧ください。
関連資料
- Google Cloud の割り当て
- Google Cloud への登録
- Google Cloud Shell
- GKE の Binary Authorization
- Container Analysis のメモ
- Kubernetes アドミッション コントローラ
- リリース ステージ
お疲れさまでした
クエストを完了する
このセルフペース ラボは、Qwiklabs の「Google Kubernetes Engine Best Practices: Security」クエストの一部です。クエストとは学習プログラムを構成する一連のラボのことで、完了すると成果が認められてバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。このクエストに登録すれば、すぐにクレジットを受け取ることができます受講可能なすべてのクエストについては、Google Cloud Skills Boost カタログをご覧ください。
次のラボを受講する
「Google Kubernetes Engine でのネットワーク ポリシーの使用方法」に進んでクエストを続けるか、以下のおすすめをご確認ください。
マニュアルの最終更新日: 2023 年 10 月 11 日
ラボの最終テスト日: 2023 年 10 月 11 日
Copyright 2024 Google LLC. 本ソフトウェアは「現状有姿」で提供されており、いかなる使用および目的に関しても保証および表明は伴いません。本ソフトウェアのご利用には、Google との契約が適用されます。