✈️

aws cliで別アカウントのMFA付きロールにAssumeRoleする

2022/02/16に公開約2,300字

タイトルがややこしいですね。
図を書くのが好きなので図にしてみます。

図のように「MFAなしは許さない別アカウントのロール」にaws cliでAssumeRoleする方法を書いていきます。

MFAなしは許さない、とは以下のようなロールを指します。
セキュリティを考えて、AssumeRoleされるロールにはMFAがないと何もさせないようにすることは多いと思います。

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

前提を再確認

cliで試す前に、そもそもAssumeRoleができる状態かどうかを再確認します。

【アカウント2側】信頼関係に問題がないか

アカウント2のロールの信頼関係を見て、そもそもアカウント1の特定のユーザがAssumeRoleできる状態かを確認します。

rootなら誰でもAssumeRoleできるので問題ないですね。(※ある意味問題はあります)
userを指定しているときは、正しいARNか今一度確認しましょう。

【アカウント1側】MFAは設定済みか

AssumeRoleするユーザにはMFAが設定済みか確認します。

仮想 Multi-Factor Authentication (MFA) デバイスの有効化 (コンソール)

【アカウント1側】AssumeRole権限がついているか

ユーザや所属するグループには「アカウント2のRoleにAssumeRoleするポリシー」がアタッチされているか確認します。
こんな感じですね。

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::2222222222:role/AccountTwoRole"
  }
}

【アカウント1側】コンソールからスイッチロールできるか

cliに行く前にそもそもコンソール上でスイッチロールできるかを試します。
※コンソールログインをしないIAMユーザだったらこれは確認できません。

クラメソさんの記事を引用させていただきます。

スイッチロールをやってみた

cliの設定を行う

前提がクリアできていたら、早速cliでクロスアカウントのAssumeRoleを行う設定をしていきます。

aws configure

コマンドを打ち、発行したアクセスキー/シークレットキーと、リージョンとアウトプット形式を登録します。

$ aws configure

だいたい以下を打ち込む
ap-northeast-1
json

configファイルの編集

~/.aws/configの中身を編集します。

[default]
region = ap-northeast-1
output = json

# 以下を追記
[profile account2]
role_arn = arn:aws:iam::222222222222:role/AccountTwoRole
mfa_serial = arn:aws:iam::111111111111:mfa/${your-iam-user-name}
source_profile = default
region = ap-northeast-1

編集できたら保存し、コマンドで以下を入力してAssumeRoleできているか確かめます。
※s3のlist bucket権限がある前提です…。

$ aws s3 ls
# アカウント1のバケットリストが出力される


$ aws s3 ls --profile account2
Enter MFA code for arn:aws:iam::111111111111:mfa/${your-iam-user-name}:
# アカウント2のバケットリストが出力される

おわりに

IAMユーザの発行を減らすために、AssumeRoleしか用意しないアカウントもあると思います。
そういう場合に備えて、cliでのクロスアカウントAssumeRoleは覚えておきたいですね!

なお、AssumeRoleするときに一度MFAを打ち込めば一定期間は再入力は求められません。

Discussion

ログインするとコメントできます