Instiq
第6章 · セキュリティとコンプライアンス·v2.2.0·更新 2026/6/28·読了目安 約10分

変更要約: in-scope サービス網羅(是正): Network Firewall 節に Web 保護の AWS WAF(L7・SQLi/XSS/レート制限の IaC 適用)を追加(参考書で未説明だった軸B欠落を解消)

6.1ID とシークレットの管理

この節の要点

パイプラインと実行環境の認可——IAM ロール一時認証情報Secrets ManagerParameter StoreOIDC フェデレーション——を理解します。長期キーを排し、最小権限で安全に動かします。

DevOps の自動化は強い権限を扱います。長期キーを避け、ロールと一時認証情報、シークレット管理で安全に運用します。

6.1.1認可とシークレット

パイプラインと実行環境の認可を示した図。CodeBuild/CodePipeline/Lambda/EC2 などは IAM ロールで一時認証情報を得て最小権限で動作し(アクセスキーの埋め込みは禁止)、外部 CI(GitHub Actions 等)は OIDC フェデレーションでロールを引き受け、機密は Secrets Manager(自動ローテーション対応)や Parameter Store(SecureString)から実行時に取得する構成を示した図。
認可とシークレット管理
  • IAM ロール+一時認証情報:サービスはロールで動作し、長期アクセスキーを埋め込まない
  • Secrets Manager:DB パスワードや API キーを保管し、自動ローテーションに対応。
  • Parameter Store(SecureString):設定値や軽量な機密を一元管理(KMS で暗号化)。
  • OIDC フェデレーション:外部 CI(GitHub Actions 等)がキーなしでロールを引き受ける。
試験ポイント

「サービスは IAM ロール+一時認証情報(長期キー禁止)」「ローテーション必須の機密=Secrets Manager」「設定/軽量機密=Parameter Store(SecureString)」「外部 CI からのキーレス認可=OIDC フェデレーション」 は DOP-C02 で頻出です。GitHub Actions から AWS へは OIDC でロールを引き受けるのが定石です。

DOP-C02 では「自動化の強い権限を、いかに長期キー無しで安全に与えるか」が問われます。AWS のサービス(CodeBuild/CodePipeline/Lambda/EC2/ECS タスク)にはサービスロール/インスタンスプロファイル/タスクロールを割り当て、STS の一時認証情報で動かします。クロスアカウントのデプロイは、CI/CD アカウントから各環境アカウントのロールを AssumeRole し、信頼ポリシーで引き受け元を限定します。外部 CI(GitHub Actions など)からは OIDC フェデレーション——IAM の OIDC ID プロバイダーを登録し、sub(リポジトリ/ブランチ)を信頼ポリシーの条件にしてロールを引き受け、長期キーを GitHub に置きません。シークレットは、ローテーションが要る DB 認証情報=Secrets Manager(Lambda ローテーション、RDS と統合)、設定値や階層パラメータ=Parameter Store(SecureString は KMS 暗号化)と使い分けます。CodeBuild/CodePipeline は環境変数にシークレットの ARN を参照させ、値を平文で持ちません。権限設計は最小権限が基本で、Permissions Boundary で委譲時の上限を、SCP で組織的なガードレールを敷きます。コードに鍵を埋め込まない、ログにシークレットを出さない、定期ローテーションする、という運用規律が DevOps の安全性を支えます。

対象認可/保管の方法要点
AWS サービスIAM ロール+一時認証情報長期キー禁止・最小権限
外部 CI(GitHub 等)OIDC フェデレーションキーレスでロール引受・sub で限定
ローテーション要の機密Secrets Manager自動ローテーション・RDS 統合
設定値・軽量機密Parameter Store(SecureString)KMS 暗号化・階層・安価

6.1.2マルチアカウント/アプリの ID 管理(IAM Identity Center・Cognito・Directory Service)

