SAA / ドメイン1 セキュアなアーキテクチャの設計
重要な内容
AWS IAM (Identity and Access Management)
は、AWS アカウント内で「誰が、どのリソースに、何をしてよいか」を制御するためのサービスです。 ユーザー、グループ、ロール、ポリシーを使って、AWS リソースへの認証と認可を管理します。
SAA では、IAM を単独サービスとして暗記するよりも、、、、、、 Endpoint などと組み合わせた権限設計を判断できることが重要です。 特に、長期を避けて IAM ロールとを使う設計、、アクセス、明示的な拒否の優先順位がよく問われます。
Point
- IAM = Identity and Access Management の略です。
- Identity は「身元」や「ID」、Access は「利用」、Management は「管理」という意味です。
- つまり IAM は「誰が何にアクセスできるかを管理するサービス」と覚えます。
- 和訳
- Identity: 身元、同一性
- Access: アクセス、利用
- Management: 管理
- Weblio英和辞書「identity」
概要
は、AWS の権限管理の中心になるサービスです。 人間が にサインインする場合も、 や が や にアクセスする場合も、最終的には「その主体に許可があるか」を評価します。
IAM では、操作する主体をプリンシパルと呼びます。 代表的なプリンシパルには、IAM ユーザー、IAM ロール、AWS サービス、ユーザーがあります。 プリンシパルに対して、 形式のポリシーで許可または拒否を定義します。
SAA の学習では、IAM ユーザーを作る手順よりも、「長期認証情報を置かずにアクセスさせるには何を使うか」「で安全に委任するには何を設定するか」「どのポリシーが最終的な権限を制限するか」を判断します。
| 見るポイント | 代表的な判断 |
|---|---|
| 人間のアクセスか、アプリケーションのアクセスか | 人間は やフェデレーション、AWS サービスは IAM ロールを優先します。 |
| 長期認証情報が必要か | 原則としてを埋め込まず、を使います。 |
| どこまで許可するか | で、必要な Action、Resource、Condition に絞ります。 |
| 複数アカウントをまたぐか | と権限ポリシーを持つ IAM ロールで委任します。 |
| 明示的な拒否があるか | 明示的な Deny は Allow より優先されます。 |
主要技術
①IAM アイデンティティとルートユーザー
の基本要素は、ユーザー、グループ、ロールです。 IAM ユーザーは特定の人やアプリケーションに対応する長期的なアイデンティティです。 IAM グループは複数ユーザーに同じ権限を付与するためのまとまりです。 IAM ロールは、必要なときに引き受けてを得るためのアイデンティティです。
| 要素 | 主な用途 | SAA での判断ポイント |
|---|---|---|
| アカウント作成時の完全権限主体 | 日常利用しません。 を有効化し、最小限の作業だけに使います。 | |
| IAM ユーザー | 例外的な長期認証情報、緊急アクセス | ロールやで代替できない場合に限定します。 |
| IAM グループ | ユーザーへの権限一括付与 | グループにポリシーを付け、個別ユーザーへの直接付与を減らします。 |
| IAM ロール | AWS サービス、、フェデレーション | SAA では最も重要です。一時的な認証情報を使います。 |
| 組織内ユーザーの | 複数アカウントへの人間のアクセス管理で検討します。 |
ルートユーザーは AWS アカウント全体に対する強い権限を持ちます。 通常の運用、アプリケーション実行、日常的な管理作業では使いません。 ルートユーザーには MFA を設定し、は作成しない設計が基本です。 現在はルートユーザーの MFA が既定で強制され、作成時やサインイン時に登録を求められます。
を使う場合は、メンバーアカウントのルートアクセスを一元管理できます。 この機能を有効にすると、メンバーアカウントのルートユーザーのパスワード、アクセスキー、署名証明書を削除し、MFA を無効化できます (組織で新しく作るアカウントは、最初からルートの認証情報を持ちません)。 ルートユーザーでしかできない作業のうち、全プリンシパルを拒否してしまった ポリシーや キューポリシーの削除などは、管理アカウントまたは IAM の委任管理者が特権タスクとして短時間のルートセッションで実行できます。 長期のルート認証情報を各アカウントに残さずに済むため、多数のアカウントでルートのパスワードと MFA デバイスを保管する運用が不要になります。
| ルートの守り方 | 内容 | 向いている場面 |
|---|---|---|
| MFA の登録とアクセスキーの不作成 | 単独のアカウントでも必ず行う基本対策です。 | すべてのアカウント |
| ルートアクセスの一元管理 | メンバーアカウントのルート認証情報を削除し、特権タスクは管理アカウントから実行します。 | Organizations で多数のアカウントを持つ場合 |
| でルートユーザーの操作を拒否 | メンバーアカウントのルートユーザーにも SCP は効きます。 | 認証情報は残るため、上記と組み合わせます。 |
Point
- MFA = Multi-Factor Authentication(多要素認証) の略です。
- パスワードだけでなく、認証アプリや物理キーなど別の要素も使って本人確認します。
- Federation は「連携」や「連合」という意味です。
- 既存の社内 ID や外部 ID プロバイダーで認証し、AWS 側では一時的なアクセス権を得る考え方です。
- 和訳
- Factor: 要素
- Federation: 連合、連携
- Weblio英和辞書「federation」
⚠️ 頻出: 、、 などの AWS 上のワークロードにアクセスキーを埋め込む設計は避けます。サービスに IAM ロールを関連付け、一時的な認証情報を使わせます。
②IAM ポリシーの基本構造
ポリシーは、権限を定義する ドキュメントです。 どの操作を、どのリソースに対して、どの条件で許可または拒否するかを表します。
| 要素 | 意味 | 試験での見方 |
|---|---|---|
| Effect | Allow または Deny | 明示的な Deny は Allow より優先されます。 |
| Action | 許可・拒否する 操作 | s3:GetObject や ec2:StartInstances のように指定します。 |
| Resource | 対象リソース | ARN で絞ります。サービスによって指定粒度が異なります。 |
| Principal | 誰に許可するか | やで使います。 |
| Condition | 条件 | 、、タグ、暗号化、 Endpoint などで制限できます。 |
ポリシーには、とリソースベースポリシーがあります。 アイデンティティベースポリシーはユーザー、グループ、ロールに付けます。 リソースベースポリシーは ポリシーや IAM ロールの信頼ポリシーのように、リソース側に付けます。
| ポリシー種別 | 付ける場所 | 主な用途 |
|---|---|---|
| アイデンティティベースポリシー | ユーザー、グループ、ロール | その主体が実行できる操作を定義します。 |
| リソースベースポリシー | S3 バケット、 キュー、 キーなど | そのリソースへアクセスできる主体を定義します。 |
| 信頼ポリシー | IAM ロール | 誰がそのロールを引き受けられるかを定義します。 |
| Permissions Boundary | ユーザー、ロール | アイデンティティベースポリシーで許可できる最大範囲を制限します。 |
| の やアカウント | メンバーアカウントで利用可能な最大権限を制限します。 | |
| セッションポリシー | AssumeRole などのセッション | 一時セッションの権限をさらに狭めます。 |
| VPC Endpoint Policy | VPC Endpoint | 経由でアクセスできる主体やリソースを制限します。 |
Permissions Boundary、SCP、セッションポリシーは、原則として権限を付与するものではなく、最大権限を制限するものです。
たとえば SCP で s3:* が許可されていても、IAM ポリシーで S3 操作が許可されていなければ実行できません。
⚠️ 頻出: 「SCP で許可したのに操作できない」という考え方は誤りです。SCP は権限を与えず、上限を決める制御です。
③IAM ロールと一時的な認証情報
ロールは、特定の人に固定されないアイデンティティです。 ロールを引き受けると、 によってが発行されます。 この一時的な認証情報には有効期限があり、長期を配布したりアプリケーションに埋め込んだりする必要を減らせます。
| ロールの用途 | 例 | 判断ポイント |
|---|---|---|
| AWS サービスロール | から へアクセス、 から へアクセス | ワークロードにアクセスキーを置かず、ロールを関連付けます。 |
| ロール | Account A のユーザーが Account B のリソースを管理 | と AssumeRole 権限の両方が必要です。 |
| 用ロール | 社内 、SAML、OIDC から AWS へアクセス | 既存 ID を使い、一時的な AWS 権限を与えます。 |
| サービスリンクロール | AWS サービスがユーザーの代わりに操作 | サービスに紐づいたロールで、権限編集に制約があります。 |
| タスクロールとタスク実行ロール | のアプリが DynamoDB を操作する / ECS エージェントが からイメージを取得しログを送る | アプリが呼ぶ AWS の権限はタスクロール、イメージ取得・ログ送信・起動時のシークレット取得はタスク実行ロールに付けます。 |
| OIDC フェデレーション | GitHub Actions などの CI から AWS へデプロイ | IAM に OIDC ID プロバイダーを登録し、信頼ポリシーの条件でリポジトリやブランチを絞ります。アクセスキーを CI に保存しません。 |
| IAM Roles Anywhere | のサーバーから S3 へアクセス | 自社の CA をトラストアンカーとして登録し、X.509 証明書を持つ AWS 外のワークロードに一時的な認証情報を発行します。 |
ロールの認証情報を使ってさらに別のロールを引き受けることをロールの連鎖 (ロールチェーン) と呼びます。
ロールの連鎖で得たセッションは最長 1 時間に制限され、ロール側の最大セッション時間を 12 時間にしていても、1 時間を超える DurationSeconds を指定すると失敗します。
長時間の処理で連鎖が不要なら、最初のロール (EC2 のインスタンスプロファイルなど) に必要な権限を直接付けます。インスタンスプロファイルの認証情報は期限前に自動で更新されます。
AWS STS は一時的な認証情報を発行するサービスです。 一時的な認証情報は、数分から数時間の有効期限を持ち、期限切れ後は再利用できません。 EC2 インスタンスプロファイル、Lambda 実行ロール、ECS タスクロールなどは、この考え方で AWS リソースへ安全にアクセスします。
Point
- STS = Security Token Service の略です。
- Token は「一時的な証明書」のようなものです。
- STS は「一時的な AWS 認証情報を発行するサービス」と覚えます。
- AssumeRole は「ロールを引き受ける」という意味の API です。
- 和訳
- Token: しるし、証票
- Assume: 引き受ける、担う
- Weblio英和辞書「assume」
⚠️ 頻出: 「EC2 上のアプリケーションが S3 にアクセスするための最も安全な方法」は、EC2 に IAM ロールを関連付けることです。アクセスキーを 、ユーザーデータ、環境変数、コードに保存する設計は避けます。
④クロスアカウントアクセスと信頼ポリシー
アクセスでは、別アカウントの主体に自アカウントのリソース操作を委任します。 代表的な方法は、アクセス先アカウントに ロールを作り、アクセス元アカウントのユーザーやロールがそのロールを引き受ける構成です。
クロスアカウントロールには、2 種類の許可が必要です。
アクセス先アカウントのロール側では、でアクセス元を信頼します。
アクセス元アカウント側では、対象ロールを sts:AssumeRole できる権限を付与します。
| 必要な設定 | どこに設定するか | 目的 |
|---|---|---|
| 信頼ポリシー | アクセス先アカウントの IAM ロール | 誰がロールを引き受けられるかを指定します。 |
| 権限ポリシー | アクセス先アカウントの IAM ロール | ロールを引き受けた後に何ができるかを指定します。 |
| AssumeRole 許可 | アクセス元のユーザーまたはロール | 対象ロールを引き受ける操作自体を許可します。 |
| External ID | 第三者委任の信頼条件 | 混乱した代理問題を防ぐために使います。 |
外部ベンダーや監査サービスなど、第三者にアクセスを委任する場合は External ID が重要です。 External ID は、意図しない別顧客のロールを第三者が誤って引き受ける混乱した代理問題を防ぐための条件として使います。
ロールの信頼ポリシーには条件も書けます。
たとえば本番の管理者ロールに aws:MultiFactorAuthPresent の条件を付けると、 で認証した利用者だけがそのロールへ切り替え (スイッチロール) できます。
普段は読み取り専用の権限で作業し、変更作業のときだけ強い権限のロールへ切り替えると、誤操作と漏えい時の影響を小さくできます。
クロスアカウントアクセスには、ロールを引き受ける方法のほかに、 ポリシー、 キューポリシー、 キーポリシー、 ののように、リソースベースポリシーで相手アカウントのプリンシパルを直接許可する方法があります。
| 方法 | 呼び出し側の権限 | 向いている場面 |
|---|---|---|
| ロールを引き受ける | 引き受けている間は元の権限を手放し、ロールの権限だけで操作します。 | の操作など、リソースベースポリシーに対応しないサービスを操作する場合 |
| リソースベースポリシーで直接許可 | 自分の権限を持ったまま相手のリソースへアクセスします。 | 自アカウントのリソースと相手のリソースを同時に扱う場合 (自分のバケットへ相手のバケットからコピーするなど) |
リソースベースポリシーで別アカウントを許可した場合も、相手アカウント側の IAM ポリシーで同じ操作を許可しなければアクセスできません。アカウントをまたぐときは、両方のアカウントの許可が必要です。
組織内の全アカウントへ許可したいときは、アカウント ID を列挙せず、aws:PrincipalOrgID 条件で組織 ID を指定します。アカウントが増えてもポリシーを書き換えずに済みます。
⚠️ 頻出: クロスアカウントアクセスで「片側のポリシーだけ」では足りない問題が出ます。信頼ポリシー、ロールの権限ポリシー、呼び出し元の sts:AssumeRole 許可をセットで確認します。
⑤最小権限、条件、タグベース制御
設計の基本はです。 必要な操作だけを許可し、対象リソースをできるだけ絞り、必要に応じて Condition で追加条件を指定します。
| 制御方法 | 例 | 向いている要件 |
|---|---|---|
| Action の絞り込み | s3:GetObject のみ許可 | 読み取りだけ必要な場合に使います。 |
| Resource の絞り込み | 特定や特定 キーだけ許可 | 操作対象を限定します。 |
| Condition | 、送信元 、 Endpoint、タグなど | 状況に応じて許可・拒否を切り替えます。 |
| タグベースアクセス制御 | Project=Blue のリソースだけ操作 | 多数のリソースを属性で管理します。 |
| IAM Access Analyzer | 外部公開や未使用アクセスの分析 | 権限の見直しや過剰権限の検出に使います。 |
タグベースアクセス制御では、ユーザーやロールのタグと、リソースのタグを条件に使ってアクセスを制御します。 プロジェクト、環境、部門などの単位で権限を管理したいときに有効です。 ただし、タグを変更できる権限を広く与えると、実質的にアクセス権を拡大できるため注意が必要です。
タグベースアクセス制御は ABAC (属性ベースのアクセス制御) とも呼ばれます。
aws:ResourceTag/Project が ${aws:PrincipalTag/Project} と一致するときだけ許可するように書くと、プロジェクトが増えてもポリシーを追加せず、タグを付けるだけで権限が決まります。
職務ごとにポリシーを用意する RBAC (ロールベースのアクセス制御) は、プロジェクトや対象が増えるたびにポリシーの更新が必要になります。
Permissions Boundary は、開発者に IAM ロールの作成を任せるときの権限昇格の防止に使います。
iam:CreateRole を、指定した Permissions Boundary を付けることを条件 (iam:PermissionsBoundary) にして許可すると、開発者が作ったロールは境界を超える権限を持てません。
のポリシーでは、操作ごとに対象の ARN が違う点に注意します。
s3:ListBucket はバケットの ARN (arn:aws:s3:::bucket) に対する操作で、プレフィックスを絞るときは s3:prefix 条件を使います。
s3:GetObject や s3:PutObject はオブジェクトの ARN (arn:aws:s3:::bucket/prefix/*) に対する操作です。
IAM ユーザーに MFA を使わせたい操作は、aws:MultiFactorAuthPresent 条件で MFA 認証済みのセッションのときだけ許可します。
IAM Access Analyzer は、外部アクセスの分析やポリシーの検証に使います。 SAA では、公開されている S3 バケットやで引き受け可能なロールなど、意図しない外部アクセスを見つけるサービスとして押さえます。 組織を信頼ゾーンにした分析を作ると、組織外の主体からアクセスできるリソースだけを結果として洗い出せます。
既存の権限を最小権限へ絞り込む手段もあります。
| 手段 | 分かること | 使い方 |
|---|---|---|
| IAM Access Analyzer のポリシー生成 | に記録された実際の操作 | 指定期間の利用実績から、必要な操作だけを並べたポリシーのひな形を作ります。 |
| IAM Access Analyzer の未使用アクセスの分析 | 使われていないロール、、パスワード、権限 | 組織やアカウント全体の過剰な権限を継続的に見つけます (有料)。 |
| 最終アクセス情報 | サービスや操作ごとに最後に使われた日時 | 長く使われていない権限を削ります。 |
⚠️ 頻出: 「すべての S3 バケットにフルアクセス」より、「特定バケットの特定プレフィックスに読み取りだけ許可」のほうが最小権限です。試験では、広すぎる * を避ける選択肢が正答になりやすいです。
⑥認可評価と拒否の優先順位
の権限評価では、最初は暗黙的に拒否されます。 有効な Allow がある場合に許可されますが、どこかに明示的な Deny があると拒否されます。
| 状態 | 結果 | 試験での見方 |
|---|---|---|
| Allow がない | 拒否 | デフォルトは暗黙的拒否です。 |
| Allow がある | 許可候補 | 他の制限や Deny がないか確認します。 |
| 明示的 Deny がある | 拒否 | Allow より優先されます。 |
| Permissions Boundary で許可されていない | 拒否 | の上限を超えられません。 |
| で許可されていない | 拒否 | メンバーアカウントでは組織の上限を超えられません。 |
| Endpoint Policy で許可されていない | 拒否 | 経由のアクセスでは追加境界になります。 |
たとえば、IAM ポリシーで の読み取りが許可されていても、S3 ポリシーで特定条件に合わないアクセスを Deny していれば拒否されます。
暗号化された S3 オブジェクトでは、S3 の GetObject 権限だけでなく、KMS キーの利用権限も必要です。
IAM はグローバルサービスですが、IAM の変更は各所へ反映されるまで時間がかかる場合があります。 そのため、IAM ユーザー、グループ、ロール、ポリシーの作成や変更を、アプリケーションの高可用な処理経路に組み込まない設計が推奨されます。
⚠️ 頻出: 「権限を付けた直後なのに一時的に失敗する」文脈では、IAM の変更反映に時間がかかる場合があります。ただし、試験ではまず明示的 Deny、SCP、Permissions Boundary、KMS 権限、リソースポリシーを確認します。
試験対策
SAA では、 の細かい 構文よりも、アーキテクチャ上の安全な権限委任を判断します。 基本方針は、長期を避け、IAM ロールとを使い、で許可することです。
、、 などの AWS ワークロードが他の AWS サービスにアクセスする問題では、IAM ロールを選びます。 アプリケーションコード、環境変数、ユーザーデータ、、 などにアクセスキーを保存する選択肢は避けます。
アクセスでは、アクセス先アカウントにロールを作成し、アクセス元から sts:AssumeRole します。
第三者に委任する場合は External ID を条件に含めると、混乱した代理問題の対策になります。
| 問題文のキーワード | 優先して考える機能 | 理由 |
|---|---|---|
| EC2 から S3 に安全にアクセス | EC2 インスタンスプロファイル / IAM ロール | アクセスキーを保存せず一時的な認証情報を使えます。 |
| Lambda から にアクセス | Lambda 実行ロール | 関数に必要な権限だけを付与します。 |
| 別アカウントのリソースを操作 | クロスアカウント IAM ロール | と AssumeRole で安全に委任します。 |
| 外部ベンダーに監査を依頼 | IAM ロール + External ID | 混乱した代理問題を防ぎます。 |
| 複数アカウントのユーザー管理 | 人間のアクセスを一元管理しやすくなります。 | |
| 組織単位でサービス利用を制限 | アカウント内の最大権限を制限します。 | |
| 権限があるはずなのに拒否 | 明示的 Deny / SCP / Boundary / リソースポリシー / | Allow 以外の制限を確認します。 |
| S3 やロールの外部公開を検出 | IAM Access Analyzer | 意図しない外部アクセスを分析します。 |
| Endpoint 経由だけ許可 | VPC Endpoint Policy + 条件付きポリシー | ネットワーク経路を含めた制御ができます。 |
権限トラブルの問題では、評価順序を意識します。 最初に明示的 Deny がないかを見ます。 次に、SCP、Permissions Boundary、セッションポリシー、VPC Endpoint Policy、、KMS キーポリシーなど、権限を狭める要素を確認します。 最後に、必要な Allow が実際に存在するかを確認します。
コスト面では、IAM、IAM Identity Center、 は追加料金なしで利用できます。 ただし、IAM Access Analyzer の一部分析や、IAM で許可した先の AWS サービス利用には料金が発生する場合があります。 SAA では、IAM 自体の料金よりも、セキュリティ、運用負荷、権限範囲、監査性のトレードオフを重視します。
参考文献
- What is IAM? - AWS Identity and Access Management
- Policies and permissions in AWS Identity and Access Management
- IAM roles - AWS Identity and Access Management
- Temporary security credentials in IAM
- Policy evaluation logic - AWS Identity and Access Management
- AWS Certified Solutions Architect - Associate