概要
今回は、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 } '`
参考資料
元記事はこちら
「MFA使用時のaws cli 認証方法について 」
お客様のご要望に柔軟に対応いたします。まずはお気軽にご相談ください。
cloudpackは、アイレット株式会社が提供するクラウド支援サービスです。クラウドの導入・構築から運用・保守、技術的な問い合わせまでトータルサポート!
アイレットでは、様々な職種で一緒に働ける仲間を募集しています。
インフラエンジニア、開発エンジニア、クリエイティブ職、営業職など、様々な職種で一緒に働ける仲間を募集しています。アイレットのこと、社員インタビュー、募集職種、福利厚生など、アイレット公式サイト採用情報をご覧ください。