AWS CLIのaws loginを使ってアクセスキーなしでログインする方法

この記事は約7分で読めます

こんにちは、 @Manabu です。

AWS CLIやIaCツールをローカルPCから使うために、IAMユーザーのアクセスキーを発行している方は多いのではないでしょうか。

私もこれまで、AWS環境へのデプロイやサービスの操作にIAMユーザーのアクセスキーを使用していました。

サービスごとにIAMユーザーや権限を用意するのが面倒で、Administrator権限を持ったIAMユーザーのアクセスキーを使ってしまうこともあり、認証方法を見直すことにしました。

今回は、AWS CLIのaws loginを使い、長期間有効なアクセスキーをローカルへ保存せず、一時的な認証情報でAWSを操作する方法について紹介します。

この記事は、以下のような方におすすめです。

こんな方におすすめ

  • AWS CLIのためにIAMユーザーのアクセスキーを発行している
  • ローカルPCで長期アクセスキーを管理したくない
  • ブラウザで認証して一時的にAWS CLIを使いたい

aws loginとは

aws loginは、AWSマネジメントコンソールの認証情報を使い、AWS CLIやSDKで利用できる一時的な認証情報を取得するコマンドです。

コマンドを実行するとブラウザが開き、AWSへサインインした後、選択したコンソールセッションに対応する認証情報がAWS CLIへ設定されます。

従来のアクセスキーとの主な違いは以下です。

項目 IAMユーザーのアクセスキー aws login
認証方法 アクセスキーIDとシークレットアクセスキー ブラウザ上のコンソール認証
有効期間 削除・無効化するまで有効 セッション期間内のみ有効
ローカルでの管理 長期認証情報を保存 一時認証情報と更新用情報をキャッシュ
MFA 別途仕組みが必要 コンソールのサインイン方法を利用
終了方法 アクセスキーを無効化・削除 aws logout

AWS CLIは一時認証情報を必要に応じて15分ごとに自動更新します。ログインセッションは、IAMプリンシパルに設定されたセッション時間の範囲で最大12時間利用できます。

aws loginを使うメリット

一番のメリットは、長期間有効なアクセスキーをローカルPCへ保存しなくてよいことです。

アクセスキーを設定する場合、通常は~/.aws/credentialsなどへ認証情報を保存します。誤ってGitへ登録したり、PCから流出したりすると、無効化するまで悪用される可能性があります。

aws loginで取得する認証情報には有効期限があるため、認証情報が外部へ漏れた場合に利用され続ける時間を短くできます。

また、ブラウザから普段利用しているコンソールの認証方法でサインインできるため、MFAを設定しているIAMユーザーやフェデレーション環境でも利用できます。

aws loginを使っても権限は小さくならない

注意

aws loginは認証情報を一時的にしますが、AWSサービスへ対する権限を小さくする機能ではありません。

Administrator権限を持つIAMユーザーでログインすれば、発行される一時認証情報も、そのIAMユーザーに許可された操作を実行できます。

そのため、aws loginへ変更した後も、次の対応は必要です。

  • IAMユーザーやロールへ必要最小限の権限を設定する
  • MFAを有効にする
  • rootユーザーを普段の開発作業に使わない
  • 作業内容に応じてプロファイルやロールを分ける

aws loginは、Administrator権限を安全に使うための機能ではなく、長期アクセスキーへの依存を減らすための機能として考えるのがよいと思います。

事前準備

AWS CLIのバージョンを確認する

aws loginを利用するには、AWS CLIバージョン2.32.0以降が必要です。

次のコマンドで確認します。

aws --version

バージョンが古い場合は、AWS CLIを更新してください。

IAMユーザーへ権限を追加する

IAMユーザーやIAMロールでaws loginを利用するには、次のAWS管理ポリシーを設定します。

SignInLocalDevelopmentAccess

このポリシーは、ローカル開発用のログイン処理を許可するものです。S3やCloudFormationなど、実際に操作するAWSサービスの権限は別途必要です。

