本文へスキップ
BecomeCoder

AWS SAA(ソリューションアーキテクト)コース · 第2章 IAMと認証・認可の設計 · レッスン9

クロスアカウントアクセスとリソースベースポリシー

導入

企業では「開発用アカウント」「本番用アカウント」のように複数の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バケットだけの単純な共有であれば、バケットポリシーで直接許可する方法も選択肢に入ります。