⚙️

[Profile] AWS CLIの導入設定手順

に公開

はじめに

AWS CLIを最近使っているので、導入方法と設定手順を備忘録的に記載しておく。

AWS CLIとは

AWSのサービスをCLIで実行するためのツール。
GUIのマネジメントコンソール画面と、同様の操作を実現できる。
サービスによっては、本来は設定可能なはずだが画面の操作項目にない設定もあったりするので、CLIを使いこなせると便利である。

https://aws.amazon.com/jp/cli/

AWS CLIの導入

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

Macの場合

Homebrewを使ってインストールを行う。
バージョン情報を確認して出力されればOK。

$ brew install awscli
$ aws --version
aws-cli/2.24.26 Python/3.12.9 Darwin/24.4.0 source/arm64

Windowsの場合

公式からインストーラが提供されているので、msiファイルをダウンロードする。
インストール実行後、同様にバージョン情報を確認して出力されればOK。
インストーラのURLは上述の公式ガイドを参照。

認証情報準備

マネジメントコンソール画面にてIAMユーザの認証情報を入れてから入るのと同様に、CLIでも認証情報が必要になる。
画面だとユーザ名/パスワード(+MFA)だが、CLIでは何種類かの方法が提供されている。
今回はIAMアクセスキーを発行して設定する手順を記載する。

アクセスキーの発行

セキュリティ的な懸念もあるが、何だかんだで使われている手法。
IAMユーザに対して、ACCESSKEYのIDとSECRETが発行される。CSVをダウンロードするか、表示される画面の情報を控えておく。
完了を押下すると、アクセスキーが認識され使えるようになる。

https://docs.aws.amazon.com/ja_jp/keyspaces/latest/devguide/create.keypair.html

Profileの設定

CLIを使う上で、「どのAWS環境に接続するか?」の設定を記述する必要がある。
先ほど払い出したIAMアクセスキーの情報を使って、Profileを設定する。
Profileは~/.aws/config~/.aws/credentialsに作成される。

https://docs.aws.amazon.com/ja_jp/cli/v1/userguide/cli-configure-files.html

初回設定

初回は設定ファイルがないので、aws configureコマンドで作成する。対話形式で入力できる。

$ aws configure
AWS Access Key ID [None]:  
AWS Secret Access Key [None]: 
Default region name [None]: # ex: ap-northeast-1
Default output format [None]: # json,text,yamlなどから指定

設定が完了すると、以下のように設定が追加される。
[ ]がprofile名に対応している。引数 --profileを指定しない場合、defaltとして作成される。

$ cat ~/.aws/config
[default]
region = ap-northeast-1
output = json
$ cat ~/.aws/credentials              
[default]
aws_access_key_id = AKIAXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXX

2回目以降の設定

既存のProfileを変更したい場合や、複数Profileを定義したい場合の方法を記載する。
Profileを複数定義しておくことで、AWSの環境を複数使っている場合でも、Profileを切り替えて操作を実行できる。
初回設定にて設定ファイル作成済みのため、~/.aws/config~/.aws/credentialsvi等で直接変更しても良い。
configureコマンドを使う場合は、引数に--profileを指定する。何も指定しない場合はdefaultのProfileが変更対象になる。
設定項目横の[]に既存の設定値が表示され、何も入力せずEnterを押すと既存の値のまま保存される。

$ aws configure --profile {profile-name}
AWS Access Key ID [****************XXXX]: 
AWS Secret Access Key [****************XXXX]: 
Default region name [ap-northeast-1]: 
Default output format [None]: json #NoneからJSONに変更
# Profileを確認 (credentialの場合)
$ cat ~/.aws/credentials 
[default]
aws_access_key_id = AKIAXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXX
[profile1]
aws_access_key_id = AKIAXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXX
[profile2]
aws_access_key_id = AKIAXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXX

動作確認

ここまでで導入とProfileの設定が完了したので、CLIが動作するか確認を行う。
何のサービスに対してでも良いが、IAMの認証情報を確認するコマンドが検証しやすい。

https://docs.aws.amazon.com/cli/latest/reference/sts/get-caller-identity.html

$ aws sts get-caller-identity
{
    "UserId": "HOGEFUGAPIYO",
    "Account": "123456789012",
    "Arn": "arn:aws:iam::123456789012:user/john"
}

MFAによる制限がある場合

使っているAWS環境の、IAMポリシーの設定次第では、MFAの情報がない場合、ほぼ全てのリソースへの操作を拒否している場合がある。

https://dev.classmethod.jp/articles/forced_mfa/

そうした場合は、CLIでも同様に権限不足で操作が拒否される。
MFAの制限ポリシーつきのIAMユーザでも、AWS CLIを使いたい場合、以下のように対応する。

  1. get-session-tokenコマンドでMFA情報込みで送信し、SessionTokenを発行してもらう
  2. SessionTokenの情報を含めて、tmpのProfileを作成する
  3. SessionTokenの有効期限(12時間)が切れたら、再度1-2を実行する

1. SessionTokenの発行

元々作成済みのユーザに対して、sts get-session-tokenコマンドを使う。
引数の--serial-numberにはIAMのMFAのARNを、--token-codeにはMFAのコードを入力する。
MFAのARNなので、MFAデバイス設定時につけた名前を指定する。

$ aws sts get-session-token \
  --serial-number arn:aws:iam::01234567890:mfa/{mfa-device-name} \     
  --token-code 123456 \ 
  --profile {profile-name}

{
    "Credentials": {
        "AccessKeyId": "XXXXXXXXX",
        "SecretAccessKey": "XXXXXXXXXXXXX",
        "SessionToken": "HOGEFUGAPIYOHOGEFUGAPIYO=", #実際はもっと長い
        "Expiration": "2025-01-01T00:00:00+00:00" #12時間
    }
}

2. 一時Profileを作成する

SessionTokenが有効なのは12時間なので、有効期限内は再認証なしで操作が可能になる。
一時的なProfileを、SessionToken込みで設定する。

# AccessKeyをセット
$ aws configure set aws_access_key_id {AccessKeyId} --profile {profile-name}

$ aws configure set aws_secret_access_key {SecretAccessKey} --profile {profile-name}

# SessionTokenをセット
$ aws configure set aws_session_token {SessionToken} --profile {profile-name}

# Regionをセット
$ aws configure set region {Region} --profile {profile-name}

3. 有効期限が切れたら再実行する

1でSessionTokenを発行したら、Vi等で直接設定ファイルの情報を書き換えても良い。

最後に

以上の内容で、AWS CLIの導入からProfileの設定までが完了する。
以降は、AWS CLIのコマンドを使えるようになる。

参考記事

AWS公式

ブログ

Discussion