AWSアカウントをスイッチロールで管理

概要

AWS Oragnizationsを使っている場合は、AWS IAM Identity CenterでSSOさせることで、統一アカウントでログインさせることができて権限も管理ができます。
しかし、AWS Oragnizationsを使っていない場合はSSOさせることができないため、スイッチロールを使うことで踏み台用のAWSアカウントのログイン情報さえわかっていれば、他のAWSアカウントにアクセスすることが可能になります。

設定

スイッチロールしたいAWSアカウントにIAM Roleを作成して、AssumeRoleを特定のユーザーに許可させてあげることでアクセスできるようになります。
作成する際には、カスタム信頼ポリシーにて、踏み台アカウントの情報を記載します。

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AWSアカウントID:user/ユーザー名"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
            "Bool": {
                "aws:MultiFactorAuthPresent": "true"
           }
        }
    }
}

Conditionで指定しているのは、MFAが有効でないとアクセスさせないというものです。
踏み台側のIAMユーザーにMFAを設定しておきましょう。

例えば、このロール名を example_assumerole とした場合、下記がスイッチロールのURLとなるので、ブラウザのブックマークに登録させておくと良いと思います。

https://signin.aws.amazon.com/switchrole?roleName=example_assumerople&account=アクセス先AWSアカウントID

AWS CLI

AWS CLIでもスイッチロールを使用することができます。
まずは、踏み台アカウントのアクセスキーとシークレットアクセスキーが ~/.aws/credentials にあること、そしてProfile名を指定します。
例えば、踏み台アカウントのプロファイルをexampleとしたとした場合は、下記の通りです。

[example]
aws_access_key_id = XXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXX

次に、~/.aws/config にスイッチロールする先の設定を記載します。

[profile example]
source_profile = example

[profile hoge]
source_profile = example
role_arn = arn:aws:iam::XXXXXXXX:role/example_AssumeRole
mfa_serial = arn:aws:iam::XXXXXXXXX:mfa/ユーザー名

source_profile~/.aws/credentials で参照するプロファイルを指定します。
role_arn で最初に作成したIAM RoleのARNを指定します。
mfa_serial で踏み台アカウントのIAMユーザーに設定したMFAのシリアルが、AWSコンソールで確認できるので指定します。

そうすると、ターミナルでaws cliを実行したときにも、踏み台アカウントのMFAが確認されますので、その際にMFAを入力することで実行できるようになります。

❯ aws s3 ls --profile example
Enter MFA code for arn:aws:iam::XXXXXXX:mfa/ユーザー名: