はじめに
企業でAWSを利用する際、セキュリティ強化と管理効率化のためにAWS IAM Identity Center(以下IdC、旧AWS Single Sign-On)を導入するケースがよくあります。AWS SSOを利用することで、複数のAWSアカウントへの一元的なアクセス管理が可能になり、ユーザーは一度のログインで複数のアカウントやロールにアクセスできるようになります。
しかし、開発者などがAWS CLIを使用する際に、IdCの認証情報をどのように設定すればよいか迷うことがあります。本記事では、IdCを利用している環境での認証設定方法について解説します。なお、AWS SDKでもCLIと同じ認証情報を参照しますので、今回解説する設定を行えばAWS SDKを利用したアプリケーションも利用可能になります。
設定方法
IdCを使用する場合、設定の流れは次のようになります。
- プロファイルを設定ファイルに記載する
- aws sso loginコマンドを実行
- 以後、AWS CLIを利用しリソースへのアクセスが可能
認証情報を記載する設定ファイルの場所は以下の通りです。設定ファイルの拡張子なく、単なるテキストファイルです。
- Windowsの場合
C:\Users\USERNAME\.aws\config
- macOS、Linuxの場合
~/.aws/config
基本的な設定例
設定ファイルにsso-session
とprofile
を記載します。パスワード、ユーザーメーの入力は不要です。これらの設定を行うことにより、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課