スイッチロールユーザーのcredentialsの設定

背景

AWS BatchをGithubActionsでデプロイするために、ジョブ定義ファイルを取得しようとしました。マネジメントコンソールでは取得できないようでした…

aws cliを用いて取得するしかないと思ったのですが、AWS Batchの設定を行ったのは、スイッチロール先のAWSアカウントです。

スイッチロールしたIAMでジョブ定義ファイルを取得するための設定メモを記載します。

configファイルの編集

スイッチロール先のAWSアカウントのprofileの設定を~/.aws/configファイルに行います。

1
2
3
4
5
[profile switch-role-to]
region = ap-northeast-1
output = json
source_profile = switch-role-from
role_arn = arn:aws:iam::スイッチロール先アカウントID:role/スイッチロール

他の設定と異なるところはsource_profilerole_arnの設定です。

source_profileには、スイッチロール元のprofile名を設定します。role_arnにはスイッチロール先のロールを指定します。

アクセスを試す

それではアクセスできるかどうか試してみましょう。

1
2
3
$ aws batch describe-job-definitions --profile switch-role-to

An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::スイッチロール元アカウントID:user/スイッチロール元IAMユーザー名 is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::スイッチロール先アカウントID:role/スイッチロール

ん〜エラーになってしまいました。ググってみるとMFAの設定をしているとこのメッセージが表示されるようです。

MFA対応

MFAに対応するために、~/.aws/configに以下の内容を追記しましょう。

1
mfa_serial = arn:aws:iam::スイッチロール元アカウントID:mfa/スイッチロール元IAMユーザー名

再度試してみます。

1
2
$ aws batch describe-job-definitions --profile switch-role-to
Enter MFA code for arn:aws:iam::スイッチロール元アカウントID:mfa/スイッチロール元IAMユーザー名 :

MFAのコードを聞かれているので、入力します。するとジョブ定義ファイルが正常に表示されました。この設定の仕方だと、すべてのジョブ定義ファイルが全てのリビジョンにおいて出力されます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ aws batch describe-job-definitions --profile switch-role-to
Enter MFA code for arn:aws:iam::スイッチロール元アカウントID:mfa/スイッチロール元IAMユーザー名 :
{
"jobDefinitions": [
{
"jobDefinitionName": "test",
...
(中略)
...
"propagateTags": false,
"platformCapabilities": [
"FARGATE"
]
}
]
}

無事取得することができました!

まとめ

スイッチロール先のAWSアカウントにAWS CLIでアクセスする方法をまとめました。

次回は取得したジョブ定義ファイルを使ってデプロイを試したいと思います。