1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS CLI の認証周りについて

Last updated at Posted at 2021-08-24

はじめに

aws configureコマンドを実行するとなぜcredentialsconfigに設定が分かれているのか疑問に思い、認証周りを整理しました。

使用環境とバージョン

  • macOS Big Sur
  • git version 2.24.3 (Apple Git-128)
  • aws-cli/2.1.16

記事の対象

  • ある程度AWSの知識がある方
  • AWSの認証周りに興味のある方

事前準備

  • AWS CLIのインストール
  • IAMユーザのアクセスキーとシークレットキーの発行

configおよびcredentialsについて

aws configureコマンドを使用して、AWS CLIに設定を追加します。

$ aws configure
AWS Access Key ID [None]: [アクセスキー]
AWS Secret Access Key [None]: [シークレットキー]
Default region name [None]: ap-northeast-1
Default output format [None]: json

上記コマンドを実行すると以下の2ファイルに設定が追加されます。

~/.aws/credentials
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
~/.aws/config
[default]
region=ap-northeast-1
output=json

configcredentialsの違いは以下の通り、機密性の違いで分かれているようです。

AWS CLI は aws configure で指定された機密性の高い認証情報を、ホームディレクトリの .aws という名前のフォルダにある credentials という名前のローカルファイルに保存します。aws configure で指定された機密性の低い設定オプションは、config という名前のローカルファイルに保存されるだけでなく、ホームディレクトリの .aws フォルダにも保存されます。

設定ファイルと認証情報ファイルの設定

名前付きプロファイルについて

credentialsconfigには同じファイル内で複数のプロファイルを設定することができます。
以下にuser1のIAMユーザ認証情報を追加しています。

~/.aws/credentials
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[user1]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
~/.aws/config
[default]
region=ap-northeast-1
output=json

[profile user1]
region=us-east-1
output=text

追加したプロファイルはawsコマンドを使用する際のオプションに指定することができます。

s3コマンドの例
$ aws s3 ls --profile user1

また、デフォルトで特定のプロファイル指定したい場合は環境変数に設定できます。
環境変数に設定する場合はawsコマンド時の--profileオプションは不要です。

$ export AWS_DEFAULT_PROFILE=user1
$ aws sts get-caller-identity  // 確認コマンド

名前付きプロファイル - AWS Command Line Interface

スイッチロール権限で認証する

configに新たにプロファイルと追加し、以下のキーを設定します。

キー 設定内容
role_arn スイッチ先のロールARN
source_profile role_arnで設定したロールにアクセス権限があるIAMユーザー認証情報のプロファイル名を設定
~/.aws/config
[default]
region=ap-northeast-1
output=json

+ [profile switchrole]
+ role_arn = arn:aws:iam::{スイッチ先のAWSアカウントID}:role/{ロール名}
+ source_profile = default
+ region=ap-northeast-1
+ output=json

source_profileにはrole_arnで設定したロールを使用するアクセス権限があるIAMユーザー認証情報を設定する必要があります。上記例ではcredentialsdefaultに設定しているIAMユーザの認証情報が参照されます。

role_arnで設定したロールにはcredentialsdefaultに設定しているIAMユーザにsts:assume-roleを呼び出すアクセス権限が付与されている必要があります。

role-arnに設定したロールの信頼関係
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::{credentialsにdefaultで設定されているIAMユーザのAWSアカウントID}:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

CLI は、sts:AssumeRole オペレーションをバックグラウンドで使用してこれを達成します。これらの一時的な認証情報は、次にリクエストされた CLI コマンドを実行するために使用されます。指定されたロールには、リクエストされた CLI コマンドを実行できる IAM アクセス許可ポリシーがアタッチされている必要があります。

以下のコマンドが発行されているイメージになります。

$ aws sts assume-role \
    --role-arn arn:aws:iam::{スイッチ先のAWSアカウントID}:role/{ロール名} \
    --role-session-name {botocoreが発行するセッション名}

assume-role — AWS CLI 1.18.211 Command Reference

参考記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?