🔑

【AWS】aws cliの設定方法

2023/01/31に公開

はじめに

aws cli の初期セットアップ方法の記事です。
AWS がちょっと気になる、aws cli で AWS のリソースにアクセスしてみたい。

そんな方への入門記事になります。

この記事でわかること

この記事を読む上での前提条件

aws cli のインストール

まずは手元のローカルマシンに aws cli をインストールします。
ドキュメントは以下で、ここはドキュメント内記載のコマンドを各 PC の OS 環境に合わせて実行すれば OK です。

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

僕は 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_keysecret_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_keyAccess key ID に、secret_keySecret access key に対応づく形になります。

アクセスキーを aws cli の認証情報と紐付ける

先ほど作成したアクセスキー情報を設定すればコマンドは実行できるのですが、ここで profiledefault の概念を理解しながら設定を行ってみましょう。

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

これが defaultprofile でのアクセスキー設定方法の違いになります。
この --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 を実行するときは一時的なアクセス情報を取得して実行する必要があります。
詳細は以下の記事を参考にしてください。

https://zenn.dev/akkie1030/articles/aws-cli-mfa-account

さいごに

さいごまで読んでいただきありがとうございます。

以下今回のまとめです。

aws cli を実行するまでの手順と注意点。

  • cli のインストール
  • 対象の AWS 環境のユーザからアクセスキー情報を作成する
  • aws configure でアクセスキー情報を設定する
  • aws configure--profile オプションを使用し名前でグルーピングできる
  • --profile オプションを付与しなかった場合 default として作成される
  • aws cli のコマンド実行時に --profile を指定しないで default が存在するとそこに接続しに行く
  • 事故る可能性があるので基本的に default は使用しない

間違いの指摘やリクエストなどありましたら加筆していきたので是非、ご意見をいただけたらと思います。

それではまた次の記事でお会いしましょう。

GitHubで編集を提案

Discussion