実は、半年間くらい悩んでました。。。知っている人は当たり前なのかもしれないけど。
マネジメントコンソールからの操作だけだと、AWSの操作が煩雑だし、間違えやすいので
AWS CLIを利用することが多いです。
また、Visual Studio CodeからAWSを操作する場合も、AWS CLIを経由することになります。
Qiitaにも、AWS CLIを利用する方法が多数書かれていますが、ほとんどがアクセスキーを利用しています。
しかし、アクセスキーをつかった長期的な認証はベストプラクティスとはされておらず、
一時的な認証を利用することが推奨されています。
そこで、アクセスキーを使わずにマネジメントコンソールのCloudShell上で一時クレデンシャルを発行し、それを用いてAWS CLI等でアクセスする方法を提案します。
前提条件
AWS CLIはインストールされて、初期設定(aws configure)が終わっていること。
このときのAccess key ID、Secret access keyは、ブランクで構いません。
手順
1. Assume Roleするロールを作成する
ログインしたIAMのユーザーの権限はあまり大きな権限を持たせず、
必要な権限はAssume Roleするロールに付与することが推奨されています。
Assume Roleするロールを作成します。
例えば、ロールを新規作成し、以下のように設定します。
許可ポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
信頼関係(IAMユーザーYYYYがAssume Roleできるようにする)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::xxxx:user/YYYY"
]
},
"Action": "sts:AssumeRole"
}
]
}
2. CloudShellを起動する
3. aws sts assume-roleコマンドを実行する
私は、CloudShellに下記のようなシェルスクリプトを作成しています。
ROLE_ARNに、1.で作成したロールのARNを設定してください。
SESSION_NAMEは、任意の文字列を設定してください。(ロールやユーザーを区別できるほうが良いですね)
#!/bin/bash
ROLE_ARN="arn:aws:iam::xxxx:role/yyyyy"
SESSION_NAME="AWSCLI"
# aws sts assume-role コマンドを実行
OUTPUT=$(aws sts assume-role --role-arn $ROLE_ARN --role-session-name $SESSION_NAME)
# 結果から各値を抽出
AWS_ACCESS_KEY_ID=$(echo "$OUTPUT" | jq -r '.Credentials.AccessKeyId')
AWS_SECRET_ACCESS_KEY=$(echo "$OUTPUT" | jq -r '.Credentials.SecretAccessKey')
AWS_SESSION_TOKEN=$(echo "$OUTPUT" | jq -r '.Credentials.SessionToken')
# 標準出力にcredentials形式で出力
echo "aws_access_key_id = $AWS_ACCESS_KEY_ID"
echo "aws_secret_access_key = $AWS_SECRET_ACCESS_KEY"
echo "aws_session_token = $AWS_SESSION_TOKEN"
4. CloudShellの出力をコピーする
下記のような出力が得られます。これをクリップボードにコピーします。
aws_access_key_id = XXXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYY
aws_session_token = ZZZZZZZZZZZZZZZ
5. .aws/credentialsファイルに貼り付ける
下記のファイルを開いて、4.でコピーした内容を[default]の下に貼り付けます。
C:\Users\(ユーザーID)\.aws\credentials
これで、AWS CLIを利用するときに、アクセスキーを利用せずに、
一時クレデンシャルを利用することができます。
有効期限は1時間です。1時間過ぎたら直ぐに切断されるということはなく
切断されるまでの間は、AWS CLIを利用することができます。
おわりに
MFAを利用している場合も、特に手順に変わりはないです。