sorta kinda...

主にAWS関連ですが、これに限らずいろいろ勉強したことや思ったことを書いていきます。

AWS CLI でロールを切り替えて作業する

ナスです。

AWS アカウントにIAMユーザでログインしてロールを切り替える手順はパッとでますが、AWS CLI だとどうやるんやったっけ?ってなったので思い出しながら忘れないように書くことにしました。

例によってちゃんと AWS からはドキュメントがでているので、あんまり悩むことはないと思います。 docs.aws.amazon.com docs.aws.amazon.com

 

まずは最初にログインする IAM ユーザを作成する

AWS アカウントに CLI でアクセスできる IAM ユーザを作成して、自分の端末からアクセスキーやシークレットキーを使ってその IAM ユーザで CLIAWS にアクセスできる状態にします。分からない方はググってみてください。きっとたくさんやり方が出てきます。
今回は work_api という名前の IAM ユーザを作成しました。

 

切り替える IAM ロールを作成する

今回は admin_role という名前の IAM ロールを作成しました。AdministratorAccessポリシーをつけてます。運用タスクを実行する場合にこのロールに切り替えるイメージです。 f:id:nasrinjp1:20180406212249p:plain

誰でもこのロールに切り替えられるようにするとよくないので、特定の IAM ユーザからのみ切り替えられるよう信頼関係を設定します。 f:id:nasrinjp1:20180406212353p:plain ポリシーの内容は↓これです。work_api ユーザからのみ切り替えられるように設定しました。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/work_api"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

 

最初にログインする IAM ユーザにロール切り替え権限をつける

ロール切り替えができるようポリシーをアタッチします。 f:id:nasrinjp1:20180406211429p:plain ポリシーの中身はこんな感じです。これで 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 でのロール切り替えはむちゃくちゃ簡単!