概要

このページでは、Binary Authorization の概要について説明します。

はじめに

Binary Authorization は、コンテナベースのアプリケーションをデプロイする際にソフトウェア サプライ チェーンのセキュリティを提供する Google Cloud Platform(GCP)のサービスです。Binary Authorization は Google Kubernetes Engine(GKE)を拡張し、デプロイ時にセキュリティ ポリシーを適用します。Binary Authorization は、Container Registry または別のコンテナ イメージ レジストリのコンテナ イメージに対して機能します。

Binary Authorization を使用すると、ソフトウェア サプライ チェーンの各コンポーネントを自動的にチェックし、アプリケーションを本番環境にデプロイする前にソフトウェアの品質と整合性を確認できます。

Binary Authorization は、以下を含むデプロイ アーキテクチャの一部です。

  • Container Registry。または、デプロイするコンテナ イメージを格納する別のレジストリ。
  • GKE。クラスタ内のイメージを実行します。
  • Container Analysis。認証プロセスで使用される信頼できるメタデータを格納します。
  • Binary Authorization。構成したポリシーに基づいて GKE へのイメージのデプロイを許可またはブロックします。

Binary Authorization は、Grafeas オープンソース プロジェクトの一部である Kritis 仕様に基づいています。

背景

GKE を使用すると、マイクロサービス アーキテクチャをベースとするシステムなど、高度に分離されたシステムを開発し、継続的インテグレーション(CI)と継続的デプロイ(CD)によりライフサイクルの短いプロセスを実現できます。このような環境では、ステージングとテスト中にソフトウェアがデプロイ クラスタ間を移動することが多く、すべてのソフトウェアを社内のベスト プラクティスや標準に従って構築、テスト、リリースすることが困難になります。

Binary Authorization は、このような環境で間違ったソフトウェア、欠陥のあるソフトウェア、不正なソフトウェアをデプロイするリスクを軽減することを目的としています。このサービスを使用すると、コンテナ イメージが各デプロイ ステージに入る前に完了する必要がある内部プロセスを明示的に指定し、承認済みの担当者がプロセスを完了していることを確認できます。

Binary Authorization では、ソフトウェアの整合性と品質に関する内部プロセスやベスト プラクティスを規定していませんが、必要なチェックに合格していないコンテナ イメージのデプロイを制限することで、独自のプラクティスを適用できます。

一般的なユースケース

Binary Authorization の最も一般的なユースケースは証明書に関するものです。コンテナ イメージが作成されると、証明書を作成するために、その固有のダイジェストが署名者によってデジタル署名されます。

デプロイ時に、Binary Authorization 実施者が認証者を使用して証明書の検証を行います。これにより、確認済みの証明書を含むコンテナ イメージのみをデプロイできます。

証明書に関連するユースケースとしては、次のものがあります。

  • ビルド検証。Binary Authorization は、コンテナ イメージが特定のビルドシステムまたは継続的インテグレーション(CI)パイプラインによってビルドされたことを検証します。
  • 脆弱性スキャン。CI によってビルドされたコンテナ イメージも Container Analysis によってスキャンされ、識別された脆弱性が CI パイプラインの前または証明書が作成される前に解決されたことが検証されます。
  • 手動チェック。担当者(QA など)が証明書を手動で作成します。

証明書のエンドツーエンドのチュートリアルについては、コンソールで使ってみるをご覧ください。

ライフサイクル

コンテナ イメージのデプロイ ライフサイクルは次のステージで構成されます。ステージの完了が次のステージに進むための前提条件となります。

  • ビルドと単体テスト
  • ユーザーが影響を受けない開発環境へのデプロイ
  • 社内ユーザーのみが影響を受ける QA 環境へのデプロイ
  • 一部の外部ユーザーのみが影響を受けるカナリア環境へのデプロイ
  • 本番環境へのデプロイ

ビルドとテストの後は、各ステージに独自のデプロイ環境(ここでは GKE クラスタ)があり、イメージは次のステージに進む前に独自の条件を満たす必要があります。Binary Authorization では、あるステージから別のステージに進むイメージ条件を定義し、その条件を適用する手段を提供します。

機能

Binary Authorization は次の機能を提供します。

  • ポリシーモデル。コンテナ イメージのデプロイを制限するための条件を記述します。
  • 証明書モデル。デプロイ前に環境内で必要なプロセスが完了していることを証明または検証する信頼できる機関を定義します。
  • 誤ったイメージ、不正なイメージ、未承認のイメージがデプロイ環境に入るのを防ぐ施行機能。

ポリシーモデル

Binary Authorization はポリシーモデルを実装します。ポリシーは、GKE クラスタへのコンテナ イメージのデプロイを管理する一連のルールです。ポリシー内のルールには、イメージをデプロイする前に満たす必要がある基準を指定します。一般的なポリシーでは、コンテナ イメージをデプロイする前に検証済みのデジタル署名を要求します。

このタイプのポリシーでは、署名者という信頼できる期間を指定します。署名所は、必要なプロセスが完了し、イメージをデプロイの次のステージに進める準備が整っていることを証明する必要があります。署名者は、人の場合もあれば、ビルド / テストシステムや継続的デプロイのパイプラインのようなマシンプロセスの場合もあります。

開発ライフサイクルでは、署名者はグローバルに一意のコンテナ イメージ記述子にデジタル署名し、証明書という証明ステートメントを作成します。その後のデプロイ フェーズで、Binary Authorization は認証者を使用して、パイプラインで必要なプロセスが完了したことを示す証明書を検証します。

Binary Authorization ポリシーモデルとその他のコンセプトの詳細については、主なコンセプトをご覧ください。

設定

Binary Authorization を設定するには、まず、デプロイと認証のパイプラインに参加するプロジェクトに対してサービスを有効にする必要があります。サービスを有効にした状態で、必要に応じて GKE クラスタを作成します。

コンテナ イメージをデプロイできる条件を示すポリシーを定義します。ポリシーでデプロイ前に証明書が要求される場合は、関連するコンテナ イメージのデプロイを許可する前に証明書の検証を行う必要があります。

設定手順の詳細については、設定の概要をご覧ください。

認証

コンテナイ メージをデプロイする前に、所定の署名者が証明書を作成し、イメージをデプロイの次のステージに進める準備が整っていることを証明する必要があります。証明書は、コンテナ イメージのレジストリパスとダイジェストを含むレコードで、署名者の秘密暗号鍵を使用してデジタル署名されています。

認証の詳細については、証明書の作成をご覧ください。

適用

コンテナ イメージを GKE にデプロイすると、Binary Authorization がポリシーを確認し、デプロイの制御ルールを適用します。ルールで認証者が必要とされている場合、Binary Authorization は、すべての認証者がイメージの安全性を確認しているかどうか検証します。

イメージがポリシーに定義されている制約を満たしている場合、Binary Authorization はイメージのクラスタへのデプロイを許可します。そうでない場合は、デプロイをブロックし、イメージがポリシーを遵守していない理由を説明するメッセージを監査ログに書き込みます。

デプロイの詳細については、コンテナのデプロイをご覧ください。

VPC Service Controls による Binary Authorization の保護

VPC Service Controls を使用すると、Google が管理するサービスやリソースからのデータの不正コピーや転送のリスクを軽減できます。

Binary Authorization 関連リソースの保護の詳細については、VPC Service Controls による保護をご覧ください。