PCDE 合格対策
SECTION 2 ★最重要

セクション 2:
CI/CD パイプライン

PCDE で 最頻出(~25%)のセクション。Cloud Build → Artifact Registry → Cloud Deploy の GCP ネイティブパイプライン、Canary / Blue-Green / Rolling / Traffic Split / Feature Flags の戦略選定、Cloud KMS / Secret Manager / Parameter / Certificate Manager / Workload Identity Federation による設定とシークレット管理、Artifact Analysis / Binary Authorization / SLSA L1-L4 / Software Delivery Shield によるサプライチェーン保護まで体系的に押さえます。

★ 最重要セクション 📊 出題 ~25% 🔐 サプライチェーン保護 📘🔧🎯 全レベル対応
出題 ~25%★ 📘 基礎 🔧 応用 🎯 要点
🔑 TL;DR — このセクションの要約 CI = Cloud Build、保管 = Artifact Registry、CD = Cloud Deploy が GCP ネイティブ三種の神器。Cloud Deploy の階層は Delivery Pipeline → Target → Release → Rollout → Phase。デプロイ戦略は 即時切戻し=Blue/Green、段階的=Canary、デフォルト=Rolling、Cloud Run=Traffic Splitting、A/B=Feature Flags。シークレットは Secret Manager(機密)/ Parameter Manager(非機密)/ Certificate Manager(TLS)/ Cloud KMS(鍵)。サプライチェーンは Artifact Analysis(CVE)→ Binary Authorization(署名検証)→ Continuous Validation(継続検証)、これらを統合するのが Software Delivery ShieldSA キーは禁止、WIF 必須

🎯 学習目標

このセクションの達成度0 / 0









※ チェック状態はこのブラウザに保存されます。

🏗️ CI/CD パイプライン全体像(Google Cloud 版)

Developer git push Source Repository GitHub / GitLab / CSR trigger Cloud Build cloudbuild.yaml / Private Pool push Artifact Registry + Artifact Analysis (CVE / SBOM) release Cloud Deploy Delivery Pipeline → Target → Release → Rollout → Phase (canary 25%/50%/100%) predeploy / deploy / verify / postdeploy 🔐 サプライチェーン保護 • Cloud Build SLSA L3(自動 provenance) • Artifact Analysis(CVE / SBOM 自動) • Binary Authorization(attestor 検証) verify (Binary Auth) GKE Cloud Run Anthos / GKE Ent. Cloud Audit Logs(全フェーズ記録) Admin / Data Access / System Event / Policy Denied Workload Identity Federation(SA キー禁止) 外部 IdP(GitHub Actions / AWS / GitLab)→ GCP API

2.1 パイプライン設計(Designing pipelines)

CI / CD / CD の定義

用語正式名意味
CIContinuous Integrationコード変更を頻繁にマージし、自動テスト・ビルド
CDContinuous Delivery本番デプロイ可能な状態まで自動化(リリース判断は手動)
CDContinuous Deployment本番デプロイまで完全自動化

PCDE では一般に CI = Cloud Build、CD = Cloud Deploy という対応。

DORA / Four Keys(高パフォーマンス目安)

Deployment Frequency

デプロイ頻度。高パフォ目安: 1 日複数回

Lead Time for Changes

コミット → 本番。高パフォ目安: 1 時間未満

Change Failure Rate

変更失敗率。高パフォ目安: 0-15%

MTTR / Time to Restore

復旧時間。高パフォ目安: 1 時間未満

Cloud Build — cloudbuild.yaml の構造

steps: - name: 'node:20' id: 'install' entrypoint: 'npm' args: ['ci'] - name: 'node:20' id: 'test' entrypoint: 'npm' args: ['test'] waitFor: ['install'] - name: 'gcr.io/cloud-builders/docker' id: 'build' args: ['build', '-t', 'asia-northeast1-docker.pkg.dev/$PROJECT_ID/myrepo/myapp:$SHORT_SHA', '.'] waitFor: ['test'] - name: 'gcr.io/cloud-builders/docker' args: ['push', 'asia-northeast1-docker.pkg.dev/$PROJECT_ID/myrepo/myapp:$SHORT_SHA'] images: - 'asia-northeast1-docker.pkg.dev/$PROJECT_ID/myrepo/myapp:$SHORT_SHA' options: machineType: 'E2_HIGHCPU_8' logging: CLOUD_LOGGING_ONLY timeout: '1800s'

