トキヌク

AWS DOP サンプル問題

AWS Certified DevOps Engineer - Professional(AWS DOP)対策のオリジナル問題30問を無料公開。アプリの無料枠と同じ問題で、全200問収録のAWS DOP問題集から抜粋しています。「答えと解説を見る」を開くと、正解だけでなく全選択肢の解説を読めます。

30問無料公開 全200問収録 全選択肢解説付き
アプリで解く(無料・登録不要)→

SDLCの自動化

CI/CDパイプライン設計

Q1. 共有ツールアカウントで稼働する AWS CodePipeline から、本番アカウントの CloudFormation スタックを更新する構成に変更することになりました。ビルド成果物はツールアカウントの S3 アーティファクトバケットに保存され、本番アカウント側のロールがそれを取得してデプロイします。監査部門からは、保管時の暗号化を自組織で管理する鍵で行うことも求められています。本番アカウントが成果物を確実に復号して取得できるようにするために必要な構成はどれですか?

  1. A. アーティファクトバケットの暗号化を SSE-S3 のままにし、本番アカウントのロールへバケットの読み取り権限だけを付与する
  2. B. カスタマー管理の KMS キーでバケットを暗号化し、キーポリシーとバケットポリシーで本番アカウントに利用を許可する
  3. C. 本番アカウントへ成果物を複製する S3 レプリケーションを構成し、デプロイアクションに複製先を参照させる
  4. D. ツールアカウントの IAM ユーザーのアクセスキーを発行し、本番アカウント側のデプロイ設定に共有して埋め込む
答えと解説を見る

正解:B

A SSE-S3 の鍵は S3 のサービス管理でクロスアカウント共有ができないため、別アカウントのロールは成果物を復号できず取得に失敗する

B(正解) 正解。クロスアカウントの成果物受け渡しではカスタマー管理キーが必須で、キーポリシーとバケットポリシーの双方で相手アカウントの利用を許可する

C レプリケーションは非同期で実行順序を保証できず、アクションは自身のアーティファクトストアを参照するため構成として成立しない

D 長期認証情報の共有は漏洩リスクが高くベストプラクティスに反する。クロスアカウントはロールの引き受けで解決すべき

CI/CDパイプライン設計

Q2. AWS CodePipeline のテストステージで、統合テストとセキュリティスキャンの2つのアクションを同時に開始して所要時間を短縮し、その両方が成功した場合にのみ同じステージ内の手動承認アクションへ進みたいと考えています。ステージ数を増やさず、アクションの設定だけでこの制御を実現する方法はどれですか?

  1. A. 3つのアクションすべてに同じ runOrder を設定し、承認アクションにだけ依存関係の属性を追加する
  2. B. テストとスキャンにそれぞれ異なる runOrder を設定し、承認には最も小さい runOrder を割り当てる
  3. C. テストとスキャンに同じ runOrder を設定し、承認にはそれより大きい runOrder を設定する
  4. D. テストとスキャンを2つのステージに分割し、承認アクションをさらに後続のステージへ配置する
答えと解説を見る

正解:C

A アクションに個別の依存関係属性はなく、同じ runOrder のアクションは一斉に開始されるため承認も同時に走ってしまう

B runOrder が異なる2つは直列化され、最小値を持つ承認が先頭で実行されるため要件と逆の順序になる

C(正解) 正解。同一 runOrder のアクションは並列に実行され、大きい runOrder のアクションは先行するアクションがすべて成功した後に開始される

D ステージは必ず順番に実行されるため2つの検査が直列になり、所要時間を短縮したいという要件を満たせない

CI/CDパイプライン設計

Q3. 本番デプロイの直前にリリース担当者のレビューを挟む運用を追加することになりました。担当者にはメールで承認依頼が届き、レビュー対象のステージング環境の URL を提示したうえで、承認または却下の判断と、その理由の記録ができる必要があります。追加開発を最小にし、最も運用負荷が低い実装はどれですか?

  1. A. 手動承認アクションに SNS トピックとレビュー用 URL を設定し、コンソールから承認または却下させる
  2. B. パイプラインを停止させる Lambda アクションを配置し、レビュー完了後に担当者が実行を再開する
  3. C. 承認用のステージで CodeBuild を起動し、担当者がログにコメントを書き込むまで待機させる
  4. D. EventBridge でステージ遷移を検知し、Step Functions のコールバックで承認状態を管理する
答えと解説を見る

正解:A

A(正解) 正解。手動承認アクションは SNS 通知、レビュー URL、コメント記録を標準機能として備えており、追加開発なしで要件を満たす

B 停止と再開の制御を自作することになり、通知や承認理由の記録も別途実装が必要となって運用負荷が上がる

C ビルドを待機させ続ける間も課金され、タイムアウト管理やコメント検知の仕組みも自作となるため非効率

D 実現は可能だが、ステートマシンとタスクトークンの管理、承認 UI の用意まで必要で標準機能で足りる要件には過剰

CI/CDパイプライン設計

