


更新履歴
2026/1: 演習問題1~4(全問題) (レビュー対応)重複している問題を新規の問題に入れ替えました。
2025/11: 演習問題1~4(全問題) アーキテクチャ系の問題の解説に図解追加、EOLサービスの削除&古い問題の差し替え
2025/3: 演習問題4 網羅性向上のため問題を追加しました。( +50問)
2025/6: 演習問題1~4(全問題) 解説を大幅強化しました。また、古い傾向の問題を削除し、新しい傾向の問題に差し替えました。(OpsWork、CodeStarなどの廃止サービスの削除、App Runnerなどの新規サービスの問題を追加)
2026/2: 出題順序固定版の演習問題を追加しました。※出題順序固定版は演習1~4と同じ問題です。
2026/5: 一部新傾向の問題に差し替えました。
2026/8: AWSアップデートに対応するため問題と解説を全面的に修正&入れ替えしました。
コース紹介
DVA-C02の全ての出題範囲を網羅した実践問題集です。
AWS DVA(AWS Certified Developer - Associate)に合格したい方はもちろんのこと、AWSでシステム開発される方の開発能力、セキュリティ能力、デプロイ能力、トラブルシュート能力を向上するために最適なコースです。
本問題集のサンプル
以下本問題集のサンプル問題で自分が求めているレベルかを確認してください
問題文:
ある開発チームが、AWS Serverless Application Model (AWS SAM) で新しいアプリケーションのデプロイを自動化しています。このアプリケーションは、収集した CSV ファイルを保管する 1 つの Amazon S3 バケットと、そのファイルを読み込んで JSON へ整形する 1 つの AWS Lambda 関数で構成されます。関数がバケットに対して行うのは CSV の読み取りだけで、書き込みは一切発生しません。
この読み取り専用のアクセス許可を与えるには、AWS SAM をどう構成すべきですか?
選択肢:
A. SAM テンプレートの S3 バケットリソースに AccessControl プロパティを追加し、読み取り用の ACL を指定します。
B. SAM テンプレートに AWS::Lambda::Permission リソースを追加し、S3 からの呼び出しを許可します。
C. SAM テンプレートの関数の Policies に S3ReadPolicy を指定し、BucketName に対象バケットを渡します。
D. SAM テンプレートで S3 バケットにバケットポリシーを追加し、Principal に Lambda のサービスプリンシパルを指定します。
考えてからスクロールしてください
・
・
・
・
・
・
・
・
正解:C
A. SAM テンプレートの S3 バケットリソースに AccessControl プロパティを追加し、読み取り用の ACL を指定します。
不正解 ACLで受け取り手として指定できるのは、AWSアカウント、正規ユーザーID、認証済みユーザーなどの事前定義グループに限られます。IAMロールを名指しして権限を渡す書き方が用意されていないため、この関数だけに読み取りを許すという要件を表現できません。加えて、現在のS3ではオブジェクト所有者の設定が既定でバケット所有者強制となっておりACL自体が無効化されているため、所有者以外へ権限を与えるACLを指定するとAccessControlListNotSupportedで拒否されます。バケット内のデータへの許可は、IAMポリシーとバケットポリシーで表現します。
B. SAM テンプレートに AWS::Lambda::Permission リソースを追加し、S3 からの呼び出しを許可します。
不正解 AWS::Lambda::Permissionが書き換えるのは関数側のリソースベースポリシーで、決まるのは「誰がこの関数を起動してよいか」です。要件は関数がバケットの中身を読めるようにすることなので、許可の向きが逆になっています。このリソースが要るのは、ファイルの到着をきっかけに関数を起動する構成のように、S3が呼び出す側に回る場合です。関数から他のサービスへ出ていくアクセスは、実行ロールに付けるアイデンティティベースのポリシーで制御します。
C. SAM テンプレートの関数の Policies に S3ReadPolicy を指定し、BucketName に対象バケットを渡します。
正解 Policiesは、SAMが自動生成する実行ロールに何を付けるかを宣言する場所です。ここにS3ReadPolicyという名前とBucketNameの2つを書くだけで、デプロイ時にSAMがIAMポリシードキュメントへ展開し、生成した実行ロールへアタッチします。展開されるアクションはs3:GetObject、s3:GetObjectVersion、s3:ListBucket、s3:GetBucketLocation、s3:GetLifecycleConfigurationで、書き込み系は一切含まれません。BucketNameに渡した値からリソースのARNが組み立てられるため、許可の範囲はそのバケットと配下のオブジェクトに限定されます。同じテンプレート内のバケットであれば!Refで渡せるので、バケット名を文字列で書き写す必要もありません。
D. SAM テンプレートで S3 バケットにバケットポリシーを追加し、Principal に Lambda のサービスプリンシパルを指定します。
不正解 バケットポリシーそのものはS3への読み取りを許可できる正しい手段ですが、Principalの書き方が実際のリクエストと噛み合いません。関数のコードがS3を呼び出すとき、認証情報として使われるのは実行ロールを引き受けて得た一時的なものであり、リクエストの主体はlambda. amazonaws. comではなく引き受け後のロールセッションになります。そのためサービスプリンシパルを許可したポリシーは評価時に一致せず、アクセスは拒否されます。lambda. amazonaws. comをPrincipalに書くのは、S3側からLambdaを呼び出す構成のように、サービス自身が主体となってリクエストを送る場合です。
全体的な説明
問われている要件
収集したCSVを扱う関数とバケットを、SAMでまとめてデプロイすること
関数からバケットへのアクセスを読み取りだけに絞ること
独自のIAMポリシーを書かずにテンプレートの中で権限を宣言すること
許可の範囲を対象のバケットとその配下に限定すること
前提知識
SAM が肩代わりする実行ロールの作成
AWS SAMはCloudFormationの上に乗る変換の仕組みで、AWS::Serverless::Functionを1つ書くと、関数本体に加えて実行ロールが自動的に作られます:
生成されたロールには、まずCloudWatch Logsへログを書くための最小限の権限が入る
そこへ何を足すかを宣言する場所がPoliciesである
Roleプロパティで既存のロールのARNを渡した場合は、自動生成は行われない
生成物は最終的にCloudFormationのリソースになるため、スタックの更新で権限の変更も追跡できる
Policies に書ける4つの形式
Policiesは配列で、次を混在させて並べられます:
ポリシーテンプレート: S3ReadPolicyのように用途とパラメータが決まった短い記法
AWS管理ポリシー: 名前またはARNによる指定
インラインのIAMポリシードキュメント: StatementやActionを自分で書き下す形式
AWS::Serverless::Connector: Policiesとは別に、送信元と送信先とアクセス種別を宣言して権限を導出させる方法
S3ReadPolicy が展開する内容
このテンプレートはBucketNameを1つ受け取り、次のアクションを許可します:
s3:GetObject / s3:GetObjectVersion: オブジェクト本体の取得と、バージョニング有効時の特定バージョンの取得
s3:ListBucket: バケット直下のキーを列挙する
s3:GetBucketLocation: バケットの所在リージョンを問い合わせる
s3:GetLifecycleConfiguration: 設定済みのライフサイクルルールを読む
リソースの範囲: BucketNameから組み立てたARNにより、対象のバケットとその配下のオブジェクトに限定される
代表的なポリシーテンプレート
同じ発想のテンプレートが用途ごとに用意されています:
DynamoDBCrudPolicy: テーブルへの読み書き
SQSPollerPolicy: キューを監視してメッセージを取り出す
SNSPublishMessagePolicy: トピックへの発行
CloudWatchPutMetricPolicy: カスタムメトリクスの送信
テンプレートの記述例
(本編ではコードブロックが記載されます。)
許可を書く場所によって変わる意味
同じ「許可」でも、どのリソースに書くかで効果が変わります:
実行ロールのポリシー: その関数が何にアクセスできるかを決める。同一アカウント内ならこれだけでバケットへ到達できる
バケットポリシー: 別アカウントからの利用を許したり、暗号化やHTTPSを条件として強制したりする場合に使う
関数のリソースベースポリシー: 誰がその関数を起動できるかを決める設定で、アクセス先の権限とは無関係
ACL: 現在は既定で無効化されており、IAMロール単位の制御にも使えない
図による解説
★本編にはアーキテクチャ図が添付されます★
アーキテクチャ図の解説
この図は、SAM テンプレートに書いた 1 つの宣言が、実行ロールの権限になるまでの流れを表しています。
template.yaml の Policies に S3ReadPolicy と BucketName を書いてデプロイすると、SAM がその宣言を IAM ポリシードキュメントへ展開し、自動生成した Lambda 実行ロールへアタッチします。
DataFormatterFunction はこのロールを引き受けて実行されるため、独自の IAM ポリシーを用意しなくても SourceDataBucket から CSV を読み取れます。
解くための考え方
まず、許可をどこに書くかで意味が変わることを整理します。関数が外部のサービスへ出ていくアクセスは、実行ロールに付けるポリシーだけが制御できます。バケット側やクライアント側に書く案は、向きが要件と合っていないか、IAMロールを名指しできない仕組みのため成立しません。
そのうえで、実行ロールに読み取り権限を足す最短の書き方がポリシーテンプレートです。Policiesの1項目としてS3ReadPolicyを並べ、BucketNameに対象を渡すだけで、SAMが必要なアクションとリソースを組み立ててくれます。
インラインのIAMポリシードキュメントを書くこともできますが、アクションの列挙やARNの組み立てを手作業で行うぶん、対象の取り違えや権限の付けすぎを招きやすくなります。用途に合うテンプレートがあるなら、そちらを選ぶほうが簡潔で安全です。
参考資料(本編にはリンクが付いております。)
AWS SAM テンプレートの概念
SAM ポリシーテンプレート
AWS SAM ポリシーテンプレートのリスト
オブジェクトの所有権の制御と ACL の無効化
AWS SAM コネクタによるリソースのアクセス許可の管理
DVA-C02の特徴
実践的なシナリオベースの出題です。単にAWSサービスの機能を理解しておくだけでは点数を取ることは難しいです。どのような要件で各AWSサービスを用いればよいのかを説明できるように力をつけておくことが大切です。
本問題集の特徴
DVA-C02の出題形式に沿った本番ライクな問題
全問題に詳細な解説とAWS公式ドキュメントへのリンクを記載
不正解選択肢の理由についての解説