Cloud Build 主要フィールド

フィールド内容
steps[]ビルドステップ。各ステップは Docker コンテナとして実行
name使用するビルダーイメージ
waitFor依存ステップ ID(- で並列実行)
secretEnvSecret Manager から注入する環境変数
images[]ビルド成果物の Docker イメージ宣言(自動 push)
substitutions置換変数(ユーザー定義は _ 始まり)
timeout全体タイムアウト(デフォルト 60 分、最大 24 時間)
options.machineTypeマシンタイプ(高速化したい時に変更)

Cloud Build トリガー種別

トリガー条件用途
Push to branch特定ブランチへの pushmain 押下で本番ビルド
Push new tagタグ pushリリースタグでビルド
Pull requestPR 作成・更新PR レビュー時にテスト
Manual手動実行緊急時
Pub/SubPub/Sub メッセージCVE 検出→自動再ビルド
WebhookHTTP リクエスト外部システムから
ScheduledCloud Scheduler 経由定期実行(nightly build)

Artifact Registry サポートフォーマット

Docker / OCI

Docker イメージ、OCI 互換

Maven

Java(pom.xml)

npm

Node.js

Python

PyPI 互換(pip)

Helm

Kubernetes パッケージ

Apt / Yum

Debian/Ubuntu / RHEL

Go

Go modules

Kubeflow

Kubeflow パイプライン

+ Cleanup Policies

古いイメージ自動削除

🔧 Cloud Build vs Jenkins vs GitHub Actions 選定

シナリオ推奨
GCP のみ / 完全マネージド希望Cloud Build
マルチクラウド・複雑なパイプラインJenkins
GitHub ホスティング前提GitHub Actions(WIF 連携)
GitLab ホスティング前提GitLab CI
規制業界・オンプレ要件Jenkins(自己ホスト)or Cloud Build Private Pool

🔧 Cloud Build Private Pool の必要性

🚨 重要VPC 内の Cloud SQL や プライベート GKE クラスタにビルドからアクセスするには Private Pool 必須。デフォルトプールは外部実行のため接続不可。
gcloud builds worker-pools create my-pool \ --region=asia-northeast1 \ --peered-network=projects/HOST_PROJECT/global/networks/shared-vpc \ --worker-machine-type=e2-medium # cloudbuild.yaml で使用 options: pool: name: 'projects/my-project/locations/asia-northeast1/workerPools/my-pool'

🔧 トリガー設計のパターン

