Help us understand the problem. What is going on with this article?

AWS CLI用のIAMユーザ/ロール設定

はじめに

ユーザとロールの分離とMFA設定をやった記録です。プライベートだとゆるみがちだったIAM周りを引き締めます。

やったこと

ロール作成

新規でロールを作成し、AWSのサービスを操作するのに必要十分な権限を付与します。※今回は安直にAdmin

「SwitchRoleAdmin」というロールを作成した上で、下記のポリシーを付与します。

SwitchRoleAdminロールのポリシー(Admin)
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "*",
      "Resource": "*"
    }
  ]
}

このロールを想定しないユーザから使用されると困るため、特定の条件下でのみ使用できるように設定します。ここではMFA認証済みの特定ユーザのみ許可します。

IAMロール詳細画面の「信頼関係」タブから下記の設定を追加します。

信頼関係の編集(ポリシードキュメント)
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/nanakenashi-cli"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "Bool": {
          "aws:MultiFactorAuthPresent": "true"
        }
      }
    }
  ]
}

ユーザ作成

主な権限はユーザからは分離してロールに持たせるため、そのロール(SwitchRoleAdmin)を委任するための権限だけが必要です。

「nanakenashi-cli」ユーザを作成し、下記のポリシーを付与しました。

nanakenashi-cliユーザのポリシー
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::123456789012:role/SwitchRoleAdmin"
    }
  ]
}

加えて、コンソールで使用するときと同様にMFAデバイスを割り当てておきます。

CLI設定

ユーザ設定

※メインで使用する設定なのでprofileは使用していません

CLIの設定ファイル作成
$ aws configure
AWS Access Key ID [****************HOGE]: 
AWS Secret Access Key [****************hoge]: 
Default region name [ap-northeast-1]: 
Default output format [json]: 

ロール設定

ロールを使用するためのプロファイル設定を ~/.aws/config に追記します。

~/.aws/config
[profile default-admin]
region = ap-northeast-1
output = json
role_arn = arn:aws:iam::123456789012:role/SwitchRoleAdmin
source_profile = default
mfa_serial = arn:aws:iam::123456789012:mfa/nanakenashi-cli

試用

プロファイルの指定を忘れない。

プロファイルの指定
$ export AWS_DEFAULT_PROFILE=default-admin

コマンドを実行してみるとMFAの入力が求められ、認証が済めば実行できます。

検証(使用しているcredentialの確認)
$ aws sts get-caller-identity
Enter MFA code for arn:aws:iam::123456789012:mfa/nanakenashi-cli:
{
    "UserId": "XXXXXXXXXX",
    "Account": "123456789012",
    "Arn": "arn:aws:sts::123456789012:assumed-role/SwitchRoleAdmin/botocore-session-1234567890"
}

MFA認証済みをAssumeRoleの条件にしているため、mfa_serialの記述を消すと実行時にエラーになります。

エラーになった例
$ aws sts get-caller-identity
An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::123456789012:user/nanakenashi-cli is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::123456789012:role/SwitchRoleAdmin

むすび

セキュリティ意識は大事。

nanakenashi
都内に勤務のエンジニア。
lifull
日本最大級の不動産・住宅情報サイト「LIFULL HOME'S」を始め、人々の生活に寄り添う様々な情報サービス事業を展開しています。
https://lifull.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした