導入
企業では「開発用アカウント」「本番用アカウント」のように複数のAWSアカウントを分けて使うのが一般的です。では、別アカウントのリソースにアクセスするにはどうすればよいでしょうか。
説明
IAMポリシーには2種類あります。
| 種類 | アタッチ先 | 例 |
|---|---|---|
| アイデンティティベースポリシー | ユーザー・グループ・ロール | 「このユーザーはS3を読める」 |
| リソースベースポリシー | リソース自体(S3バケット、KMSキーなど) | 「このバケットはアカウントXからの読み取りを許可する」 |
S3の バケットポリシー はリソースベースポリシーの代表例で、バケット側に「誰がアクセスできるか」を書けるため、別アカウントのユーザーやロールにもアクセスを許可できます。
クロスアカウントで一時的に権限を借りる標準的な方法が、レッスン8で学んだ AssumeRole です。
sequenceDiagram
participant U as "アカウントA のユーザー"
participant S as "STS"
participant R as "アカウントB の IAMロール"
U->>R: "AssumeRoleを要求(信頼関係で許可済み)"
R->>S: "一時的な認証情報を発行"
S-->>U: "一時的な認証情報"
U->>R: "その認証情報でアカウントBのリソースを操作"
この仕組みでは、アカウントB側のロールに「アカウントAを信頼する」という 信頼ポリシー(Trust Policy) をあらかじめ設定しておきます。これにより、アカウントBはアカウントAのユーザーにアクセスキーを渡すことなく、必要な権限だけを一時的に貸し出せます。
読んでみよう
「複数アカウントにまたがるが、恒久的なアクセスキーは共有したくない」という要件を見たら、「クロスアカウントロール+AssumeRole」が定番の答えです。S3バケットだけの単純な共有であれば、バケットポリシーで直接許可する方法も選択肢に入ります。