目次
1.概要
- 最近はSSOを使う事が多いが、AWS CLIの設定も時々行う
- そのため、AWS CLIの設定の備忘録を残す
2.前提
- 前提としてAWS CLI v2がインストールされているとする
- v2以降でないとSSOが未対応のため
|
|
3.方法
3.1.アクセスキーでの設定方法
3.1.1.2つのユーザータイプ
AWSには次の2つのユーザータイプがある。
それぞれのタイプによってフローが若干異なる。
- ルートユーザ
- メールアドレスとパスワードでログインする
- IAMユーザー
- アカウントIDとAWS環境から作成したIAMユーザの情報でログインする
3.1.2.ルートユーザーの場合
まずはメニューからセキュリティ認証情報に進む。
その後アクセスキー作成を押下する。
3.1.3.IAMユーザーの場合
IAM > ユーザー > セキュリティ認証情報
からでアクセスキーを作成に遷移する。
3.1.4.アクセスキーの作成(共通)
- アクセスキーの作成からはルートユーザーとIAMユーザーで共通のフロー
- 次のフローに従う
- 最終的にクレデンシャルのCSVをダウンロードする
3.1.5.AWS CLIとプロファイル
- 前提としてAWS CLIはProfileという概念を持つ。
- 複数環境を分けられるように、Profileという名前でAWSクレデンシャルを管理する。
- グローバル(デフォルト)のProfileは
default
となる。
3.1.6.AWS CLIとアクセスキーの紐づけ
3.1.6.1.プロファイルの設定
デフォルトの場合は以下のコマンドを使う。
|
|
プロファイル名を指定して設定する場合は以下を使う。
|
|
3.1.6.2.プロファイルの確認
現在使用中のプロファイルの確認は次を使う。
|
|
プロファイル名を指定する場合は次となる。
|
|
設定されているプロファイル名一覧を取る場合は以下を使う。
|
|
3.1.6.3.プロファイルの編集
プロファイルを編集する場合は、次のファイルに格納されているため、直接編集する。
|
|
設定ファイルの中身は次のような形になる。
|
|
3.1.6.4.Profileを指定してAWS CLIを使う
次のようにコマンドに対して--profile xxx
逐次設定する。
なお、デフォルトはdefault
プロファイルが利用される。
|
|
もしくは、環境変数から設定する。
環境変数に指定した場合は--profile
の指定は不要になる。
|
|
3.1.7.環境変数から設定する場合
環境変数からAWS CLIの認証情報の設定をする場合は、次のような変数を環境変数としてexportする。
|
|
3.1.8.MFAの場合
MFAの場合はSTSを利用する。
|
|
なお、オプションは次となる。
--serial-number
IAM > ユーザー > 認証情報 > MFAデバイスの割り当て > ARN
を設定する
--token-code
- MFAの認証コード
--profile
- AWSアカウントのプロフィール名
上記コマンドを実行すると、次が返る。
|
|
このレスポンスをベースにcredentialを更新する。
|
|
つまり、逐次作業用のcredentialを取ってくる必要があるという事。
3.2.SSOでの設定方法
3.2.1.SSOの初回セットアップ
- 次のコマンドでAWS SSOの初期設定をする
- なお、RegionはIAM Identity Centerを設置したRegionを指定する
invalid_grant invalid grant provided aws sso
のエラーの場合は、大体Regionの設定ミス- profile名は新たに設定するモノであり、
<env>-<role>
がおすすめ - Roleは
PowerUser
やAdministrationAccess
など
|
|
- ここで複数のAWSアカウントや複数のRoleがある時はインタラクティブに聞かれる
- しかし、2回目以降はAWSアカウントやRoleは聞かれない
- 最初にセットしたものが自動的に選択される
- 故にProfileで設定する名前は
<env>-<role>
などがベター - ブラウザを開いてSSOのCLIでの利用許可を求められるので、ログインして「Allow」を押下する
|
|
これにて最初のセットアップは完了。
3.2.2.SSOの設定の確認
下記コマンドでバケット一覧が取得できればOK。
これでS3への画像アップロード機能などがローカルサーバーでも動くはず。
|
|
3.2.3.SSOの設定の意味
~/.aws/config
は下記のようになってる- これはつまり、新しいprofile
xxx-admin
が作られて、それがssoのログインと紐づいたという意味 - もちろん、この時に
xxx-admin
用のアクセストークンなどのクレデンシャルを設置する必要はない - あくまでブラウザでSSOでログインしたのが
AWS_ACCESS_KEY
やAWS_ACCESS_SECRET
の取得に相当する
|
|
3.2.4.SSOでログイン(2回目以降)
次のコマンドで、2回目以降のSSOによるアクセスキーの有効化を行う。
このprofileは先ほどaws configure sso
で新たに作ったprofileを指定する。
|
|
4.その他
4.1.~/.aws/config
と ~/.aws/credentials
の違い
次の違いがある。
~/.aws/credentials
- AWSの認証情報(アクセスキーなど)を格納するために使用される
~/.aws/config:
- AWS CLIの設定を格納するために使用される
- また、
~/.aws/credentials
で定義されているプロファイルに追加の設定情報を提供するためにも使われる- 上記STSの例がまさにそれ
4.2.AWS_PROFILE
とAWS_DEFAULT_PROFILE
の違い
次の違いがある。
AWS_PROFILE
- これは最も一般的に使用される環境変数で、AWS CLIまたはSDKで使用するプロファイルを指定する
~/.aws/credentials
または~/.aws/config
ファイル内の特定のプロファイルを選択するために使われる
AWS_DEFAULT_PROFILE
- これは主に後方互換性のために存在する環境変数で、AWS_PROFILEと同じように機能する
- 以前のバージョンのAWS CLIではAWS_DEFAULT_PROFILEが使われていたが、現在ではAWS_PROFILEが推奨されている
なお、AWS_PROFILE
とAWS_DEFAULT_PROFILE
の両方がある場合はAWS_DEFAULT_PROFILE
が勝つ。
4.3.AWSの環境変数の管理方法
AWSの環境変数は、次の管理がおすすめ
- まず、githubのリポジトリは、GHQで自動的にフォルダを管理する
- organizationレベルで
.envrc
ファイルを設置し、direnvで自動的に読み込む - レポジトリ単位で
.env
ファイルを設置し、docker-composeで自動的に読み込む