クロスアカウントについてまとめています。

前提

  • アカウントA:123456789012(スイッチ元。Organizations の管理アカウントなど)
  • アカウントB:987654321098

アカウントA

exampleロール

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Resource": [
                "arn:aws:iam::987654321098:role/admin"
            ],
            "Action": "sts:AssumeRole"
        }
    ]
}

アカウントB

adminロール

許可

  • AdministratorAccess

信頼関係

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

:root 指定と ARN 指定の違い

  • "arn:aws:iam::123456789012:root" は「アカウント A 全体」を信頼するという意味です(ルートユーザーのみを指すわけではありません)。
    • アカウント A 内のどのユーザー / ロールが実際にこのロールを引き受けられるかは、アカウント A 側の sts:AssumeRole を許可するポリシー(上記の example ロールのポリシー)で制御します。
  • "arn:aws:iam::123456789012:role/example" のように ARN を指定すると、そのロールだけに絞り込めます(IAM の基礎 具体例 3 を参照)。

MFA を必須にする場合(推奨)

AdministratorAccess のロールなので、MFA を必須にする条件を追加することを推奨します。

"Condition": {
    "Bool": {
        "aws:MultiFactorAuthPresent": "true"
    }
}

※ MFA 条件は、スイッチ元が MFA でサインインした IAM ユーザーやフェデレーションのセッションである場合に有効です。