IAM Identity Centerを利用している場合は、aws loginではなくaws sso loginを利用します。

aws loginを実行する

デフォルトプロファイルでログインする場合は、次のコマンドを実行します。

aws login

名前付きプロファイルを作成する場合は、--profileを指定します。

aws login --profile my-dev-profile

初回実行時など、リージョンが設定されていない場合は、利用するリージョンを入力します。

AWS Region [us-east-1]: ap-northeast-1

コマンドを実行すると、デフォルトブラウザが自動的に開きます。

aws loginでAWSコンソールセッションを選択する画面

すでにAWSマネジメントコンソールへログインしている場合は、表示されたアクティブセッションを選択します。

ログインしていない場合は、IAMユーザーなど普段使用している方法でAWSへサインインします。

認証が完了したら、ブラウザに完了画面が表示され、ターミナルへ戻ります。

aws loginの認証完了画面

ログインした認証先を確認する

ログイン後、次のコマンドで使用中の認証情報を確認します。

aws sts get-caller-identity --profile my-dev-profile

結果のAccountとArnを確認します。

{
  "UserId": "EXAMPLEUSERID",
  "Account": "123456789012",
  "Arn": "arn:aws:sts::123456789012:assumed-role/example-role/example-session"
}

複数のAWSアカウントを利用している場合は、デプロイ前にこのコマンドを実行すると、誤ったアカウントへの操作を防ぎやすくなります。

AWS CLIでプロファイルを使用する

ログインしたプロファイルは、通常のAWS CLIコマンドから利用できます。

aws s3 ls --profile my-dev-profile

CloudFormationをデプロイする場合も、同じように指定します。

aws cloudformation deploy \
  --profile my-dev-profile \
  --region ap-northeast-1 \
  --stack-name example-stack \
  --template-file template.yml

環境変数でプロファイルを指定することもできます。

export AWS_PROFILE=my-dev-profile
aws sts get-caller-identity

認証情報の保存場所

aws loginで取得した一時認証情報と更新に必要な情報は、デフォルトで次のディレクトリへキャッシュされます。

macOS・Linux:

~/.aws/login/cache

Windows:

%USERPROFILE%\.aws\login\cache

保存場所はAWS_LOGIN_CACHE_DIRECTORY環境変数で変更できます。

一時認証情報であっても、キャッシュファイルを共有したり、Gitへ登録したりしないようにしてください。

ブラウザを開けない環境でログインする

SSH接続先など、AWS CLIを実行する端末でブラウザを開けない場合は、--remoteを利用できます。

aws login --remote --profile my-dev-profile

表示されたURLをブラウザがある端末で開き、認証後に表示されるコードをAWS CLIへ入力します。

作業終了後にログアウトする

作業が終了したら、次のコマンドでキャッシュされた認証情報を削除します。

aws logout --profile my-dev-profile

全てのログインプロファイルからログアウトする場合は、--allを指定します。

aws logout --all

ログアウト後は、再びaws loginを実行するまで、対象プロファイルでAWS CLIを実行できません。

まとめ

今回は、AWS CLIのaws loginを使い、長期アクセスキーを保存せずにAWSへログインする方法を紹介しました。

ブラウザで認証して一時的な認証情報を利用することで、IAMユーザーのアクセスキーをローカルで管理する必要がなくなります。

ただし、aws loginを利用してもIAMの権限は変わりません。最小権限、MFA、利用アカウントの確認と組み合わせて使用することが大切です。

アクセスキーを長期間使っている方は、認証方法を見直す選択肢として検討してみてください。

参考資料

REFERENCEコンソール認証情報を使用して AWS ローカル開発にログインする - AWS Command Line Interfacedocs.aws.amazon.comREFERENCElogin — AWS CLI 2.39.2 Command Referencedocs.aws.amazon.comREFERENCESimplified developer access to AWS with ‘aws login’ | Amazon Web Servicesaws.amazon.com