Q4. GitHub のモノレポを CodeConnections 経由のソースとする V2 タイプのパイプラインを運用しています。現在はリポジトリへの push すべてでパイプラインが起動し、アプリケーションコードだけの変更でもインフラ用パイプラインが動いてビルド費用と通知ノイズが増えています。infra/ 配下に変更があったときだけ起動させるための、最小の構成変更はどれですか?

  1. A. ソースの後段に CodeBuild を配置し、差分に infra/ が含まれない場合はビルドを意図的に失敗させる
  2. B. GitHub 側の Webhook を無効化し、EventBridge のスケジュールで1日1回だけ実行する
  3. C. リポジトリをインフラ用とアプリケーション用に分割し、それぞれ専用のパイプラインを構成する
  4. D. パイプラインのトリガーに push フィルターを追加し、ファイルパスに infra/** を指定する
答えと解説を見る

正解:D

A 実行自体は発生するため課金と失敗通知が残り、パイプラインの成功率も汚れる。トリガー段階で抑止する方が適切

B 変更の有無に関わらず実行されるうえ、infra/ の変更が最大24時間反映されないため要件を満たさない

C モノレポの運用体制そのものを変更する大掛かりな対応であり、最小の構成変更という条件から外れる

D(正解) 正解。V2 タイプのパイプラインはブランチ・タグ・ファイルパスによるトリガーフィルターに対応し、設定追加だけで不要な起動を抑止できる

CI/CDパイプライン設計

Q5. CodeBuild でコンテナイメージをビルドし、コミットハッシュをタグとして付与しています。後続の ECS デプロイアクションには、そのビルドで生成したタグの値を渡す必要があります。パラメータストアなどの外部ストアや Lambda を追加せず、パイプラインの機能だけで値を受け渡す方法はどれですか?

  1. A. ビルド中に Parameter Store へタグを書き込み、デプロイ前に Lambda アクションで読み出して差し替える
  2. B. タグをアーティファクト内の JSON に書き出し、デプロイアクションから S3 を直接参照させる
  3. C. ビルドアクションで出力変数を宣言し、デプロイアクションから名前空間つきの変数構文で参照する
  4. D. パイプライン定義にタグの値をハードコードし、コミットのたびに定義を更新する
答えと解説を見る

正解:C

A 外部ストアと関数の作り込みが増え、同時実行時に値が混ざる危険もある。パイプラインの変数機能だけで完結できる

B デプロイアクションは入力アーティファクトを受け取れるが、設定値として使うには追加の解析処理が必要で無駄が生じる

C(正解) 正解。CodeBuild は exported-variables で変数を公開でき、アクションの名前空間を通じて後続アクションの設定値に埋め込める

D コミットごとにパイプラインを書き換える運用は自動化の目的に反し、更新漏れによる誤ったイメージのデプロイを招く

CodeBuild/ビルド最適化2つ選択

Q6. ある開発チームの AWS CodeBuild プロジェクトは、1 回のビルドに約 12 分を要しています。ビルドログを分析したところ、大半の時間が npm の依存パッケージのダウンロードと Docker イメージのベースレイヤーの再取得に費やされており、ソースコードのコンパイル自体は 1 分未満でした。チームはビルド定義の大幅な書き換えを避けつつ、ビルド時間を短縮したいと考えています。有効な施策はどれですか?(2つ選択)

  1. A. buildspec の cache セクションでカスタムキャッシュと Docker レイヤーキャッシュを有効にする
  2. B. ビルドプロジェクトのタイムアウトを既定の 60 分から 8 時間に延長する
  3. C. 依存パッケージをあらかじめ含めたカスタムビルドイメージを Amazon ECR に用意し、環境イメージとして指定する
  4. D. コンピュートタイプを BUILD_GENERAL1_LARGE から BUILD_GENERAL1_SMALL に変更する
  5. E. ビルドプロジェクトのサービスロールに AdministratorAccess を付与し、権限確認の待ち時間をなくす
答えと解説を見る

正解:A・C

A(正解) 正解。キャッシュにより依存パッケージやベースレイヤーの再取得を回避でき、2 回目以降のビルドが大幅に短縮される。buildspec への追記だけで済む点も要件に合致する

B タイムアウトはビルドを強制終了するまでの上限にすぎず、延長しても各工程の所要時間は 1 秒も短くならない。むしろ異常な長時間ビルドの検知を遅らせる副作用がある

C(正解) 正解。依存関係を焼き込んだイメージを使えば、ビルドのたびにダウンロードする工程そのものを削減できる。ビルド定義の変更は環境イメージの指定のみで済む

D コンピュートを小さくすると CPU・メモリ・ネットワーク帯域がいずれも減るため、ダウンロード中心の処理はさらに遅くなり、ビルド時間は悪化する

E 権限の広さはビルド速度と無関係であり、最小権限の原則にも反する。ボトルネックは依存関係の取得であって、IAM の権限評価ではない

CI/CDパイプライン設計2つ選択

Q7. ある企業は開発アカウントの AWS CodePipeline から、本番アカウントの Amazon ECS へアプリケーションをデプロイしています。パイプラインはソースを CodeConnections 経由で GitHub から取得し、AWS CodeBuild でビルドした成果物を本番アカウントのデプロイアクションに渡します。しかし本番アカウント側のアクションが成果物を取得できずに失敗し続けています。クロスアカウントのパイプラインを正しく機能させるために必要な対応はどれですか?(2つ選択)

  1. A. アーティファクトストアの Amazon S3 バケットでブロックパブリックアクセスを解除し、匿名の読み取りを許可する
  2. B. アーティファクトストアの Amazon S3 バケットのバケットポリシーで、本番アカウントのデプロイロールに読み取りを許可する
  3. C. 開発アカウントと本番アカウントの VPC を VPC ピアリングで接続し、パイプラインの通信経路を確保する
  4. D. アーティファクトの暗号化にカスタマー管理の AWS KMS キーを使い、キーポリシーで本番アカウントのロールに復号を許可する
  5. E. 本番アカウントの IAM ユーザーのアクセスキーを CodeBuild の環境変数に平文で設定し、デプロイ時に使用する
答えと解説を見る

正解:B・D

A パブリック公開はセキュリティを大きく損なうだけで、クロスアカウントの権限問題は解決しない。必要なのは特定のロールへの明示的な許可

B(正解) 正解。成果物は開発アカウントの S3 バケットに保管されるため、本番アカウントのロールに対しバケットポリシーで読み取りを許可する必要がある

C VPC ピアリングはネットワーク到達性の話であり、CodePipeline の成果物取得の可否は S3 と KMS の権限設定で決まる

D(正解) 正解。既定の AWS 管理キーでは他アカウントから復号できないため、カスタマー管理キーのキーポリシーで相手ロールに復号を許可する

E 長期アクセスキーの平文保管は資格情報漏えいのリスクが高く、クロスアカウントはロールの引き受けで実現するのが正しい方法

構成管理とIaC

CloudFormationテンプレート設計

Q8. ある企業は、本番環境のリレーショナルデータベースを含む CloudFormation スタックを運用しています。過去にテンプレート更新で意図しないリソースの置換が発生し、データを失う事故が起きました。今後は更新内容を承認者がレビューし、どのリソースが置換されるかを実行前に把握したうえで適用したいと考えています。最も運用負荷が低い方法はどれですか?

  1. A. 変更セットを作成し、Replacement 列を確認してから実行する
  2. B. 更新前にドリフト検出を実行し、その結果を承認者に提示する
  3. C. cfn-lint による静的検査をパイプラインに追加し、警告が出たら停止する
  4. D. スタックを削除してから、更新後のテンプレートで作成し直す
答えと解説を見る

正解:A

A(正解) 正解。変更セットは追加・変更・削除されるリソースと置換の要否を実行前に一覧化するため、承認者が破壊的変更を判断してから適用できる

B ドリフト検出はテンプレートと実リソースの現時点の差分を示すだけで、これから行う更新が置換を伴うかどうかは判定できない

C cfn-lint は構文やベストプラクティスの静的検査であり、稼働中のスタックに対して実際に置換が起きるかまでは分からない

D 削除と再作成はデータベースを確実に失ううえ長いダウンタイムも生じ、事故防止どころか被害を拡大する対応

CloudFormationテンプレート設計

Q9. 監査部門から、スタックを削除した場合でも、テンプレート変更でデータベースが置換される場合でも、データをスナップショットとして必ず残すことを求められました。開発チームは日常的にスタックを更新しており、更新のたびにバックアップ取得などの追加の手作業が発生する運用は避けたいと考えています。テンプレート側の設定だけでこの要件を満たす方法はどれですか?

  1. A. DeletionPolicy に Retain を設定し、置換時は手動でスナップショットを取得する
  2. B. DeletionPolicy と UpdateReplacePolicy の両方に Snapshot を設定する
  3. C. スタック本体に終了保護を有効化し、コンソールからの削除を禁止する
  4. D. スタックポリシーで当該リソースへの Update:Replace を明示的に拒否する
答えと解説を見る

正解:B

A Retain は削除時に残すだけで、置換時の挙動は UpdateReplacePolicy が制御する。手作業が残る点も要件に反する

B(正解) 正解。前者がスタック削除時、後者が更新で置換される時の挙動を制御し、いずれの場合も自動でスナップショットが作成される

C 終了保護はスタック削除操作を防ぐだけで、更新による置換は止められず、スナップショットも作成されない

D 置換を伴う更新自体が失敗するようになるだけで、正当な変更まで阻害され、データ保全の手段にもならない

CloudFormationテンプレート設計

Q10. Auto Scaling グループ上で稼働する Web アプリケーションを CloudFormation で管理しています。起動テンプレートを更新するとローリング更新が実行されますが、アプリケーションの初期化に約 3 分かかるため、まだリクエストを処理できないインスタンスが順次投入され、スタック更新も成功として完了してしまいます。ダウンタイムなしで更新するにはどうすればよいですか?

  1. A. ヘルスチェックの猶予期間を延ばし、更新完了後に手動で動作確認を行う
  2. B. 更新前に希望容量を 2 倍に増やしてから新しい起動テンプレートを適用する
  3. C. cfn-signal でシグナルを送り、UpdatePolicy で WaitOnResourceSignals を有効にする
  4. D. UpdatePolicy の MinInstancesInService を 0 に設定して一括で入れ替える
答えと解説を見る

正解:C

A 猶予期間の延長は異常インスタンスの置換を遅らせるだけで、初期化未完了のインスタンスへの振り分けもスタックの誤った成功判定も防げない

B 台数を増やしても新規インスタンスの初期化完了は待たれないため、初期化中のインスタンスにトラフィックが向かう問題は解消しない

C(正解) 正解。初期化完了後に送られるシグナルを CloudFormation が待つため、準備できたインスタンスだけが投入され、更新の成否も正しく判定される

D 稼働中インスタンスを維持しない設定であり、入れ替え中にサービスが完全に停止するためダウンタイムなしの要件に反する

CloudFormationテンプレート設計

Q11. ネットワークチームが管理するスタックが VPC ID とサブネット ID を Export し、10 個のアプリケーションスタックが ImportValue でそれらを参照しています。ネットワークスタックのサブネット構成を変更しようとすると、出力値が他スタックから参照されているため更新が拒否されました。スタック間の結合を緩め、それぞれ独立して更新できるようにする方法はどれですか?

  1. A. アプリケーションスタックのテンプレートに VPC ID を直接ハードコードする
  2. B. 参照している全アプリケーションスタックを削除してから、ネットワークを更新する
  3. C. 全体をネストされたスタックに作り替え、親スタックからパラメータで渡す
  4. D. 出力値を SSM パラメータストアに格納し、各スタックから動的参照で取得する
答えと解説を見る

正解:D

A 参照エラーは消えるが環境ごとの再利用性が失われ、値の変更時に全テンプレートの改修が必要になり運用負荷が増える

B 本番アプリケーションの停止を伴う破壊的な手順であり、更新のたびに繰り返す必要があるため恒久的な解決にならない

C ネストは 1 つのライフサイクルにまとめる構成であり、アプリケーションを個別に更新したいという要件とは逆方向の結合強化になる

D(正解) 正解。Export と異なり参照中でも値を変更でき、ネットワーク側とアプリケーション側を独立したライフサイクルで更新できる

CloudFormationテンプレート設計

Q12. AWS Lambda 関数をバックエンドとするカスタムリソースを含むスタックを作成したところ、スタックが CREATE_IN_PROGRESS のまま約 1 時間停止し、その後 CREATE_FAILED になりました。CloudWatch Logs には関数が処理を完了した記録があり、明らかな例外は出力されていません。原因への対処として最も適切なものはどれですか?

  1. A. 例外発生時も含め、必ず事前署名 URL へレスポンスを送信するよう実装する
  2. B. Lambda 関数のタイムアウトを 15 分に延ばし、メモリ割り当ても増やす
  3. C. カスタムリソースに DependsOn を追加し、作成順序を明示的に指定する
  4. D. スタックの作成時にロールバック設定のタイムアウトを短く設定しておく
答えと解説を見る

正解:A

A(正解) 正解。CloudFormation は応答が届くまで待ち続けるため、成功・失敗いずれの経路でも S3 の事前署名 URL に結果を返す実装が必須

B 関数自体は完了しており実行時間は問題ではない。応答が返らない限り、リソースを増やしても待ち続ける状況は変わらない

C DependsOn は依存順序を制御するだけで、応答が届かないことによるスタックの待機とタイムアウトには影響しない

D 失敗が判明するまでの時間が短くなるだけで根本原因は残り、カスタムリソースは同じ理由で失敗し続ける

耐障害性の高いクラウドソリューション

高可用性/Multi-AZ

Q13. ある企業は EC2 Auto Scaling グループ配下の Web アプリケーションを Application Load Balancer で公開しています。アプリケーションプロセスがメモリリークで応答を返さなくなる障害が月に数回発生しますが、OS は動作し続けるためインスタンスは置き換えられず、ALB のターゲットが unhealthy のまま放置されて実効容量が目減りしています。インスタンスの起動処理には約 5 分かかります。運用者の手を介さずにこの状態を自動的に解消する方法はどれですか?

  1. A. ALB のターゲットグループの登録解除の遅延を 600 秒に延長し、異常なターゲットが外れるまでの時間を確保する
  2. B. Auto Scaling グループのヘルスチェックタイプに ELB を追加し、ヘルスチェックの猶予期間を起動時間より長く設定する
  3. C. Auto Scaling グループの終了ポリシーを OldestInstance に変更し、スケールイン時に古いインスタンスを優先的に削除する
  4. D. ALB のヘルスチェックのタイムアウトと間隔を大きくし、unhealthy と判定されるしきい値を引き上げる
答えと解説を見る

正解:B

A 登録解除の遅延は正常なターゲットを外す際に処理中のリクエストを待つための設定で、異常インスタンスの置き換えとは無関係。実効容量の目減りは解消しない

B(正解) 正解。ELB のヘルスチェック結果を Auto Scaling が異常とみなして置き換えるようになる。猶予期間を起動時間より長くしないと、起動途中のインスタンスが誤って終了される

C 終了ポリシーはスケールイン時にどのインスタンスを選ぶかの規則にすぎず、異常検知の契機にはならない。応答しないインスタンスが残る問題は解決しない

D 判定を緩めると異常なターゲットにリクエストが送られ続け、利用者への影響がむしろ悪化する。自動復旧の仕組みにもならない

高可用性/Multi-AZ

Q14. 3 つのアベイラビリティゾーンに分散した EC2 Auto Scaling グループで基幹 API を運用しています。過去の AZ 障害時に、生き残った AZ でのスケールアウトが起動 API のスロットリングと容量不足で遅れ、数十分にわたり性能が劣化しました。平常時の追加コストは許容できるので、AZ が 1 つ失われた瞬間から全トラフィックを処理できる構成にしたいです。最も確実な設計はどれですか?

  1. A. ターゲット追跡スケーリングのしきい値を下げ、CPU 使用率が上がったら早めにスケールアウトさせる
  2. B. AZ 障害を検知する CloudWatch アラームから Lambda を起動し、希望容量を 2 倍に更新する
  3. C. 各 AZ に必要容量の 1.5 倍のインスタンスを常時稼働させ、障害時に新たな起動を伴わずに処理できるようにする
  4. D. オンデマンドキャパシティ予約を 1 つの AZ にまとめて購入し、障害時にそこへインスタンスを集約する
答えと解説を見る

正解:C

A しきい値を下げても障害時には結局 EC2 の起動が必要になり、API のスロットリングや容量不足という根本原因は残る

B 自動化しても復旧が制御プレーンの成否に依存する点は変わらない。AZ 障害時は起動要求が集中し、必要な速度で容量が揃う保証がない

C(正解) 正解。静的安定性の考え方で、障害時に制御プレーンの操作(インスタンス起動)へ依存しないよう、あらかじめ余剰容量を各 AZ に確保しておく

D 予約を 1 つの AZ に集中させると、その AZ が失われたときに予約ごと使えなくなる。キャパシティ予約は AZ ごとに分散して保持する必要がある

高可用性/Multi-AZ

Q15. Aurora MySQL クラスターで、ライターに加えて 4 つのリーダーを運用しています。うち 2 つは分析クエリ用に小さいインスタンスクラスで動かしており、残り 2 つは本番と同じクラスです。先日の自動フェイルオーバーで分析用の小さいリーダーが昇格し、本番アプリケーションが数時間にわたり性能不足に陥りました。追加コストをかけずに再発を防ぐ方法はどれですか?

  1. A. 分析用リーダーを別の Aurora クラスターへ移し、バイナリログレプリケーションで同期する
  2. B. クラスターエンドポイントの代わりに、ライターのインスタンスエンドポイントをアプリケーションに設定する
  3. C. 分析用リーダーを削除し、必要なときだけ Aurora Serverless v2 のリーダーを追加する運用にする
  4. D. 分析用リーダーの昇格階層 (promotion tier) を、本番用リーダーより大きい数値に設定する
答えと解説を見る

正解:D

A 昇格対象からは外れるが、インスタンスとレプリケーションの追加コストおよび運用が発生し、追加コストをかけないという要件に反する

B インスタンスエンドポイントを直接指定すると、フェイルオーバー後も接続先が旧ライターのままとなり可用性がむしろ低下する

C 分析基盤の作り直しが必要なうえ、昇格順序という根本問題は解決しない。Serverless v2 のリーダーも昇格対象になり得る

D(正解) 正解。昇格階層は 0〜15 で数値が小さいリーダーが優先的に昇格するため、分析用を 15 などにすれば同クラスの本番用リーダーが先に選ばれる

高可用性/Multi-AZ

Q16. Network Load Balancer の背後に 2 つの AZ で EC2 インスタンスを配置しています。AZ-a には 8 台、AZ-c には 2 台が登録されていますが、AZ-c の 2 台だけ CPU 使用率が飽和し、AZ-a の 8 台には余裕があります。クライアントは同一リージョンの VPC 内からのアクセスのみで、AZ 間のデータ転送コストは許容できます。負荷の偏りを解消する最も簡単な方法はどれですか?

  1. A. NLB のターゲットグループでクロスゾーン負荷分散を有効にする
  2. B. NLB のリスナーでラウンドロビンのルーティングアルゴリズムを選択する
  3. C. AZ ごとに Route 53 の加重レコードを作成し、重みを登録台数の比に合わせる
  4. D. AZ ごとに別々の NLB を用意し、クライアント側でどちらへ接続するかを振り分ける
答えと解説を見る

正解:A

A(正解) 正解。NLB はクロスゾーン負荷分散が既定で無効のため AZ 単位で均等配分される。有効化すると全ターゲットへ均等に分散される(AZ 間転送料が発生する)

B ルーティングアルゴリズムは AZ 内でのターゲット選択方法を変えるだけで、AZ 単位に均等配分するという既定動作は変わらない

C NLB は単一の DNS 名で AZ ごとのノード IP を返すため、台数変動のたびに重みを保守する必要があり運用が複雑になる

D クライアント改修と二重管理が必要になる。設定 1 つで解決できる問題に対して過剰かつ複雑な対応

高可用性/Multi-AZ

Q17. セッション情報を保持する ElastiCache (Redis OSS) クラスターが単一ノードで稼働しており、ノード障害時にセッションが失われて全ユーザーが強制ログアウトになっています。アプリケーションは接続先のエンドポイント名をハードコードしており、コード変更のリリースには数週間かかります。アプリケーションの変更を伴わずに単一障害点を除去する方法はどれですか?

  1. A. 同じ構成の 2 つ目のクラスターを別 AZ に作成し、アプリケーションから両方のエンドポイントへ二重書き込みする
  2. B. クラスターモードを有効にしてシャードを増やし、キースペースを複数ノードに分割する
  3. C. レプリケーショングループに別 AZ のレプリカを追加し、マルチ AZ の自動フェイルオーバーを有効にする
  4. D. ノードのスナップショットを 1 時間ごとに取得し、障害時は新しいクラスターへ復元して切り替える
答えと解説を見る

正解:C

A 二重書き込みはアプリケーション改修が前提で要件に反する。整合性の担保や切り替えロジックも自前で持つ必要がある

B シャード分割はスループットと容量のスケール手段であり、レプリカがなければノード障害でそのシャードのデータは失われる

C(正解) 正解。プライマリエンドポイントを維持したままレプリカが自動昇格するため、接続先を変えずに単一障害点を除去できる

D 最大 1 時間分のセッションが失われ、復元とエンドポイント切り替えの間はダウンタイムも生じる。可用性対策としては不十分

モニタリングとロギング

ログ集約/保管

Q18. ある企業は AWS Organizations 配下に 50 を超えるメンバーアカウントを持ち、各アカウントのアプリケーションログを監査用の集約アカウントへ準リアルタイムで集めたい考えです。メンバーアカウントの開発チームには転送処理を独自実装させたくなく、集約側の受け口は 1 つに統一したいと考えています。アカウント追加時の作業も最小限にしたい場合、最も運用負荷が低い構成はどれですか?

  1. A. 各アカウントで Lambda を 5 分ごとに実行し、GetLogEvents API で取得したログイベントを集約アカウントの S3 バケットへ直接アップロードする
  2. B. 各アカウントで CloudWatch Logs のエクスポートタスクを日次実行し、出力先 S3 バケットのレプリケーションで集約アカウントへ複製する
  3. C. 集約アカウントに Kinesis Data Streams を宛先とする CloudWatch Logs のデスティネーションを作成し、各ロググループにサブスクリプションフィルタを設定する
  4. D. 集約アカウントに CloudWatch Agent を導入し、各メンバーアカウントのクロスアカウントロールを使ってロググループをリモートから収集させる
答えと解説を見る

正解:C

A ポーリング実装をアカウントごとに配布・保守する必要があり、API のスロットリングや重複取得の制御も自作になるため運用負荷が高くなる

B エクスポートタスクはバッチ処理で完了まで時間がかかり、準リアルタイム要件を満たさない。アカウントごとのスケジュール管理も残る

C(正解) 正解。クロスアカウントのデスティネーションはアクセスポリシーで組織全体に共有でき、送信側はサブスクリプションフィルタを付けるだけで準リアルタイムに転送される

D CloudWatch Agent はホスト上のログやメトリクスを送信するエージェントであり、他アカウントのロググループを引き抜く用途には使えない

ログ集約/保管

Q19. オンプレミスのデータセンターと AWS の EC2 インスタンスが混在する環境で、OS メトリクス(メモリ・ディスク使用率)とアプリケーションログを同じダッシュボードで扱いたいと考えています。収集設定はサーバー種別ごとに標準化し、設定変更を全台へ一斉反映できるようにしたいです。最も運用負荷が低い方法はどれですか?

  1. A. 各サーバーに cron を配置し、OS のコマンド出力を整形して PutMetricData と PutLogEvents を呼ぶスクリプトを構成管理ツールで配布する
  2. B. CloudWatch Agent を導入し、設定ファイルを SSM Parameter Store に保管して SSM の AmazonCloudWatch-ManageAgent 経由で適用する
  3. C. CloudWatch の EC2 詳細モニタリングを有効化し、オンプレサーバーは Site-to-Site VPN 経由で同じ名前空間へ取り込む
  4. D. AWS Systems Manager Inventory を全ノードで有効化し、収集されたインベントリデータを CloudWatch メトリクスとして参照する
答えと解説を見る

正解:B

A 自作スクリプトの保守、認証情報の配布、API 呼び出しのリトライ制御まで自前になり、標準化された収集基盤に比べて負荷が大きくなる

B(正解) 正解。エージェント設定を Parameter Store で一元管理し、Systems Manager からハイブリッド有効化したオンプレサーバーを含めて一斉に配布・更新できる

C 詳細モニタリングは 1 分粒度になるだけでメモリやディスク使用率は取得できず、オンプレサーバーの OS メトリクスも対象外である

D Inventory はソフトウェア構成や設定情報の棚卸しが目的で、継続的なメトリクスやアプリケーションログの収集機能ではない

ログ集約/保管

Q20. 監査部門は、アプリケーションログを 7 年間保持することを求めています。一方で運用チームが CloudWatch コンソールで検索するのは直近 30 日分のみです。現在は全ロググループが無期限保持となっており、CloudWatch Logs の保管コストが増大しています。要件を満たしつつコストを最小化する構成はどれですか?

  1. A. ロググループの保持期間を 7 年に設定し、CloudWatch Logs の Infrequent Access ログクラスへ全ロググループを切り替える
  2. B. ロググループの保持期間を 30 日に設定し、削除前に日次のエクスポートタスクで S3 へ書き出すよう Lambda をスケジュール実行する
  3. C. ロググループの保持期間を 30 日に設定し、CloudWatch の請求アラームで超過分を検知して手動でアーカイブする
  4. D. ロググループの保持期間を 30 日に設定し、サブスクリプションフィルタから Data Firehose 経由で S3 へ配信してライフサイクルで Glacier へ移行する
答えと解説を見る

正解:D

A 検索性は残るが、7 年分を CloudWatch Logs に置き続けるため S3 へ退避する構成よりも保管コストが大幅に高くなる

B エクスポートタスクは同時実行数の上限やタスク管理の作りこみが必要で、取りこぼし時の再実行制御も自作になるため継続転送より運用負荷が高くなる

C 請求アラームはコストの通知にすぎず、7 年保持の要件を満たすアーカイブそのものは実現されない。手動運用も現実的ではない

D(正解) 正解。CloudWatch Logs 側は短期保持でコストを抑え、Firehose による継続配信と S3 ライフサイクルで 7 年分を安価にアーカイブできる

ログ集約/保管

Q21. Amazon ECS on AWS Fargate 上のマイクロサービスで、すべての標準出力ログは分析基盤の Amazon OpenSearch Service へ、ERROR レベルのログのみ別途 S3 の長期保管バケットへ送りたいという要件が出ました。アプリケーションのコードは変更せず、タスク定義の変更だけで実現したいです。最も適切な方法はどれですか?

  1. A. タスク定義で FireLens ログドライバーを設定し、Fluent Bit のサイドカーで出力先を条件により振り分ける
  2. B. awslogs ログドライバーを 2 つ設定し、片方を OpenSearch Service、もう片方を S3 バケットへ向ける
  3. C. awslogs ログドライバーで CloudWatch Logs に集約し、ロググループに 2 本のメトリクスフィルタを設定して各宛先へ配信する
  4. D. Fargate タスクに EBS ボリュームをアタッチし、ログファイルを保存して日次バッチで両方の宛先へコピーする
答えと解説を見る

正解:A

A(正解) 正解。FireLens は Fluent Bit の設定でフィルタと複数出力を定義できるため、アプリを変更せずタスク定義だけでルーティングを実現できる

B コンテナに設定できるログドライバーは 1 つだけで、awslogs の出力先は CloudWatch Logs のロググループのみである

C メトリクスフィルタはログをメトリクス化するだけで、ログ本文を他サービスへ配信する機能はない。転送にはサブスクリプションフィルタが必要

D 永続ボリュームを介したバッチ転送はリアルタイム性がなく、タスク終了時のログ喪失リスクもあり、コンテナのログ収集手段として不適切である

ログ集約/保管

Q22. セキュリティ部門から、個人情報を含む可能性のあるアプリケーションログについて、保管時に暗号化したうえで暗号化キーの権限と利用状況を組織側で管理・監査できる状態にするよう指示がありました。ログは引き続き Logs Insights で検索でき、アプリケーションの改修は伴わないことが条件です。既存の CloudWatch Logs のロググループに適用する構成として最も適切なものはどれですか?

  1. A. ロググループにサーバー側暗号化(SSE-S3)を有効化し、キーのローテーション間隔を 1 年に設定する
  2. B. アプリケーション側で AWS Encryption SDK を用いてログ本文を暗号化してから PutLogEvents で送信する
  3. C. カスタマー管理の KMS キーを作成し、キーポリシーで logs サービスプリンシパルを許可したうえでロググループに関連付ける
  4. D. ロググループを保持期間 1 日に設定し、Data Firehose 経由で S3 に転送してからバケットのデフォルト暗号化に任せる
答えと解説を見る

正解:C

A SSE-S3 は S3 の暗号化オプションであり、CloudWatch Logs のロググループに設定するものではない。キー管理の監査要件も満たせない

B 暗号化は実現できるが、Logs Insights での検索やメトリクスフィルタが機能しなくなり、アプリ改修も必要なため要件に対して過剰かつ運用性を損なう

C(正解) 正解。CloudWatch Logs は associate-kms-key でカスタマー管理キーを指定でき、キーポリシーと CloudTrail によって利用の管理と監査が可能になる

D 転送後は暗号化されるが、CloudWatch Logs 上に保持される期間は要件どおりの暗号化がされず、保管時暗号化の要求を満たさない

インシデントとイベントへの対応

EventBridge/イベント駆動

Q23. あるチームは、S3 バケットにアップロードされた画像のうち、特定のプレフィックス配下かつ拡張子が .png のオブジェクトだけを、Lambda 関数と Step Functions ステートマシンの両方で並行処理したいと考えています。今後ターゲットを追加する際にバケット側の設定変更を不要にし、抽出条件もあとから柔軟に変更できるようにしたいです。最も運用負荷が低い構成はどれですか?

  1. A. S3 バケットで EventBridge への通知を有効化し、ルールのイベントパターンで対象を絞って複数ターゲットを登録する
  2. B. S3 のイベント通知でプレフィックスとサフィックスを指定し、宛先ごとに通知設定を1件ずつ追加していく
  3. C. CloudTrail のデータイベントを有効化し、AWS API Call via CloudTrail イベントをルールで受け取って処理する
  4. D. S3 のイベント通知を SNS トピックへ送り、両ターゲットをサブスクライブしてフィルターポリシーで絞り込む
答えと解説を見る

正解:A

A(正解) 正解。S3 の EventBridge 通知は1本のイベント配信で済み、条件変更もターゲット追加もルール側の変更だけで完結する

B 宛先を増やすたびにバケット設定の変更が必要になり、抽出条件もプレフィックスとサフィックスに限定されるため拡張性が低い

C オブジェクトレベルのデータイベントは記録コストが大きく配信遅延も増える。ネイティブな通知で足りる場面で CloudTrail を経由させる必然性がない

D SNS の属性フィルターは発行側がメッセージ属性を設定している前提だが、S3 通知はオブジェクトキーを属性として持たないため .png だけを抽出できない

EventBridge/イベント駆動

Q24. EventBridge のルールから Amazon GuardDuty の検出結果を SNS 経由でメール通知していますが、本文が JSON のままで運用担当者が読みづらいという苦情が出ています。Lambda 関数などのコンポーネントを増やさずに、重大度・アカウントID・検出タイプだけを含む短い文面に整形して通知したいです。どの方法を採るべきですか?

  1. A. ルールのターゲット設定で入力トランスフォーマーを構成し、抽出した値を埋め込んだ文字列を SNS に渡す
  2. B. ルールのターゲットに入力パスのみを指定し、JSON から必要なフィールドだけを切り出して SNS に送信する
  3. C. GuardDuty の検出結果を Security Hub に集約し、Security Hub の通知設定で本文テンプレートを指定する
  4. D. SNS のサブスクリプションフィルターポリシーで不要なフィールドを除外し、残りを本文として配信する
答えと解説を見る

正解:A

A(正解) 正解。入力トランスフォーマーは入力パスで取り出した値をテンプレートに差し込めるため、追加の実行基盤なしで通知文を整形できる

B 入力パスは値の切り出しだけを行い、複数の値を1つの文章に組み立てることはできない。整形にはテンプレートを伴う入力トランスフォーマーが要る

C Security Hub には通知本文のテンプレートを定義する機能がなく、検出結果の集約先を増やしても本文の見た目は変わらない

D フィルターポリシーはメッセージを配信するかどうかを判定するだけで、本文の一部を削ったり書き換えたりする用途には使えない

EventBridge/イベント駆動

Q25. 決済システムでは注文イベントを EventBridge のカスタムバス経由で複数のマイクロサービスに配信しており、そのバスではアーカイブを有効にしています。あるサービスの不具合で過去6時間分のイベント処理に失敗していたことが後から判明しました。ほかのサービスには重複配信せず、障害中のイベントだけを修正後のサービスへ再度届けたいです。最も適切な方法はどれですか?

  1. A. アーカイブから対象期間を指定してリプレイを開始し、再配信先として当該サービスのルールだけを選択する
  2. B. アーカイブから対象期間のイベントをエクスポートし、PutEvents API で同じイベントバスに再投入する
  3. C. ターゲットに設定した DLQ のメッセージを再処理用の Lambda で読み出し、サービスの API を直接呼び出す
  4. D. イベントバスのルールを一度無効化してから有効化し、保留されているイベントを再送させる
答えと解説を見る

正解:A

A(正解) 正解。リプレイは期間と再生対象のルールを指定できるため、影響を受けたサービスにだけ過去のイベントを再配信できる

B 再投入したイベントはバス上の全ルールに一致し得るため、正常に処理済みだったほかのサービスにも重複配信されてしまう

C DLQ に入るのはターゲットへの配信自体に失敗したイベントだけで、配信後にサービス内部で処理が失敗したイベントは含まれない

D EventBridge は配信済みのイベントをバスに保持しないため、ルールを操作しても過去のイベントが再送されることはない

EventBridge/イベント駆動

Q26. 組織には50を超える AWS アカウントがあり、各アカウントで発生する EC2 インスタンスの状態変化などのイベントを、監査用の中央アカウントに集約して分析したいと考えています。イベントは取りこぼしなく中央へ届ける必要があり、新しいアカウントが追加されても設定作業がほとんど増えない形にしたいです。メンバーアカウント側で独自の転送基盤を維持することは避けたいです。最も適切な設計はどれですか?

  1. A. 各アカウントの Lambda 関数でイベントを受け取り、中央アカウントの API Gateway へ HTTPS で転送する共通テンプレートを配布する
  2. B. 中央アカウントのイベントバスに組織を許可するリソースポリシーを付与し、中央バスへ転送するルールを StackSets で配布する
  3. C. 中央アカウントのルールで各メンバーアカウントのデフォルトイベントバスをソースに指定し、まとめて取得する
  4. D. 各アカウントの CloudTrail を中央の S3 バケットへ集約し、S3 イベントを起点に中央のイベントバスへ変換する
答えと解説を見る

正解:B

A EventBridge のクロスアカウント配信をそのまま使えば済むところに、独自の転送基盤と再試行処理の保守が発生してしまう

B(正解) 正解。イベントバスのリソースポリシーで組織単位の PutEvents を許可し、転送ルールを StackSets の自動デプロイで配ればアカウント追加時の作業がなくなる

C ルールは自分のアカウントのイベントバス上のイベントしか評価できず、他アカウントのバスを直接参照する設定は存在しない

D CloudTrail の配信は数分の遅延があり、インスタンスの状態変化のような API 呼び出し以外のサービスイベントは記録対象にならない

セキュリティとコンプライアンス

IAM/権限管理

Q27. ある企業では開発チームがサーバーレスアプリケーションを頻繁に追加しており、そのたびに Lambda 実行ロールの作成をクラウド基盤チームへ依頼しています。基盤チームは依頼対応が負担になっているため、開発者自身にロールを作成させたいと考えていますが、開発者が管理者相当の権限を持つロールを作って権限昇格することは確実に防がなければなりません。最も運用負荷が低く安全な方法はどれですか?

  1. A. 開発者にはロール作成を許可せず、共通の Lambda 実行ロールを全関数で共有させる
  2. B. 開発者に iam:CreateRole を許可し、iam:PermissionsBoundary 条件で境界の付与を必須にする
  3. C. 開発者に IAMFullAccess を付与したうえで、作成されたロールを AWS Config のカスタムルールで検査して通知する
  4. D. 開発者アカウントに適用する SCP で iam:CreateRole を拒否し、申請フローでの作成を継続する
答えと解説を見る

正解:B

A 共通ロールの権限は全関数が必要とする権限の和集合になり、最小権限から大きく乖離する。委任という要件も満たさない

B(正解) 正解。アクセス許可境界の付与を条件で強制すると、作成されたロールの実効権限は境界の範囲内に制限されるため、権限昇格を防ぎつつロール作成を委任できる

C IAMFullAccess は自身の権限を拡大できるため権限昇格を許す。Config は発見的統制であり、危険なロールが作られる瞬間を止められない

D ロール作成を委任するという目的に反し、基盤チームの負担も現状のまま変わらない。ガードレールとしては機能するが課題の解決にならない

IAM/権限管理

Q28. GitHub でホストしているリポジトリの GitHub Actions ワークフローから、AWS アカウントへアプリケーションをデプロイしています。現在は IAM ユーザーのアクセスキーを GitHub のシークレットに保存していますが、長期認証情報を廃止し、さらに特定のリポジトリの main ブランチで実行されるワークフローだけがデプロイロールを引き受けられる状態にしたいと考えています。最も適切な実装はどれですか?

  1. A. OIDC ID プロバイダーを登録し、信頼ポリシーで sub を該当リポジトリの refs/heads/main に限定する
  2. B. OIDC ID プロバイダーを登録し、信頼ポリシーの条件は aud が sts.amazonaws.com であることのみとする
  3. C. アクセスキーは維持したまま Secrets Manager に保存し、90 日ごとに自動ローテーションさせる
  4. D. デプロイ用 IAM ユーザーのポリシーに aws:SourceIp 条件を追加し、GitHub の実行環境の IP 範囲に限定する
答えと解説を見る

正解:A

A(正解) 正解。OIDC フェデレーションで長期キーが不要になり、sub 条件でリポジトリとブランチを限定することで意図したワークフローだけがロールを引き受けられる

B aud だけでは GitHub 上の任意のリポジトリのワークフローがロールを引き受けられてしまう。sub による絞り込みが欠かせない

C ローテーションしても長期認証情報が存在し続けるため、廃止という要件を満たさない。ブランチ単位の制限も実現できない

D GitHub ホストランナーの IP 範囲は広大かつ変動し、他の利用者とも共有される。長期キーも残るため要件を満たさない

IAM/権限管理

Q29. 本番アカウントには長年運用されてきた EC2 インスタンスプロファイル用のロールがあり、複数のサービスに対してワイルドカードのアクションを許可しています。監査指摘を受け、実際に使用されている API アクションだけに絞り込みたいと考えています。過去 90 日分の CloudTrail 証跡は S3 に保管されています。アクション単位のポリシー案を最小の手作業で得る方法はどれですか?

  1. A. IAM コンソールのアクセスアドバイザーで最終アクセス日時を確認し、未使用のサービスを除外する
  2. B. IAM Access Analyzer の外部アクセス分析を有効化し、検出結果に含まれないアクションを削除する
  3. C. IAM Access Analyzer のポリシー生成で、対象ロールと CloudTrail 証跡を指定してポリシーを生成する
  4. D. CloudTrail Lake でイベントを集計し、抽出したアクション一覧から手作業でポリシーを書き起こす
答えと解説を見る

正解:C

A 最終アクセス情報は原則としてサービス単位の粒度であり、サービス内のどのアクションが使われたかまでは特定できない

B 外部アクセス分析は組織外と共有されているリソースを検出する機能で、ロールの権限使用実績とは無関係

C(正解) 正解。ポリシー生成は指定期間の CloudTrail から実際に呼び出されたアクションを抽出し、アクション単位の IAM ポリシーを自動生成する

D 技術的には可能だが、クエリ作成とポリシーの手書きが必要で手作業が多く、最小の手間という要件に反する

IAM/権限管理

Q30. 外部の SaaS 型コスト最適化ベンダーに、自社アカウントの読み取り専用アクセスを提供することになりました。ベンダーは自社の AWS アカウントからクロスアカウントロールを引き受ける方式を求めています。ベンダーが他の顧客向けの処理で誤って自社のリソースへアクセスしてしまう、いわゆる混乱した代理問題を防ぎたいと考えています。信頼ポリシーに加えるべき設定はどれですか?

  1. A. aws:MultiFactorAuthPresent が true であることを条件に追加し、MFA を必須にする
  2. B. aws:PrincipalOrgID 条件で自社の組織 ID に一致することを必須にする
  3. C. ロールの最大セッション時間を 1 時間に短縮し、読み取り専用ポリシーだけを付与する
  4. D. ベンダーが顧客ごとに発行する一意の値を sts:ExternalId 条件で必須にする
答えと解説を見る

正解:D

A ベンダーの自動化処理は MFA を提示できないため運用が成立しない。そもそも混乱した代理問題への対策ではない

B ベンダーは自社組織の外部にいるため、この条件を課すとすべてのアクセスが拒否され、連携そのものが成立しない

C 権限と有効期間は狭められるが、ベンダーが顧客を取り違えて自社アカウントを操作する事象そのものは防げない

D(正解) 正解。外部 ID を条件に含めると、その値を知る呼び出しだけがロールを引き受けられるため、第三者による混乱した代理問題を防止できる

続きは演習アプリで

このページの30問は、演習アプリなら弱点に合わせた出題・成績記録つきで解けます。全200問と本番形式の模擬試験は期間パス(1,500円/30日、自動更新なし)で利用できます。

AWS DOPの演習を無料で始める →

AWS DOP問題集の詳細(出題範囲・よくある質問)→

掲載している問題はすべてトキヌクのオリジナル問題です。実試験問題の流出コピー(ブレインダンプ)は一切使用していません。本サービスは非公式の学習教材であり、各認定団体とは提携・承認・後援関係にありません。試験名は各団体の商標または登録商標です。
トキヌク トップページへ