【AWS】aws cliの設定方法
はじめに
aws cli の初期セットアップ方法の記事です。
AWS がちょっと気になる、aws cli で AWS のリソースにアクセスしてみたい。
そんな方への入門記事になります。
この記事でわかること
この記事を読む上での前提条件
aws cli のインストール
まずは手元のローカルマシンに aws cli をインストールします。
ドキュメントは以下で、ここはドキュメント内記載のコマンドを各 PC の OS 環境に合わせて実行すれば OK です。
僕は Mac ユーザなので以下のコマンドでインストールしました。
$ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
$ sudo installer -pkg ./AWSCLIV2.pkg -target /
インストールが完了したら以下のコマンドで確認します。
$ aws --version
# 実行結果
aws-cli/2.7.2 Python/3.9.11 Darwin/21.6.0 exe/x86_64 prompt/off
接続情報の設定
cli をどこの AWS 環境に実行するかの設定を行います。
まずは以下のコマンドで初期の接続情報を確認してみます。
$ aws configure list
# 実行結果
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key <not set> None None
secret_key <not set> None None
region <not set> None None
初期値は何もセットされていないことが確認できます。
access_key と secret_key という項目がありますが、こちらが cli から AWS リソースにアクセスするときに使用するアクセスキー情報になりますのでこちらを発行していきます。
アクセスキーの発行
AWS には Email アドレスとパスワードでログインする ルートユーザ とアカウント ID と AWS 環境から作成した IAMユーザ の情報でログインする 2 パターンが存在します。

ルートユーザの場合は右上のアカウント情報から セキュリティ認証情報 をクリックし

遷移した IAM の管理画面で アクセスキーを作成 ボタンをクリックします

IAM ユーザの場合は ユーザ タブから セキュリティ認証情報 タブを選択し アクセスキーを作成 ボタンをクリックします

後続処理は共通です。
コマンドラインインターフェース(CLI) を選択し、 次へ ボタンをクリック

任意で説明を入力し、アクセスキーを作成 ボタンをクリック

.csvファイルをダウンロード ボタンをクリックし、完了 ボタンをクリックして終了です。
※CSV ファイルはここでしか取得できないのでダウンロードを忘れた場合は再度作成し直します。

ダウンロードしてきた CSV は以下のフォーマットになっていることが確認できます。
Access key ID,Secret access key
xxxxxxxxxxxxx,yyyyyyyyyyyyyyyyy
先ほど、aws configure list で確認した access_key が Access key ID に、secret_key が Secret access key に対応づく形になります。
アクセスキーを aws cli の認証情報と紐付ける
先ほど作成したアクセスキー情報を設定すればコマンドは実行できるのですが、ここで profile と default の概念を理解しながら設定を行ってみましょう。
aws cli にアクセスキー情報を設定するときには以下のコマンドを使用します。
$ aws configure
対話型で入力を求められますので各情報を以下に沿って入力します。
AWS Access Key ID [None]: csv の Access key ID
# Enter
AWS Secret Access Key [None]: csv の Secret access key
# Enter
Default region name [None]: 未入力
# Enter
Default output format [None]: 未入力
# Enter
このコマンドが完了すると ~/.aws/credentials に情報が記載されます。
$ cat ~/.aws/credentials
# 実行結果
[default]
aws_access_key_id = *****
aws_secret_access_key = *****
aws configure に沿って入力した内容が反映され [default] という名前でグルーピングされていることが確認できます。
また、こちらの情報は以下のコマンドでも確認できます。
$ aws configure list
次に aws configure は --profile オプションを追加して 名前つきのプロファイル を設定することができます。
以下のコマンドを実行し、先ほど同様に対話型の入力を行い実行結果を確認します。
$ aws configure --profile hoge
$ cat ~/.aws/credentials
# 実行結果
[default]
aws_access_key_id = *****
aws_secret_access_key = *****
[hoge]
aws_access_key_id = *****
aws_secret_access_key = *****
[hoge] という名前でグルーピングされた情報が追加されたことが確認できます。
また、こちらの情報は以下のコマンドでも確認できます。
$ aws configure list --profile hoge
以下のコマンドでは現在設定されているプロフィール名を一覧で取得することもできます。
$ aws configure list-profiles
これが default と profile でのアクセスキー設定方法の違いになります。
この --profile オプションをつけるとつけないで何が違うのかを説明します。
まず、profile ですが、このオプションは aws cli コマンドの全てに適用されるグローバルオプションになります。
使い道としては、複数の AWS 環境を管理していて環境ごと違うアクセスキー情報を切り替えたいときに使用されます。
例えば、以下のアクセスキー情報を保持していたとします。
$ cat ~/.aws/credentials
# 実行結果
[aws-env1-user]
aws_access_key_id = www
aws_secret_access_key = xxx
[aws-env2-user]
aws_access_key_id = yyy
aws_secret_access_key = zzz
環境ごとの S3 バケットの一覧を確認したいときに以下のコマンドで確認ができます。
$ aws s3 ls --profile aws-env1-user
$ aws s3 ls --profile aws-env2-user
※ちなみにこの credentials 情報は aws configure コマンドから設定せず直接編集しても OK です
--profile オプションをつけなかった場合は以下の結果になります。
$ aws s3 ls
# 実行結果
Unable to locate credentials. You can configure credentials by running "aws configure".
認証情報がないとのエラーが発生します。--profile オプションによりどの AWS 環境に接続するかを指定していないためのエラーです。
では、以下のアクセスキー情報のように default が存在した場合はどうなるかです。
$ cat ~/.aws/credentials
# 実行結果
[default]
aws_access_key_id = aaa
aws_secret_access_key = bbb
[aws-env1-user]
aws_access_key_id = www
aws_secret_access_key = xxx
[aws-env2-user]
aws_access_key_id = yyy
aws_secret_access_key = zzz
$ aws s3 ls
# 実行結果
2022-11-06 22:20:42 bucket-name
エラーが発生せずに default のアクセスキー情報を発行した AWS 環境の S3 のバケットリストが取得できます。
以上から、プロフィール先を明示的に指定しないときに default プロファイルが存在する場合はそちらに接続しに行きますが、ない場合はエラーを返すという挙動が確認できたかと思います。
ここを理解しとくのは結構重要です。今回のように ls コマンドを実行するレベルならまだしも cp コマンドを実行したときに --profile の指定を忘れて違う環境にデータをアップロードしてしまった、データを書き換えてしまったなどが発生すると中々の事故につながる恐れがあります。
まとめると aws configure を実行するときは基本 --profile オプションをつけて名前でグルーピングしておき、default は使用しない、オプションをつけ忘れてもエラーになるように設定しておいた方が無難かと思います。
MFA の設定がある場合
MFA 設定があるルートユーザないし IAM アカウントで aws cli を実行するときは一時的なアクセス情報を取得して実行する必要があります。
詳細は以下の記事を参考にしてください。
さいごに
さいごまで読んでいただきありがとうございます。
以下今回のまとめです。
aws cli を実行するまでの手順と注意点。
- cli のインストール
- 対象の AWS 環境のユーザからアクセスキー情報を作成する
-
aws configureでアクセスキー情報を設定する -
aws configureは--profileオプションを使用し名前でグルーピングできる -
--profileオプションを付与しなかった場合defaultとして作成される - aws cli のコマンド実行時に
--profileを指定しないでdefaultが存在するとそこに接続しに行く - 事故る可能性があるので基本的に
defaultは使用しない
間違いの指摘やリクエストなどありましたら加筆していきたので是非、ご意見をいただけたらと思います。
それではまた次の記事でお会いしましょう。
Discussion