この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは植木和樹です。今回はIAM RoleのTrust Relationship(信頼関係)をaws-cliを用いて設定する方法を備忘録としてまとめました。
IAM Roleを使いましょう!
IAM Roleは非常に便利な機能でクラスメソッドでは様々な場面で利用しています。特に複数のAWSアカウントをaws-cliで管理するケースで威力を発揮します。
例えばプロジェクトごとにAWSアカウントを分けている場合、通常であれば各アカウント毎にIAMユーザーを作成して個別にログインしたりアクセスキーを用いてアクセスするかと思います。しかしこの方法だとAWSアカウント と IAMユーザーの掛け算の数だけパスワードやアクセスキーを管理しなければならず、AWSアカウントやユーザー数が増えると煩雑になります。
そこで、マネージメントコンソールを利用する場合はSwitchRoleを、aws-cliの場合は一時キー(STS)を利用することで、1つのIAMユーザーだけで複数のAWSアカウントを管理できるようになります。詳しくは下記ブログを参照してください。
- 【新機能】IAMユーザーをManagement Consoleからクロスアカウントで色々なRoleにスイッチする事ができるようになりました。 | Developers.IO
- AWS CLIがAssumeRoleによる自動クレデンシャル取得とMFAに対応しました! | Developers.IO
aws-cliで信頼関係を設定する
信頼関係というのは、あるRoleを利用することをどのIAMユーザーへ許可するのか(信頼するのか)を設定したものです。信頼関係は信頼ポリシーをJSONを用いて設定します。
IAM Role作成時に信頼関係を設定する
IAM Role作成時(create-role)に--assume-role-policy-documentで指定したJSONファイルの内容で信頼関係を設定することができます。
以下の例でAWSアカウント "111122223333" は、異なるAWSアカウント "999988887777" からのmy-roleの利用を許可しています。
$ aws iam create-role --role-name my-role \
--assume-role-policy-document file://AssumeRolePolicy-my-role.json
{
"Role": {
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": [
"arn:aws:iam::999988887777:root"
]
},
"Sid": ""
}
]
},
"RoleId": "AROAJYXAN3BQHMIZSTAHS",
"CreateDate": "2015-04-25T09:18:16.117Z",
"RoleName": "my-role",
"Path": "/",
"Arn": "arn:aws:iam::111122223333:role/my-role"
}
}
AssumeRolePolicy-my-role.json
$ cat AssumeRolePolicy-my-role.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::999988887777:root"
]
},
"Action": "sts:AssumeRole"
}
]
}
Roleに設定されている信頼関係を表示する
現在設定されている信頼関係はRole情報をget-roleで取得すると確認することができます。
$ aws iam get-role --role-name my-role --query 'Role.AssumeRolePolicyDocument'
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": "arn:aws:iam::999988887777:root"
}
}
]
}
信頼関係を更新する
信頼関係はupdate-assume-role-policyで更新が可能です。
$ aws iam update-assume-role-policy --role-name my-role \
--policy-document file://AssumeRolePolicy-my-role.json
(コマンド実行による出力はありません)
信頼関係を削除する
設定した信頼関係を削除することはできません。これはIAM Roleが「信頼されたエンティティ」、つまりアカウントのIAM UserやEC2などのAWSリソースから利用されることを想定しているためです。
Roleが不要になった場合は信頼関係を削除するのではなく、Role自体を削除しましょう。
まとめ
aws-cliを使えば、AWSアカウントが増えてきた場合でも簡単にRoleの管理ができます。作業をコードとして管理することで、各アカウントのRoleを同じ設定に保つことも容易になるかと思います。
IAM Roleとaws-cli。複数のAWSアカウントを利用されている方はぜひご活用ください!