MFA使用時のaws cli 認証方法について
Contents
概要
- 今回は、MFA(多要素認証:Multi-Factor Authentication)を使用する環境において、aws cli を利用するための認証方法をご説明します。
- AWSアカウントあるいはIAMユーザーのセキュリティを向上させるには、MFAを設定します。IAMユーザーに仮想MFA を有効にする方法は、以前記載したこちらの記事を参照ください。
- MFAが設定された環境で、AWSコンソールにログインするときにはユーザー名、パスワードの他に、MFAコード(6桁の数字)が必要となりますが、aws cli を利用する時も同様にMFAコードを入力して認証する必要があります。
MFA使用時のaws cli 認証方法
MFAの認証をせずにaws cli を実行した場合
- MFAの認証をせずにaws cli を実行すると、下記のエラーとなります。これは、MFAを使った一時的な認証情報を取得する必要があるためです。
niikawa@niikawa1:~$ aws route53 list-hosted-zones --output text
An error occurred (AccessDenied) when calling the ListHostedZones operation: User: arn:aws:iam::111111111111:user/username is not authorized to perform: route53:ListHostedZones with an explicit deny
MFAで一時認証をしてaws cli を実行する
- MFAを使って、一時的セキュリティ認証情報を取得して、aws cli を実行します。
- 先ず、aws configureあるいは下記の環境変数をセットして、aws cli を実行するための準備を行います。 (すでに設定済みの環境は省略)
niikawa@niikawa1:~$ export AWS_ACCESS_KEY_ID=AAAAAAAAAAAAAAAAAAAA
niikawa@niikawa1:~$ export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
niikawa@niikawa1:~$ export AWS_DEFAULT_REGION=ap-northeast-1
- 次にaws sts get-session-tokenコマンドを使用して、一時的セキュリティ認証情報を取得します。
- –serial-numberにMFAで識別するためのid を入力します(仮想MFAの例:arn:aws:iam::111111111111:mfa/username)。
- –token-codeに6桁のMFAコードを指定します(下記の例:123123)。
niikawa@niikawa1:~$ aws sts get-session-token --serial-number arn:aws:iam::111111111111:mfa/username --token-code 123123
- 下記の様な一時的な認証情報と有効期限(デフォルトでは 12 時間)を含む出力を受け取ります。
- aws sts get-session-tokenコマンドの–duration-seconds オプションを使用して、有効期限 (秒単位) を指定できます。ドキュメントによれば、IAMユーザーのセッションは、900秒(15分)から129,600秒(36時間)の範囲で指定でき、デフォルトは43,200秒(12時間)です。 AWSアカウント所有者のセッションは、最大3,600秒(1時間)に制限されます。
{
"Credentials": {
"AccessKeyId": "BBBBBBBBBBBBBBBBBBBB",
"SecretAccessKey": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy",
"SessionToken": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz",
"Expiration": "2020-03-19T13:22:28Z"
}
}
- 下記コマンドを使用して、一時的な認証情報を環境変数にエクスポートします。
niikawa@niikawa1:~$ export AWS_ACCESS_KEY_ID=BBBBBBBBBBBBBBBBBBBB
niikawa@niikawa1:~$ export AWS_SECRET_ACCESS_KEY=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
niikawa@niikawa1:~$ export AWS_SESSION_TOKEN=zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
MFAで一時認証をしてaws cli を実行する(ワンライナー版)
- ワンライナーで実行する場合は、下記コマンドとなります。
niikawa@niikawa1:~$ eval `aws sts get-session-token --serial-number arn:aws:iam::111111111111:mfa/username --token-code 123123 | awk ' $1 == "\"AccessKeyId\":" { gsub(/\"/,""); gsub(/,/,""); print "export AWS_ACCESS_KEY_ID="$2 } $1 == "\"SecretAccessKey\":" { gsub(/\"/,""); gsub(/,/,""); print "export AWS_SECRET_ACCESS_KEY="$2} $1 == "\"SessionToken\":" { gsub(/\"/,""); gsub(/,/,""); print "export AWS_SESSION_TOKEN="$2 } '`