AWS IAM Identity Center を利用している場合の AWS CLI 認証設定方法

記事タイトルとURLをコピーする

はじめに

企業でAWSを利用する際、セキュリティ強化と管理効率化のためにAWS IAM Identity Center(以下IdC、旧AWS Single Sign-On)を導入するケースがよくあります。AWS SSOを利用することで、複数のAWSアカウントへの一元的なアクセス管理が可能になり、ユーザーは一度のログインで複数のアカウントやロールにアクセスできるようになります。

しかし、開発者などがAWS CLIを使用する際に、IdCの認証情報をどのように設定すればよいか迷うことがあります。本記事では、IdCを利用している環境での認証設定方法について解説します。なお、AWS SDKでもCLIと同じ認証情報を参照しますので、今回解説する設定を行えばAWS SDKを利用したアプリケーションも利用可能になります。

設定方法

IdCを使用する場合、設定の流れは次のようになります。

  1. プロファイルを設定ファイルに記載する
  2. aws sso loginコマンドを実行
  3. 以後、AWS CLIを利用しリソースへのアクセスが可能

認証情報を記載する設定ファイルの場所は以下の通りです。設定ファイルの拡張子なく、単なるテキストファイルです。

  • Windowsの場合
    • C:\Users\USERNAME\.aws\config
  • macOS、Linuxの場合
    • ~/.aws/config

基本的な設定例

設定ファイルにsso-sessionprofileを記載します。パスワード、ユーザーメーの入力は不要です。これらの設定を行うことにより、AWS CLIは一時的な認証情報を取得してAWSリソースにロールを利用したアクセスが可能となります。

[profile dev-profile]             # dev-profileは任意の名前を指定可能
sso_session = my-sso-session      # sso-sessionで指定した名前
sso_account_id = 123456789012     # SSO経由で利用するAWSアカウントID
sso_role_name = DeveloperAccess   # SSO経由で利用するロール名
region = ap-northeast-1           # デフォルトのリージョン
output = json                     # デフォルトの出力形式

[sso-session my-sso-session]                             # my-sso-sessionは任意の名前を指定可能
sso_start_url = https://my-sso-portal.awsapps.com/start  # IdCのAccessポータルのURL
sso_region = ap-northeast-1                              # IdCの設定しているリージョン名
sso_registration_scopes = sso:account:access             # 原則この値そのままでOK

この設定の形式はSSOトークンプロバイダー設定と呼ばれます。

ちなみに、aws configure ssoコマンドを利用しても設定が可能です。ただ、次に示す複数アカウントの設定など、複雑な設定を行うことが多いと思うので、直接ファイルを編集してしまったほうが楽でしょう。

複数アカウント・ロールの設定例

複数のアカウントやロールを使い分けたい場合や、複数のIdCを利用している場合は以下の通りです。

# 1つ目のIdC認証情報設定
[profile dev-profile]
sso_session = my-sso-session
sso_account_id = 123456789012
sso_role_name = DeveloperAccess
region = us-east-1

[profile prod-profile]
sso_session = my-sso-session
sso_account_id = 987654321098
sso_role_name = ProductionReadOnly
region = ap-northeast-1

[profile admin-profile]
sso_session = my-sso-session
sso_account_id = 987654321098
sso_role_name = AdministratorAccess
region = ap-northeast-1

[sso-session my-sso-session]
sso_start_url = https://my-sso-portal.awsapps.com/start
sso_region = ap-northeast-1
sso_registration_scopes = sso:account:access

# 2つ目のIdC認証情報設定
[profile second-admin-profile]
sso_session = second-sso-session
sso_account_id = 555666777888
sso_role_name = AdministratorAccess
region = ap-northeast-1

[sso-session second-sso-session]
sso_start_url = https://second-sso.awsapps.com/start
sso_region = ap-northeast-1
sso_registration_scopes = sso:account:access

AWS CLIの実行

設定ファイルの設定が完了後、IdCへログインし一時的な認証情報を取得します。一時的な認証情報はIdCで設定された有効期限内で利用可能です。有効期限が切れたら、再度ログインを実施してください。

ログインは次のコマンドを実行します。どのアカウントを利用するは、環境変数で設定するか、コマンドごとにプロファイルを指定する方法があります。

aws sso login --profile dev-profile


# 環境変数で設定に設定した場合は--profileは不要
export AWS_PROFILE=dev-profile
aws sso login

ブラウザーが自動的に開くか、表示されたURLを開きIdCの認証処理を完了させます。認証が完了するとAWS CLIを利用して、アカウントのリソースにアクセスが可能になります。先ほどの記載した通り、認証情報は有効期限内であるかぎり利用できますので、都度loginは不要です。

次のコマンドの通り、AWSのリソースにアクセスしてみてください。

aws s3 ls                        # 環境変数で設定したプロファイル(dev-profile)が利用される
aws s3 ls --profile prod-profile # オプションで指定したプロファイル(prod-profile)が利用される

なお、AWS CLI v2はIdCに対応していますが、v1は未対応です。

非推奨な設定方法

設定方法にはレガシー設定と呼ばれるものもあります。こちらは非推奨な設定ですので、SSOトークンプロバイダー設定を利用するようにしてください。

はレガシー設定はprofile内にsso_start_urlなどの値を記述します。

# レガシー設定の例(非推奨)
[profile my-dev-profile]
sso_start_url = https://my-sso-portal.awsapps.com/start
sso_region = us-east-1
sso_account_id = 123456789012
sso_role_name = readOnly
region = us-west-2
output = json

AWS SDKでのSSO利用

SSOトークンプロバイダー設定は、各言語のAWS SDKでもそのまま利用できます。

Python、次に示すようにプロファイルを利用してセッションを作成できます。

import boto3

# 環境変数にセットされたプロファイルを利用する場合
session = boto3.Session()

# プロファイルを指定する場合
# session = boto3.Session(profile_name='dev-profile')

# S3クライアントを作成
s3_client = session.client('s3')

# S3バケット一覧を取得
response = s3_client.list_buckets()
for bucket in response['Buckets']:
    print(bucket['Name'])

利用時のTips

1. セッションの有効期限

AWS SSOのセッションには有効期限があります。期限が切れた場合は再度ログインが必要です。

aws sso login

一時的な認証情報は~/.aws/sso/cache/に保存されています。何か問題があったらこちらを削除して認証し直してみるのも良いでしょう。

2. 認証情報の確認

現在の認証情報を確認するには、次のコマンドを実行します。

aws sts get-caller-identity

3. サインアウト

サインアウトは次のコマンドを実行します。

aws sso logout

よくあるエラーと対処法

エラー: Error loading SSO Token: Token for ... does not exist

対処法: SSOセッションの有効期限が切れています。再ログインしてください。

aws sso login

まとめ

IdCを利用した環境での認証設定について解説しました。主なポイントは以下の通りです:

  • 設定情報は~/.aws/configファイルに保存される
  • CLI、SDKから認証情報を利用するにはaws sso loginが必要
  • SDKでも設定したプロファイルをそのまま利用可能
  • 複数アカウント・ロールの管理にはプロファイルを使い分ける
  • セッションの有効期限に注意し、必要に応じて再ログインする

IdCを活用することで、セキュアで効率的なAWS環境での開発が可能になります。適切な設定を行い、チーム全体での統一されたアクセス管理を実現しましょう。

参考

SSOトークンプロバイダー設定の設定値の詳細については、以下の公式ドキュメントを参考にしてください。

IAM Identity Center 認証情報プロバイダー - AWS SDKsとツール

石田順一(記事一覧)

カスタマーサクセス部 CS3課