ブランチ / イベントトリガーデプロイ先
feature/* pushPR トリガーテスト実行のみ
main pushpush トリガーdev 環境
release-* pushpush トリガーstaging 環境
v* タグtag トリガーprod 環境
毎日 00:00scheduledregression test

🔧 PR トリガーの comment-control

内容
COMMENTS_DISABLED全 PR で自動実行
COMMENTS_ENABLEDコラボは自動、外部は /gcbrun 必須
COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY外部のみコメント必須

🔧 Pub/Sub トリガーの典型例

# CVE 検出 → 自動再ビルド gcloud builds triggers create pubsub \ --name=cve-detected \ --topic=projects/my-project/topics/cve-alerts \ --build-config=cloudbuild-rebuild.yaml \ --substitutions='_IMAGE=$(body.message.data.image)'

🎯 Cloud Build 重要数値

項目
デフォルトタイムアウト60 分
最大タイムアウト24 時間
無料枠1 日 120 ビルド分(e2-medium 相当)
デフォルトマシン1 vCPU / 4 GB
最大マシンE2_HIGHCPU_32(32 vCPU / 32 GB)
並列ステップwaitFor: ['-'] で並列実行
ユーザー定義置換変数_ から開始(例: _ENV

🎯 Artifact Registry 即答

キーワード答え
マルチフォーマットArtifact Registry(Docker/Maven/npm/Python/Helm/Apt/Yum/Go)
タグ上書き禁止--immutable-tags
外部リポジトリのキャッシュRemote Repository
複数リポジトリを単一エンドポイントVirtual Repository
古いイメージ自動削除Cleanup Policies
IAM: push 権限roles/artifactregistry.writer
IAM: pull 権限roles/artifactregistry.reader

2.2 パイプライン実装とデプロイ戦略

Cloud Deploy 階層(最重要)

Delivery Pipeline(パイプライン全体) Target: dev Target: staging Target: prod Release(イメージ + render 済み manifest) Rollout(1 つの target への実行) canary-25 canary-50 stable (100%) Phase ごとに: predeploy hook deploy job verify job postdeploy hook

Cloud Deploy YAML の例

apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-app-pipeline serialPipeline: stages: - targetId: dev profiles: [dev] - targetId: staging profiles: [staging] - targetId: prod profiles: [prod] strategy: canary: runtimeConfig: kubernetes: serviceNetworking: service: my-app-svc deployment: my-app canaryDeployment: percentages: [25, 50] verify: true --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prod requireApproval: true # 手動承認必須 gke: cluster: projects/my-project/locations/asia-northeast1/clusters/prod

デプロイ戦略 5 種比較

Rolling 順次置換(maxSurge / maxUnavailable)・1 倍リソース Blue/Green Blue v1 Green v2 Blue 削除 LB 切替で瞬時切戻し2 倍リソース Canary Stable v1 (95%) v2 (5%) 段階的 (5%→25%→100%)、verify でメトリクス検証 Traffic Split v1 (90%) v2 (10%) 重み付け切替(Cloud Run revision、GKE Gateway) Feature Flag 本番デプロイ済み コードで切替(フラグ ON/OFF)、デプロイとリリース分離 旧版(v1) 新版(v2) 新環境

5 戦略の比較表

戦略動作切戻しリソース用途
Rolling Update順次置換遅い1 倍デフォルト、一般 Web
Blue/Green新環境構築 → LB 切替瞬時2 倍DB 非互換、即時切戻し必須
Canary一部に新版影響限定1 倍 + αリスク高、メトリクス検証
Traffic Splitting重み付け分配速い1 倍 + αCloud Run、GKE Gateway
Feature Flagsコードで切替瞬時(フラグ)1 倍A/B テスト、段階開放

🔧 Cloud Deploy canary の詳細

strategy: canary: runtimeConfig: kubernetes: serviceNetworking: service: my-app-svc deployment: my-app disablePodOverprovisioning: false canaryDeployment: percentages: [10, 25, 50] # 段階 verify: true # 各 phase で verify predeploy: actions: [pre-check] # cloudbuild.yaml ターゲット postdeploy: actions: [post-check]

🔧 Cloud Deploy IAM の職務分掌

ロール内容
roles/clouddeploy.admin全権限
roles/clouddeploy.operatorパイプライン操作
roles/clouddeploy.developerrelease 作成のみ
roles/clouddeploy.releaserrelease 作成・promote
roles/clouddeploy.approver承認のみ(releaser とは別人に)
roles/clouddeploy.viewer閲覧
roles/clouddeploy.jobRunnerジョブ実行用
🔑 職務分掌release を作る人と承認する人を分けるreleaser vs approver を別 IAM に。

🔧 マルチターゲット並列デプロイ

apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: multi-prod multiTarget: targetIds: - prod-asia # asia-northeast1 - prod-us # us-central1 - prod-eu # europe-west1 # → 1 つの release から 3 リージョンへ並列デプロイ

🔧 ハイブリッド / マルチクラウドデプロイ

要件推奨
単一クラウド GKECloud Deploy 直接
マルチクラスタ・即時性重視Cloud Deploy + Multi-target
規制・宣言的・監査性重視Config Sync(GitOps)
マルチクラウドCloud Deploy + Anthos
オンプレ GKEGKE Enterprise / Anthos

🔧 ML パイプライン統合(Vertex AI Pipelines)

項目内容
ML ワークフロー実行Vertex AI Pipelines(KFP v2 / TFX)
CI 連携Cloud Build トリガーで pipelineJobs.create
モデル保管Vertex AI Model Registry
モデルデプロイVertex AI Endpoints
モデルの canarytraffic-splitv1=90,v2=10
監査Cloud Audit Logs (aiplatform.googleapis.com)
# 既存エンドポイントに 10% traffic で新モデルデプロイ gcloud ai endpoints deploy-model my-endpoint \ --region=asia-northeast1 \ --model=projects/my-project/locations/asia-northeast1/models/my-model-v2 \ --traffic-split=v1=90,v2=10

🎯 Cloud Deploy 階層 即答

暗記答え
最上位リソースDelivery Pipeline
デプロイ先環境Target
バージョンスナップショットRelease
1 つの target への展開Rollout
canary の段階単位Phase
Render エンジンSkaffold
対応マニフェスト形式Kubernetes / Kustomize / Helm

🎯 デプロイ戦略選定

要件戦略
即時切戻し最優先Blue/Green
段階的・メトリクス検証Canary
デフォルトの順次置換Rolling Update
Cloud Run の重み付けTraffic Splitting
デプロイとリリース分離Feature Flags
DB スキーマ非互換Blue/Green(マイグレ設計次第)

🎯 Cloud Deploy 対応ターゲット

ターゲット対応
GKE Standard / Autopilot
Cloud Run(service / job)
GKE Enterprise / Anthos
GKE on AWS / Azure
App Engine
Cloud Functions

2.3 設定とシークレット管理

シークレット系 4 サービスの使い分け

サービス用途
Cloud KMS暗号鍵CMEK、データ暗号化、署名
Secret Manager機密の値API key、DB password、秘密鍵
Parameter Manager非機密の構成値feature flag、しきい値、URL
Certificate ManagerTLS 証明書Google-managed / self-managed

Cloud KMS の階層と保護レベル

Project └─ KeyRing(鍵の論理的グループ、リージョン指定) └─ CryptoKey(暗号鍵) └─ CryptoKeyVersion(バージョン、ローテーション履歴)
保護レベル内容FIPS
Softwareソフトウェアベース140-2 L1
HSMCloud HSM140-2 L3
External (EKM)外部 KMS と連携提供元依存
External-VPCプライベート接続経由の EKM提供元依存

Workload Identity Federation(WIF)— キーレス認証

SA キーなしで 外部 ID プロバイダから GCP リソースにアクセス。GitHub Actions、GitLab CI、AWS、Azure、OIDC 全般に対応。

# GitHub Actions の例 permissions: id-token: write # OIDC token 取得に必要 contents: read jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - id: auth uses: google-github-actions/auth@v2 with: workload_identity_provider: 'projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/my-pool/providers/my-github' service_account: 'my-app@my-project.iam.gserviceaccount.com' - uses: google-github-actions/setup-gcloud@v2 - run: gcloud builds submit . --config=cloudbuild.yaml

Cloud Audit Logs(CI/CD 関連)

種別内容デフォルト保持
Admin Activity設定変更・IAM 変更有効400 日
Data Accessデータ読み書き無効(要設定)30 日
System Eventシステム自動操作有効400 日
Policy Deniedポリシー違反による拒否有効30 日
⚠️ Binary Authorization の拒否ログBinary Auth が デプロイ拒否したとき、ログは Policy Denied に記録される。試験頻出。

🔧 Build-time vs Runtime Secret 注入

項目Build-timeRuntime
タイミングビルド中実行時
イメージ埋め込み可能(注意)しない
回転再ビルド必要即時反映
漏洩リスクレイヤに残る可能性アクセス制御で保護
推奨度必要最小限推奨
npm private registry tokenDB password、API key

🔧 Build-time の例(Cloud Build)

steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: - '-c' - | docker build \ --build-arg DB_PASSWORD=$$DB_PASSWORD \ -t myapp . secretEnv: ['DB_PASSWORD'] availableSecrets: secretManager: - versionName: projects/my-project/secrets/db-password/versions/latest env: 'DB_PASSWORD' # 注意: --build-arg は ARG 経由でレイヤに残る可能性 # → multi-stage build で最終イメージから除外する

🔧 Runtime の例(Cloud Run / GKE CSI)

# Cloud Run(環境変数として注入、回転即時反映) gcloud run deploy myapp \ --image=asia-northeast1-docker.pkg.dev/my-project/myrepo/myapp:v1 \ --set-secrets=DB_PASSWORD=db-password:latest \ --region=asia-northeast1 # GKE(CSI Driver でファイルマウント) apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: app-secrets spec: provider: gcp parameters: secrets: | - resourceName: "projects/my-project/secrets/db-password/versions/latest" path: "db-password.txt"

🔧 WIF の詳細セットアップ

# 1. Workload Identity Pool 作成 gcloud iam workload-identity-pools create github-pool \ --location=global \ --display-name="GitHub Pool" # 2. OIDC Provider 追加(条件付き) gcloud iam workload-identity-pools providers create-oidc github-provider \ --workload-identity-pool=github-pool \ --location=global \ --issuer-uri="https://token.actions.githubusercontent.com" \ --attribute-mapping="google.subject=assertion.sub,attribute.repository=assertion.repository,attribute.ref=assertion.ref" \ --attribute-condition="assertion.repository_owner == 'myorg'" # 3. SA に Workload Identity User 付与(特定リポ・特定ブランチに限定) gcloud iam service-accounts add-iam-policy-binding deploy-sa@my-project.iam.gserviceaccount.com \ --role=roles/iam.workloadIdentityUser \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/github-pool/attribute.repository/myorg/myapp"

🔧 環境別 IAM ポリシーマトリクス

項目devstagingprod
デプロイ承認不要不要必須
Binary Authorizationdry-runenforcedenforced + 複数 attestor
CVE 許容LOW までMEDIUM までHIGH 以下のみ
デプロイブランチrelease-*main のみ(WIF condition)
SA キーテスト用許可禁止完全禁止(WIF 必須)
アクセス可能 secretdev-*staging-*prod-*

🎯 シークレット系 即答

キーワード答え
暗号鍵管理(HSM・CMEK)Cloud KMS
API key / DB password 保管Secret Manager
構成パラメータ(非機密)Parameter Manager
TLS 証明書管理Certificate Manager
FIPS 140-2 Level 3Cloud HSM
外部 HSM 連携Cloud EKM
GitHub Actions から SA キーなし認証Workload Identity Federation

🎯 Secret Manager IAM ロール

ロール内容
roles/secretmanager.admin全権限
roles/secretmanager.secretAccessorアクセスのみ
roles/secretmanager.secretVersionManagerバージョン管理
roles/secretmanager.viewerメタデータ閲覧

🎯 Cloud Audit Logs 即答

場面ログ種別
設定変更の監査Admin Activity
データの読み書き監査Data Access(要有効化)
Binary Auth の拒否ログPolicy Denied
システム自動操作System Event

2.4 パイプラインのサプライチェーン保護

3 つの主役:Artifact Analysis / Binary Authorization / Continuous Validation

Artifact Analysis CVE 検出 / SBOM Attestor 「CVE 0 件」を確認 Attestation 発行 署名(PGP / KMS) Binary Authorization policy 評価 → 許可 / 拒否(Policy Denied ログ) GKE / Cloud Run へデプロイ Continuous Validation: デプロイ後も定期検証 (attestation 期限、CVE 新規発生)

Artifact Analysis(旧 Container Analysis)

機能内容
Vulnerability scanningCVE 検出(自動 / On-Demand)
SBOM 生成Software Bill of Materials(SPDX / CycloneDX)
On-Demand ScanningCI 内で push 前に手動スキャン
Continuous Validationデプロイ後も継続スキャン(Binary Auth 連動)

Severity(重大度)

レベル説明
CRITICAL即座に修正必須
HIGH早期修正
MEDIUM計画的修正
LOW影響軽微
MINIMAL情報のみ

Binary Authorization の用語

用語意味
Attestor「誰が検証するか」(PGP 公開鍵を持つ)
Attestation「このイメージは検証済み」のメタデータ(署名)
Policyデプロイ可否ルール(プロジェクト単位で 1 つ)
Breakglass緊急バイパス(Pod annotation alpha.image-policy.k8s.io/break-glass: "true"
Dry-run違反でも警告のみ・デプロイ許可(DRYRUN_AUDIT_LOG_ONLY

🔧 Binary Authorization Policy 例

defaultAdmissionRule: evaluationMode: REQUIRE_ATTESTATION enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG requireAttestationsBy: - projects/my-project/attestors/qa-attestor clusterAdmissionRules: asia-northeast1.prod-cluster: evaluationMode: REQUIRE_ATTESTATION enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG requireAttestationsBy: - projects/my-project/attestors/qa-attestor - projects/my-project/attestors/security-attestor - projects/my-project/attestors/prod-approver admissionWhitelistPatterns: - namePattern: gcr.io/google-containers/* - namePattern: k8s.gcr.io/* globalPolicyEvaluationMode: ENABLE # Google ベースイメージは自動許可

🔧 Attestor 作成フロー

# 1. PGP 鍵ペア生成 gpg --quick-generate-key qa-attestor@my-project.iam.gserviceaccount.com # 2. Container Analysis Note 作成 gcloud container analysis notes create qa-attestor-note --description="QA Attestor" # 3. Attestor 作成 gcloud container binauthz attestors create qa-attestor \ --attestation-authority-note=qa-attestor-note \ --attestation-authority-note-project=my-project # 4. 公開鍵を attestor に紐付け gcloud container binauthz attestors public-keys add \ --attestor=qa-attestor --pgp-public-key-file=key.pub

🔧 Cloud Build 内で Attestation 作成

steps: - name: 'gcr.io/cloud-builders/gcloud' id: 'sign-image' entrypoint: 'bash' args: - '-c' - | IMAGE_DIGEST=$(gcloud artifacts docker images describe \ asia-northeast1-docker.pkg.dev/$PROJECT_ID/myrepo/myapp:$SHORT_SHA \ --format='value(image_summary.digest)') gcloud container binauthz attestations sign-and-create \ --artifact-url="asia-northeast1-docker.pkg.dev/$PROJECT_ID/myrepo/myapp@$IMAGE_DIGEST" \ --attestor=qa-attestor \ --keyversion=projects/$PROJECT_ID/locations/global/keyRings/binauthz/cryptoKeys/qa/cryptoKeyVersions/1

🔧 Dry-run モードと Continuous Validation

💡 段階導入本番ポリシー導入前は DRYRUN_AUDIT_LOG_ONLY で違反のみ記録、デプロイは許可。本格運用後に ENFORCED_BLOCK_AND_AUDIT_LOG へ切り替え。
# Continuous Validation 有効化 gcloud container binauthz continuous-validation update --enable # → デプロイ後も定期的に policy 違反 / attestation 期限 / CVE 新規発生を検証

🎯 Binary Auth vs Artifact Analysis vs CV

サービス役割タイミング
Artifact Analysis脆弱性検出(CVE / SBOM)push 時に自動・On-Demand
Binary Authorizationデプロイ可否判定(署名検証)デプロイ時
Continuous Validationデプロイ後の継続検証定期実行

🎯 Binary Authorization 対応プラットフォーム

プラットフォーム対応
GKE Standard / Autopilot
Cloud Run
GKE Enterprise / Anthos
App Engine
Cloud Functions

📜 SLSA Framework — L1 から L4 まで

Supply-chain Levels for Software Artifacts。Google 主導 → Linux Foundation。サプライチェーン成熟度の業界標準フレームワーク。

L1 基礎 ✓ ビルド自動化 ✓ provenance あり GCP 達成手段: Cloud Build を使う L2 バージョン管理 ✓ L1 全て ✓ ホスト型 build ✓ 署名付き provenance GCP 達成手段: Cloud Build + Artifact Registry L3 ★標準 ビルド強化 ✓ L2 全て ✓ ephemeral / isolated ✓ build as code ✓ 改ざん不可 provenance GCP 達成手段: Cloud Build Private Pool + hermetic build L4 最高水準 ✓ L3 全て ✓ 2 人レビュー ✓ hermetic build ✓ reproducible GCP 達成手段: + branch protection + 再現可能ビルド → 右に行くほど厳格、信頼性が高い
要件L1L2L3L4
ビルド自動化
provenanceあり署名付き改ざん不可+ reproducible
build service-ホスト型強化強化
ephemeral / isolated--
hermetic build---
2 人レビュー---
reproducible---best effort
🔑 SLSA キーワード
  • provenance: ビルドの来歴情報(誰が・いつ・何を)
  • hermetic build: 外部ネットワーク禁止・依存ローカル化
  • reproducible build: 同じ入力で常に同じ出力
  • ephemeral environment: ビルドごとに使い捨て環境

🛡️ Software Delivery Shield 全体図

サプライチェーン全体のセキュリティを統合。既存サービス(Cloud Build / Artifact Registry / Artifact Analysis / Binary Authorization / Assured OSS / GKE Security Posture)をエンドツーエンドで連携。

Develop Cloud Workstations Build Cloud Build (SLSA L3) Store Artifact Registry Deploy Cloud Deploy Run GKE / Cloud Run Artifact Analysis(CVE / SBOM・全段で連動) Binary Authorization(署名検証 + Continuous Validation) Assured Open Source Software(Google 検証済 OSS パッケージ) GKE Security Posture / Cloud Run Security(実行環境の継続的監査)

Assured Open Source Software(Assured OSS)

項目内容
対象Java / Python の主要 OSS パッケージ
検証内容CVE スキャン、ファジング、SLSA 準拠
提供形態Artifact Registry 経由
用途規制業界・サプライチェーン保護必須案件

🚨 よくあるトラブル即答(症状別)

症状主な原因解決
Cloud Build がプライベート GKE / Cloud SQL に届かないPrivate Pool 未使用Worker Pool 作成 → options.pool.name 指定
Artifact Registry に push 失敗SA に artifactregistry.writer 未付与IAM 追加
デプロイ拒否(Policy Denied ログ)Binary Auth の attestation なしCloud Build 内で sign-and-create
canary verify 失敗smoke test / メトリクスしきい値verify ジョブを修正
rollout PENDING_APPROVAL のままclouddeploy.approver 未付与approver ロール追加
WIF 認証失敗attribute-condition / principalSet ミスマッチOIDC claim 確認
Cloud Run secret 読めないruntime SA に secretmanager.secretAccessor 未付与IAM 追加
GKE Pod 起動失敗secret / configmap 不在、image pull errorkubectl describe pod

📊 ロールバック手段

場面手段
Cloud Deploy 経由デプロイgcloud deploy targets rollback
Cloud Runrevision の traffic 100% を旧版に
GKE Deploymentkubectl rollout undo deployment/<name>
Helmhelm rollback <release> <revision>
MIGrolling update を逆方向(古い template)
Feature Flagフラグ OFF(秒単位)

🎯 要点と暗記 — 一問一答

Q1. Cloud Deploy の階層を上から下まで言える?

A. Delivery Pipeline → Target → Release → Rollout → Phase。Phase ごとに predeploy / deploy / verify / postdeploy hook が走る。

Q2. 即時切戻しが最優先のデプロイ戦略は?

A. Blue/Green。新環境を完全構築 → LB 切替で瞬時。リソースは 2 倍必要。

Q3. メトリクスで段階的に検証しながら本番リリースしたい

A. Canary(Cloud Deploy の strategy.canary + verify: true)。percentages: [10, 25, 50] で段階制御。

Q4. VPC 内の Cloud SQL や プライベート GKE にビルドからアクセスしたい

A. Cloud Build Private Pool(Worker Pool)。VPC ピアリングで内部リソース接続可能。

Q5. GitHub Actions から SA キーなしで GCP にデプロイしたい

A. Workload Identity Federationpermissions.id-token: write + google-github-actions/auth@v2。attribute-condition でリポ・ブランチ限定。

Q6. デプロイ前にコンテナイメージの署名を検証したい

A. Binary Authorization。attestor + policy + attestation。本番導入前は DRYRUN_AUDIT_LOG_ONLY で段階的に。

Q7. ビルド〜デプロイのサプライチェーンを統合保護したい

A. Software Delivery Shield。Cloud Workstations / Cloud Build / Artifact Registry / Artifact Analysis / Binary Authorization / Continuous Validation / Assured OSS / GKE Security Posture を統合。

Q8. SLSA L3 を Google Cloud で達成する手段は?

A. Cloud Build Private Pool + hermetic build。ephemeral / isolated 環境 + 改ざん不可 provenance(Cloud Build 標準で署名付き)。

Q9. DB password を Cloud Run に Runtime で注入したい

A. gcloud run deploy --set-secrets=DB_PASSWORD=db-password:latest。Secret Manager に保管 → runtime SA に secretmanager.secretAccessor 付与。回転即時反映。

Q10. ML モデルの canary リリースは?

A. Vertex AI Endpoints + traffic-split--traffic-split=v1=90,v2=10 で 10% トラフィックを新モデルに。

💡 必殺フレーズ集(試験当日用・★最重要)

状況即答
「即時切戻し」Blue/Green
「段階的」「メトリクスで検証」Canary
「プライベート GKE / Cloud SQL アクセス」Cloud Build Private Pool
「SA キーを使わずに GitHub Actions から」WIF
「サプライチェーン業界標準」SLSA
「Google 検証済み OSS」Assured OSS
「外部リポジトリのキャッシュ」Remote Repository
「複数リポジトリを単一エンドポイント」Virtual Repository
「機密でない構成値」Parameter Manager(Secret Manager ではない)
「TLS 証明書を Google が自動更新」Certificate Manager(Google-managed)
「FIPS 140-2 Level 3」Cloud HSM
「マルチリージョン並列デプロイ」Cloud Deploy Multi-target
「GitOps」「Git が信頼源」Config Sync
「承認者と作成者を分離」clouddeploy.releaser vs clouddeploy.approver
「Binary Auth の拒否を確認」Cloud Audit Logs Policy Denied
「デプロイ後も継続検証」Continuous Validation
「hermetic build」SLSA L3 以上
「2 人レビュー + reproducible」SLSA L4
「ビルド〜デプロイ統合セキュリティ」Software Delivery Shield
「コンテナ脆弱性スキャン」Artifact Analysis
「デプロイ前のイメージ署名検証」Binary Authorization
「古いイメージ自動削除」Artifact Registry Cleanup Policies
「Cloud Run でモデル canary」Vertex AI Endpoints traffic-split
🔑 5 分で復習する箇条書きまとめ
  • CI = Cloud Build、CD = Cloud Deploy、保管 = Artifact Registry
  • Cloud Deploy 階層: Delivery Pipeline → Target → Release → Rollout → Phase
  • Render エンジン: Skaffold(Kustomize / Helm 連携)
  • デプロイ戦略: 即時切戻し=Blue/Green、段階的=Canary、デフォルト=Rolling、Cloud Run=Traffic Split、A/B=Feature Flags
  • Artifact Registry: マルチフォーマット、--immutable-tags、Remote / Virtual / Cleanup Policies
  • Binary Authorization: attestor / attestation / policy / breakglass / dry-run / Continuous Validation
  • SLSA: L1=自動化、L2=署名付き provenance、L3=hermetic(Cloud Build 標準)、L4=2 人レビュー + reproducible
  • SDS: Workstations / Build / Registry / Analysis / BinAuth / CV / Assured OSS / Security Posture
  • Secret 注入: デフォルト Runtime、Build-time は multi-stage で最終イメージから除外
  • WIF: SA キー禁止、GitHub Actions は id-token: write、attribute-condition で限定
  • 環境別 IAM: prod は 承認必須 + WIF + 複数 attestor
  • Cloud Audit Logs: Admin / Data Access / System Event / Policy Denied(Binary Auth 拒否)
  • Cloud Build Private Pool = プライベート GKE / Cloud SQL アクセスに必須
  • Vertex AI Endpoints は traffic-split で ML モデルの canary
← セクション 1:組織と基盤 セクション 3:SRE プラクティス → 📝 問題演習を解く 📖 用語集