Cloud Service
Binary Authorization
署名による検証で信頼できるコンテナイメージだけを GKE/Cloud Run へデプロイ許可するソフトウェアサプライチェーン保護のマネージドサービス。
- 1.ポリシーで許可した署名済みコンテナイメージだけをデプロイさせる関門。
- 2.証明者と構成証明でビルドや検査の通過を保証し、デプロイ時に強制する。
- 3.まず監査のみで運用を観測し、段階的に強制ブロックへ移行するのが定石。
解決する課題
「どこの誰が作ったか分からないコンテナイメージ」が本番に流れ込むのを防ぎたい、というのが核心です。コンテナは中身が見えにくく、レジストリに push されたものは何でもデプロイできてしまうため、改ざんや未検査のイメージが本番へ届くリスクがあります。
- 検査やビルドのパイプラインを通っていない素性不明のイメージのデプロイを止めたい
- 開発者が手元でビルドした野良イメージが本番クラスタに入るのを防ぎたい
- 「特定の CI でビルドされ、脆弱性スキャンに合格したものだけ」というデプロイの前提条件を技術的に強制したい
- サプライチェーン攻撃に備え、デプロイ時点(admission)での検証という最後の関門を設けたい
主要概念と用語
- ポリシー(Policy): どのイメージのデプロイを許可するかを定義するプロジェクト単位のルール。デフォルトルールとクラスタ固有ルールを持つ
- 証明者(Attestor): 構成証明(後述)の署名を検証する主体。検証に使う公開鍵を保持し、ポリシーから参照される
- 構成証明(Attestation): 「このイメージはこの工程を通過した」という事実への署名付きの証明書。イメージのダイジェスト(digest)に対して作成される
- 適用モード(Enforcement Mode): 違反時にデプロイをブロックするか、**監査ログのみ記録して通過させる(dry-run)**かの設定
- 継続的検証(Continuous Validation, CV): デプロイ後も稼働中のイメージがポリシーに適合し続けているかを定期的に検査し、逸脱をログに記録する仕組み
- イメージダイジェスト:
sha256:...形式の不変な識別子。可変なタグ(latest等)ではなくダイジェストで対象を特定する - Cloud KMS との連携: 構成証明の署名鍵を Cloud KMS で管理し、署名・検証に利用できる
仕様・制限・クォータ
- デプロイ時の関門(Admission Controller)として動作: イメージの実行可否を、Pod 起動やリビジョン作成の直前に判定する
- 対応プラットフォーム: GKE、GKE Enterprise、Cloud Run、および一部のサーバーレスランタイムでサポートされる。判定対象は基本的にコンテナイメージ
- ダイジェスト指定が前提: 構成証明はイメージダイジェストに対して結びつく。タグ参照のみのデプロイは検証が成立しにくいため、ダイジェスト固定が推奨される
- ホワイトリスト(許可リスト): 特定レジストリパスのイメージをポリシー検証なしで許可する例外指定が可能。Google 提供のシステムイメージは既定で除外扱いとなる
- 適用モードは2系統: 違反をブロックする強制と、監査ログのみのドライランを使い分けられる
- クォータ: API リクエストや構成証明の作成・検証にはレート上限があり、最新の具体値は公式ドキュメントで確認する(ここでは定性的に述べるに留める)
内部の仕組み
Binary Authorization は、コンテナのデプロイ要求が来た瞬間に割り込むアドミッションコントローラとして機能します。流れはおおむね次の通りです。
- まず CI/CD パイプラインで、ビルドや脆弱性スキャンを通過したイメージのダイジェストに対して**構成証明(署名)**を作成する
- デプロイ時、Binary Authorization は対象イメージのダイジェストに紐づく構成証明を集め、ポリシーが要求する証明者の公開鍵で署名を検証する
- 必要な証明者の署名がすべて揃っていればデプロイを許可し、欠けていれば適用モードに従ってブロック(強制)または通過+ログ記録(ドライラン)する
- デプロイ後も**継続的検証(CV)**が稼働中イメージを定期的に再評価し、ポリシー逸脱を検出して監査ログへ出力する
署名鍵は Cloud KMS と連携でき、署名する側(CI)と検証する側(証明者)で鍵の公開・秘密を分離します。これにより「誰が構成証明を作れるか」を権限として統制できます。
タグは後から別のイメージに付け替え可能なため、myapp:latest のような可変参照は検証の前提を崩します。構成証明は不変なダイジェスト(sha256)に対して作成し、デプロイマニフェストもダイジェストで固定するのが安全です。
設計パターン / ベストプラクティス
- まずドライラン(監査のみ)で開始し、既存ワークロードがどれだけ違反するかをログで観測してから強制に切り替える
- CI/CD に構成証明の作成を組み込む。ビルド成功・脆弱性スキャン合格などの工程ごとに別々の証明者を用意し、複数署名を要求する
- 証明者の署名鍵は Cloud KMS で管理し、署名権限を CI のサービスアカウントだけに最小権限で付与する
- 例外は許可リストで明示的に最小化し、ブレークグラス(緊急時の一時迂回)は監査ログを必ず残す運用にする
- デプロイは常にダイジェスト固定とし、IaC やマニフェストにタグ参照を残さない
- 組織全体へ広げる場合は組織ポリシーと組み合わせ、プロジェクトごとの設定漏れを防ぐ
運用・監視
- 違反やブレークグラスの利用は Cloud Audit Logs に記録される。強制前にドライランのログを精査し、誤検知や正規ワークロードの取りこぼしを洗い出す
- 継続的検証(CV)のログを監視し、デプロイ後にポリシーから逸脱したイメージ(鍵失効・証明者削除など)を検知する
- デプロイがブロックされた場合は、対象イメージのダイジェストに対する構成証明の有無と、ポリシーが要求する証明者の鍵が有効かを確認する
- 証明者の鍵をローテーションする際は、旧鍵で作られた既存構成証明の検証可否を考慮し、移行期間を設ける
- ブレークグラスは恒常運用にせず、利用のたびにアラートを上げて事後レビューする
コスト
Binary Authorization 自体の利用は、付随する各サービスの費用が中心です。構成証明の保管・検証に使う Artifact Registry / Container Analysis、署名鍵を置く Cloud KMS、ログを保持する Cloud Logging などが主なコスト要素になります。
| コスト要素 | 発生する場面 | 最適化のヒント |
|---|---|---|
| 署名鍵(Cloud KMS) | 構成証明の署名・検証に使う鍵の保持と操作 | 用途ごとに鍵を分けつつ、過剰に細分化しない |
| 脆弱性スキャン | Container Analysis での自動・オンデマンド検査 | 対象を本番系イメージに絞り、不要な再スキャンを避ける |
| 監査・CV ログ | 違反や継続的検証の結果を Cloud Logging へ保存 | 保持期間とログ量を見直し、長期保管は安価なバケットへ |
セキュリティ
- 署名鍵の秘密鍵を厳格に保護する。Cloud KMS に置き、署名できるのは CI のサービスアカウントだけ、という最小権限を徹底する
- 証明者の公開鍵が正しいものかを管理し、鍵のすり替えで偽の構成証明が通らないようにする
- ブレークグラスは抜け道になり得るため、利用を例外として扱い、必ずアラートと事後監査を伴わせる
- ポリシーの管理権限(誰がポリシーや証明者を変更できるか)を IAM で限定し、関門そのものの無効化を防ぐ
- 構成証明の作成を CI に閉じ込め、開発者が手元から任意に署名できない構成にする
Binary Authorization は「未検査イメージを止める」関門ですが、構成証明を作る工程が甘ければザルになります。脆弱性スキャンの合格基準、署名鍵の管理、証明者を変更できる権限の三点を固めて初めて意味を持ちます。
Well-Architected の観点
- セキュリティ: ソフトウェアサプライチェーンの「最後の関門」として、デプロイ時にイメージの素性を強制検証する。最小権限の署名鍵管理と監査ログが要
- 信頼の起点をビルドパイプラインに置き、人手による野良デプロイを排除することで、本番環境の予測可能性と統制を高める
- 例外(許可リスト・ブレークグラス)を最小化し可視化することで、統制の抜け穴を作らない
試験で問われるポイント
- 信頼できる(署名済みの)コンテナイメージだけをデプロイ許可するのが中心目的。デプロイ時のアドミッション制御である点
- **構成証明(attestation)と証明者(attestor)**の役割分担。構成証明はイメージダイジェストへの署名、証明者は検証する主体
- **適用モードはブロック(強制)とドライラン(監査のみ)**があり、まずドライランで観測してから強制に移すのが定石
- 検証は可変なタグではなくダイジェストに対して行う点
- AWS で近い役割を担うのは ECR のイメージ署名/検証(AWS Signer) であり、目的が「信頼できるイメージのみ実行」である対応関係
- **継続的検証(CV)**でデプロイ後の逸脱も検出できること
関連サービス・比較
Binary Authorization は単体ではなく、ビルド・スキャン・署名・実行の各サービスと連携して機能します。AWS では単一のサービスではなく、ECR のイメージ署名と AWS Signer の組み合わせが近い役割を担います。
| 観点 | Google Cloud(Binary Authorization 周辺) | AWS の相当機能 |
|---|---|---|
| 中心の役割 | 署名検証で信頼できるイメージのみデプロイ許可 | ECR のイメージ署名と検証で信頼を担保 |
| 署名・証明 | 構成証明(attestation)と証明者 | AWS Signer による署名と検証ポリシー |
| 脆弱性スキャン | Container Analysis | Amazon Inspector / ECR スキャン |
| デプロイ先 | GKE / Cloud Run | EKS / ECS / Fargate |
| 鍵管理 | Cloud KMS | AWS KMS |
| 監査 | Cloud Audit Logs | CloudTrail |
ハンズオン / CLI例
# 現在のポリシーをファイルに書き出す
gcloud container binauthz policy export > policy.yaml
# 編集したポリシーを適用する(YAML内で適用モードや証明者を指定)
gcloud container binauthz policy import policy.yaml
# 証明者を作成する(Container Analysis のノートに紐づける)
gcloud container binauthz attestors create build-attestor \
--attestation-authority-note build-note \
--attestation-authority-note-project PROJECT_ID
# 証明者に Cloud KMS の公開鍵を登録して検証に使う
gcloud container binauthz attestors public-keys add \
--attestor build-attestor \
--keyversion 1 \
--keyversion-key-name build-signing-key \
--keyversion-keyring binauthz-keyring \
--keyversion-location asia-northeast1
# イメージのダイジェストに対して構成証明を作成(CI から実行する想定)
gcloud container binauthz attestations sign-and-create \
--artifact-url asia-northeast1-docker.pkg.dev/PROJECT_ID/repo/myapp@sha256:DIGEST \
--attestor build-attestor \
--keyversion 1 \
--keyversion-key-name build-signing-key \
--keyversion-keyring binauthz-keyring \
--keyversion-location asia-northeast1
Google Cloud Service
Binary Authorizationを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
セキュリティ・ID
比較で見る軸
クラウド: Google Cloud / カテゴリ: セキュリティ・ID / 難易度: intermediate
導入後に効く点
証明者と構成証明でビルドや検査の通過を保証し、デプロイ時に強制する。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Google Cloud
- カテゴリ
- セキュリティ・ID
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- security
判断チェックリスト
- 自社の用途が「セキュリティ・ID / security」に近いか確認する。
- 強みである「ポリシーで許可した署名済みコンテナイメージだけをデプロイさせる関門。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。