今日やったこと

  • AWS CLI の認証方法について整理した
  • 従来のアクセスキー方式と、aws login を使うログイン方式の違いを確認した
  • 長期アクセスキーをローカル環境に保存し続ける運用は、できるだけ避けた方がよいことを確認した
  • --profile を指定して、用途ごとに AWS CLI の認証設定を分けられることを確認した
  • 今回は例として reotech-dev というプロファイル名で整理した
aws login \
  --profile reotech-dev \
  --region ap-northeast-1 \
  --remote

ログイン後は、以下のように --profile を指定して AWS CLI を実行する。

aws sts get-caller-identity \
  --profile reotech-dev

--profile を指定することで、default プロファイルとは別の認証情報・設定を使って AWS CLI を実行できる。

学んだこと

アクセスキー方式とは

AWS CLI では、以前から以下のようなアクセスキーを設定して AWS API を実行する方法が使われてきた。

AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY

また、aws configure を使うと、認証情報は ~/.aws/credentials などに保存される。

aws configure --profile reotech-dev

この方法はシンプルだが、IAM ユーザーのアクセスキーは削除・無効化するまで有効な長期認証情報になる。

そのため、ローカルPCや開発環境に長期アクセスキーを保存し続けると、漏えい時のリスクが大きくなる。

最近は一時的な認証情報を使う方が推奨される

AWS では、可能な限り長期アクセスキーではなく、一時的な認証情報を使うことが推奨されている。

一時的な認証情報は、一定時間で期限切れになるため、万が一漏えいした場合でも長期アクセスキーよりリスクを抑えやすい。

今回確認した aws login は、AWS CLI からログインして一時的な認証情報を利用するための方法として理解した。

aws login の基本

aws login を使うと、ブラウザ認証を通じて AWS CLI からログインできる。

aws login \
  --profile reotech-dev \
  --region ap-northeast-1 \
  --remote

それぞれの意味は以下の通り。

  • aws login
    • AWS CLI からログインするためのコマンド
  • --profile reotech-dev
    • reotech-dev という名前のプロファイルを使う
  • --region ap-northeast-1
    • 東京リージョンを指定する
  • --remote
    • ブラウザを自動で開けない環境などで、表示されたURLを別ブラウザで開いて認証する

WSL や SSH 接続先のように、CLI を実行している環境でブラウザを直接開きにくい場合は、--remote が便利そうだと感じた。

profile を分けると環境を切り替えやすい

AWS CLI では、--profile を使って認証情報や設定を切り替えられる。

たとえば、開発用の環境であれば以下のように実行できる。

aws s3 ls --profile reotech-dev

CloudFormation を操作する場合も、同じように --profile を指定できる。

aws cloudformation list-stacks \
  --profile reotech-dev \
  --region ap-northeast-1

複数のAWSアカウントや環境を扱う場合、default にすべて寄せるよりも、用途ごとにプロファイル名を分けた方が安全に扱いやすそうだと感じた。

あいまいなこと

  • aws loginaws sso login の違いはまだ整理できていない
  • IAM Identity Center を使った認証方式の全体像はまだ理解が浅い
  • ログイン後の認証情報がどこにキャッシュされ、どのタイミングで期限切れになるのかはもう少し確認したい
  • aws login で作成される設定と、従来の ~/.aws/credentials / ~/.aws/config の関係はまだ整理したい

次にやること

  • aws loginaws sso login の違いを整理する
  • IAM Identity Center とは何かを確認する
  • AWS CLI の profile / config / credentials の関係を整理する
  • aws sts get-caller-identity で現在どの認証情報を使っているか確認する方法を整理する