変更要約: in-scopeサービス網羅(軸B): s3にSystems Manager(Parameter Store)とAppConfigによる設定/フィーチャーフラグ外部化の定義・役割・選択基準を追記。
3.1IAM とアプリの認可
IAM ロールによる一時認証情報(Lambda/EC2 にキーを埋め込まない)、最小権限のポリシー、ロールの引き受け(AssumeRole)といった、アプリの認可の基礎を理解します。DVA-C02 の「セキュリティ」の中心です。
アプリが AWS サービスへアクセスする際、アクセスキーをコードに埋め込むのは厳禁です。代わりに IAM ロール を使い、一時認証情報を安全に受け取ります。
3.1.1コードに権限を与える方法
- IAM ロール:Lambda や EC2 に付与すると、SDK が自動で一時認証情報を取得する。長期キー不要。
- 最小権限:ポリシーで必要な操作(Action)・リソース(Resource)だけを許可する。明示的 Deny は常に優先。
- AssumeRole(STS):別アカウントや別ロールの権限を一時的に引き受ける(STS が一時認証情報を発行)。クロスアカウントアクセスの定番。
- ポリシーの種類:アイデンティティベース(ユーザー/ロールにアタッチ)とリソースベース(S3 バケットポリシー等)。両者の評価で可否が決まる。
DVA-C02 の「セキュリティ」で最重要なのは「アプリにアクセスキーを埋め込まない」ことです。Lambda や EC2 には IAM ロール(実行ロール)を付与し、SDK が自動で一時認証情報を取得します。権限は最小権限で、必要な Action と Resource だけを Allow にし、評価では明示的な Deny が常に勝つ点を押さえます。別アカウントや別ロールの権限が必要なときは STS の AssumeRole で一時的に引き受けます(キーの受け渡しは不要)。ポリシーにはアイデンティティベース(ロール/ユーザーにアタッチ)とリソースベース(S3 バケットポリシー等)があり、両方の評価でアクセス可否が決まります。誤り選択肢の定番は「アクセスキーをコードや環境変数に平文で置く」です。
| やりたいこと | 手段 |
|---|---|
| Lambda/EC2 から AWS へアクセス | IAM ロール(実行ロール) |
| 別アカウント/別ロールの権限を一時取得 | STS AssumeRole |
| S3 バケット側でアクセス許可 | リソースベースポリシー |
| 過剰権限を避ける | 最小権限+明示的 Deny |
もう一段細かく見ると、ポリシーの評価には順序があります。まず明示的 Deny があれば即拒否。次にいずれかの Allow があり、かつ Deny が無ければ許可。デフォルトは暗黙的な拒否です。条件キー(Condition) を使えば「特定の IP からのみ」「MFA 必須」「タグが一致する場合のみ」といったきめ細かな制御ができます。アクセス許可境界(Permissions Boundary) は、ロール/ユーザーが持てる権限の上限を定め、開発者が自分用ロールを作るときの過剰付与を防ぎます。ポリシーは AWS 管理ポリシー・カスタマー管理ポリシー・インラインポリシーの3種があり、再利用や監査のしやすさからカスタマー管理ポリシーが推奨されます。Lambda では実行ロールに加えて、リソースベースポリシーで「どのサービス(S3・API Gateway 等)が関数を呼べるか」を制御する点も押さえます。
シナリオ:Lambda から別アカウントの S3 へ。 まず Lambda に実行ロールを付与(キー埋め込み禁止)。別アカウントの S3 にアクセスするため、相手アカウントのロールを STS AssumeRole で一時引き受け、最小権限(その バケットの GetObject だけ)に絞る。S3 側にもバケットポリシー(リソースベース)で許可。アクセス可否はアイデンティティ側とリソース側の両評価で決まります。
混同に注意:
①アクセスキー直書き/平文環境変数は厳禁——IAM ロールで一時認証情報を使う。
②AssumeRole(STS)はクロスアカウント/一時権限の手段。
③アイデンティティベースとリソースベースのポリシーは両方評価される。
④明示的 Deny は常に Allow に勝つ。
Q. Lambda の権限はどう与える? 実行ロール(IAM ロール)でキーを埋め込まずに付与。Q. 別アカウントのリソースにアクセスするには? STS AssumeRole で相手ロールを一時引き受け。Q. アイデンティティベースとリソースベースの違いは? 前者はロール/ユーザーにアタッチ、後者はリソース(S3 バケット等)に付与。両方の評価で可否が決まる。
「Lambda/EC2 から AWS へアクセス=IAM ロール(キー埋め込み禁止)」「一時的に別ロールの権限=STS の AssumeRole」「最小権限+明示的 Deny 優先」「アイデンティティ/リソースベース両評価」 は DVA で頻出です。アクセスキーの直書きは誤り選択肢の定番。
3.1.2この節のまとめ
- アプリの認可=IAM ロール(一時認証情報)、キーは埋め込まない
- 最小権限+明示的 Deny 優先、クロスアカウントはSTS AssumeRole、ポリシーはアイデンティティ/リソースの両評価
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. Lambda 関数が S3 へアクセスする際の安全なベストプラクティスはどれですか?
Q2. 別アカウントのロールの権限を一時的に引き受けて操作したい。何を使いますか?
Q3. IAM ポリシー設計の原則として最も適切なものはどれですか?

