Instiq
第3章 · セキュリティ·v2.1.0·更新 2026/6/14·読了目安 約9分

変更要約: in-scopeサービス網羅(軸B): s3にSystems Manager(Parameter Store)とAppConfigによる設定/フィーチャーフラグ外部化の定義・役割・選択基準を追記。

3.1IAM とアプリの認可

この節の要点

IAM ロールによる一時認証情報(Lambda/EC2 にキーを埋め込まない)、最小権限のポリシー、ロールの引き受け(AssumeRole)といった、アプリの認可の基礎を理解します。DVA-C02 の「セキュリティ」の中心です。

アプリが AWS サービスへアクセスする際、アクセスキーをコードに埋め込むのは厳禁です。代わりに IAM ロール を使い、一時認証情報を安全に受け取ります。

3.1.1コードに権限を与える方法

Lambda/EC2(あなたのアプリ)に IAM ロールを付与すると、ロールが自動的に引き受けられて一時認証情報が渡され、S3/DynamoDB などの AWS サービスへアクセスできる流れを示し、アクセスキーを直書きしない旨を添えた図。
IAM ロールで一時認証情報を渡す
  • 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 ポリシー設計の原則として最も適切なものはどれですか?

理解度を確認第3章「セキュリティ」の問題を解く