組織やアプリのユーザー/デバイス ID を管理するサービス群です。対象(AWS アカウント横断 vs アプリユーザー vs 既存 AD 統合)によって使い分けます。 IAM Identity Center(旧 AWS SSO)は、組織内の複数 AWS アカウントとビジネスアプリへのシングルサインオン(SSO)を一元提供します。パーミッションセット(permission set)を定義して複数アカウントに展開し、既存 IdP(Active Directory、Okta 等)と SAML 2.0 / SCIM で連携できます。DevOps では「開発者が 1 回のログインで複数環境(dev/staging/prod)のコンソール/CLI を切り替える」用途が典型です。 Cognito(Amazon Cognito)は Web/モバイルアプリのユーザー認証・認可を担います。ユーザープールはサインアップ/サインイン/MFA/パスワードリセットを管理するディレクトリで、JWT トークンを発行します。ID プール(フェデレーテッド ID)は、ユーザープールや外部 IdP(Google、Facebook、SAML)で認証したユーザーへ一時的な AWS 認証情報を付与し、S3・DynamoDB 等へ直接アクセスさせます。 Directory Service(AWS Directory Service)は、マネージドなディレクトリサービスです。AWS Managed Microsoft AD はフル機能の Active Directory をマネージドで提供し、EC2 のドメイン参加や IAM Identity Center との統合に使います。AD Connector はオンプレミス AD へのプロキシで、クラウドにディレクトリを持たず既存 AD を活かします。Simple AD は Samba ベースの軽量ディレクトリです。

サービス対象ユーザー/用途典型的な選択基準
IAM Identity CenterAWS アカウント横断の従業員 SSO組織内複数アカウントへのパーミッションセット一元配布
Cognito ユーザープールWeb/モバイルアプリのエンドユーザー認証アプリ独自のサインアップ/サインイン・MFA
Cognito ID プール認証済みユーザーへの AWS 一時認証情報付与S3/DynamoDB への直接アクセスをクライアントに許可
Managed Microsoft ADフル AD(EC2 ドメイン参加/グループポリシー)オンプレ AD をクラウドに拡張、または新規 AD
AD Connector既存オンプレ AD へのプロキシクラウドにディレクトリ複製を持たず既存 AD を活用
試験ポイント

「組織の従業員が複数 AWS アカウントに SSO = IAM Identity Center(パーミッションセット)」「Web/モバイルアプリのユーザー認証 = Cognito(ユーザープール=認証 / ID プール=AWS 認証情報)」「EC2 ドメイン参加や既存 AD 統合 = Directory Service(フル AD は Managed Microsoft AD、既存 AD の活用は AD Connector)」 を区別してください。IAM Identity Center は内部の従業員向け、Cognito は外部アプリユーザー向けという切り分けが試験頻出です。

補足

シナリオ:GitHub Actions から本番 AWS アカウントへデプロイしたいが、長期アクセスキーを GitHub Secrets に置きたくない。→ AWS に GitHub の OIDC ID プロバイダーを登録し、デプロイ用ロールの信頼ポリシーで repo:org/app:ref:refs/heads/main のように sub を限定。ワークフローはロールを AssumeRoleWithWebIdentity で引き受け、短命の一時認証情報でデプロイします。これで GitHub 側に永続キーを保存せずに済みます。

補足

FAQ:Secrets Manager と Parameter Store、どちらに置く? 自動ローテーションや RDS との統合、クロスアカウント共有が要る本格的な機密は Secrets Managerローテーション不要の設定値や軽量な機密Parameter Store(SecureString)が安価で手軽(標準は無料枠あり)。Parameter Store から Secrets Manager のシークレットを参照することもでき、併用が可能です。

注意

ひっかけ:「CI/CD を簡単にするため IAM ユーザーのアクセスキーを発行して GitHub Secrets に保存」は誤りで、長期キーは漏洩リスクが高くアンチパターンです。正解は OIDC フェデレーションでキーレスにすること。また機密を buildspec や環境変数に平文で書くのも誤り——ARN 参照で実行時に取得します。

6.1.3この節のまとめ

  • 認可=IAM ロール+一時認証情報/OIDC(外部 CI)
  • 機密=Secrets Manager(ローテーション)/Parameter Store(SecureString)

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. CodeBuild がビルド中に S3 や ECR へアクセスする。資格情報をどう扱うのが正しいですか?

Q2. データベースのパスワードを定期的に自動ローテーションしながら安全に管理したい。何を使いますか?

Q3. GitHub Actions から AWS にデプロイする際、長期アクセスキーを GitHub に保存したくない。何を使いますか?

理解度を確認第6章「セキュリティとコンプライアンス」の問題を解く

学習の記録を残しませんか

参考書はすべて無料で読めます。無料登録すると、問題集での演習・既読と進捗の記録・間違えた問題の復習・ハイライトが使えます。