LoginSignup
5
1

More than 5 years have passed since last update.

(同一アカウントでも) aws cliの実行時に2 factor/MFAの入力を強制する

Last updated at Posted at 2018-08-23

自分用IAMユーザのAccess key / secret keyが何かの間違いで流出 & 悪用されたら嫌ですよね!
ということで、aws-cliを利用する時にMFAの認証を通したいときのやり方、何個か記事はあるんですが、微妙に色んな情報が混じっていてわかりずらかったので、最短のパスをここにまとめてみました。

全体の流れ

  • 必要な権限を持ったassumeするためのIAM Roleを作成
  • ↑で作ったRoleをassumeして使えるIAM Userを作成。
  • ↑で作ったUserにMFAデバイスの紐付けを行う。
  • ~/.aws/credentials, ~/.aws/config の設定
  • aws コマンドを実行してみる!

IAM Role作成

trusted entityには"Another AWS account" を選択。ここが地味に混乱しやすいポイントですが、同一のアカウントで使う場合も、これを選択して、そのアカウントのIDを入力すればOKです。プラスで、Require MFA にチェックを入れてroleの作成をしていきます。
Roleの権限は、aws-cli を実行するユーザに持たせたい権限(EC2操作、S3操作、Admin etc...)にしてください。
スクリーンショット 2018-08-23 13.06.34.png

IAM User作成

Programmatic accessを有効にした、何の権限も持たないIAM Userを作成し、以下のpolicyを直接attachする(CREATED_ROLEの部分は先の工程で作ったrole名を入力)。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::123456789012:role/CREATED_ROLE"
        }
    ]
}

IAMユーザにMFA deviceの紐付けを行う

作成したIAMユーザの詳細画面を開き、"Security Credentials"タブ -> Assigned MFA device を選んで設定する。

~/.aws/credentials, ~/.aws/config の設定

Key pair, Role, MFAの設定は先に作成したモノに置換してください。

~/.aws/credentials
[test_iam_user]
aws_access_key_id=ACCESS_KEY_OF_CREATED_USER
aws_secret_access_key=SECRET_KEY_OF_CREATED_USER
region=ap-northeast-1
~/.aws/config
[profile test]
role_arn = arn:aws:iam::123456789012:role/CREATED_ROLE
source_profile = test_iam_user
mfa_serial = arn:aws:iam::123456789012:mfa/CREATED_MFA
region=ap-northeast-1

aws コマンドを実行してみる!

MFA codeの入力が求められればOK!

$ aws --profile test s3 ls
Enter MFA code:


IAM UserとしてはAssumeRoleの権限しか持っておらず、新しいセッションでこのRoleをassumeしてAPIを実行しようとする場合、MFA codeの入力が求められるので、万一、IAM Userのkey pairが流出しても悪さされません!!

参考

AWS CLI 経由で AWS リソースへのアクセスを認証するには、どのように MFA トークンを使用したらよいですか?
https://aws.amazon.com/jp/premiumsupport/knowledge-center/authenticate-mfa-cli/

AWS CLIがAssumeRoleによる自動クレデンシャル取得とMFAに対応しました!
https://dev.classmethod.jp/cloud/aws/aws-cli-supports-assume-role-credentials-provider-and-mfa/

(タイトルなしの英語記事)
https://dogsec.io/2017/06/03/awscli-mfa.html

初めてのAssumeRole
https://dev.classmethod.jp/etc/sugano-005-s3/
(直接は関係ないですが、AssumeRole とは何ぞや?ってのがキレイにまとまっていました)

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1