9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

身の回りの困りごとを楽しく解決! by Works Human IntelligenceAdvent Calendar 2023

Day 1

アクセスキーを使わずに、AWS CLIを利用する

Last updated at Posted at 2023-11-30

実は、半年間くらい悩んでました。。。知っている人は当たり前なのかもしれないけど。

マネジメントコンソールからの操作だけだと、AWSの操作が煩雑だし、間違えやすいので
AWS CLIを利用することが多いです。
また、Visual Studio CodeからAWSを操作する場合も、AWS CLIを経由することになります。
Qiitaにも、AWS CLIを利用する方法が多数書かれていますが、ほとんどがアクセスキーを利用しています。
しかし、アクセスキーをつかった長期的な認証はベストプラクティスとはされておらず、
一時的な認証を利用することが推奨されています。
2023-11-29-16-10-34.png
そこで、アクセスキーを使わずにマネジメントコンソールの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を起動する

image.png

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を利用している場合も、特に手順に変わりはないです。

9
2
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
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?