AWS CLI でロールを切り替えて作業する
ナスです。
AWS アカウントにIAMユーザでログインしてロールを切り替える手順はパッとでますが、AWS CLI だとどうやるんやったっけ?ってなったので思い出しながら忘れないように書くことにしました。
例によってちゃんと AWS からはドキュメントがでているので、あんまり悩むことはないと思います。 docs.aws.amazon.com docs.aws.amazon.com
まずは最初にログインする IAM ユーザを作成する
AWS アカウントに CLI でアクセスできる IAM ユーザを作成して、自分の端末からアクセスキーやシークレットキーを使ってその IAM ユーザで CLI で AWS にアクセスできる状態にします。分からない方はググってみてください。きっとたくさんやり方が出てきます。
今回は work_api という名前の IAM ユーザを作成しました。
切り替える IAM ロールを作成する
今回は admin_role という名前の IAM ロールを作成しました。AdministratorAccessポリシーをつけてます。運用タスクを実行する場合にこのロールに切り替えるイメージです。
誰でもこのロールに切り替えられるようにするとよくないので、特定の IAM ユーザからのみ切り替えられるよう信頼関係を設定します。 ポリシーの内容は↓これです。work_api ユーザからのみ切り替えられるように設定しました。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/work_api" }, "Action": "sts:AssumeRole" } ] }
最初にログインする IAM ユーザにロール切り替え権限をつける
ロール切り替えができるようポリシーをアタッチします。 ポリシーの中身はこんな感じです。これで admin_role ロールに切り替える権限が付きました。ちなみにこれ以外のポリシーはアタッチしていないので、何も操作ができないようになっています。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::123456789012:role/admin_role" } ] }
CLI 設定する
[default] が最初にログインする work_api ユーザの設定です。[profile admin] が切り替え先の設定です。credentials の設定ももちろん必要ですよ(ここでは書きませんが
$ cat .aws/config [default] output = json region = ap-northeast-1 [profile admin] output=json region=ap-northeast-1 role_arn=arn:aws:iam::123456789012:role/admin_role source_profile=default
これで準備okです!
では実際に CLI で work_api ユーザを使って EC2 インスタンスの情報を表示するコマンドを実行してみましょう。
$ aws ec2 describe-instances An error occurred (UnauthorizedOperation) when calling the DescribeInstances operation: You are not authorized to perform this operation.
権限がないと出ましたね。想定通りです。では admin_role ロールに切り替えて実行してみましょう。
$ aws ec2 describe-instances --profile admin { "Reservations": [ { "Groups": [], "Instances": [ { "VirtualizationType": "hvm", "SourceDestCheck": true, 以下、省略。。。
ちゃんと実行結果がでましたね。
ちなみに、↓こんな風に AWS_PROFILE 環境変数を設定することでいちいち --profile オプションをつけてコマンド実行しなくてもよくなります。
$ export AWS_PROFILE=admin $ aws ec2 describe-instances { "Reservations": [ { "Groups": [], "Instances": [ { "VirtualizationType": "hvm", "SourceDestCheck": true, 以下、省略。。。
まとめ
CLI でのロール切り替えはむちゃくちゃ簡単!