複数 AWS アカウントへのアクセスを楽に!aws configure sso 設定術
AWS を利用する組織にとって、複数の AWS アカウントを管理することは一般的です。開発環境、ステージング環境、本番環境といった目的別にアカウントを分けることで、セキュリティリスクの軽減やコスト管理の最適化が可能です。しかし、複数のアカウントにアクセスするたびに IAM ユーザーを切り替えたり、認証情報を管理するのは煩雑で、セキュリティ上のリスクも伴います。
そこで登場するのが、AWS Single Sign-On (SSO) です。AWS SSO を利用することで、組織内のユーザーは一度認証するだけで、複数の AWS アカウントや AWS アプリケーションに安全にアクセスできるようになります。さらに、AWS CLI や SDK と組み合わせることで、コマンドラインやプログラムからシームレスに AWS リソースを操作することが可能です。
本記事では、aws configure sso
コマンドを中心に、複数 AWS アカウントへのアクセスを効率化するための設定方法を詳細に解説します。具体的には、AWS SSO の基本的な概念から、aws configure sso
の具体的な使い方、トラブルシューティング、そしてより高度な設定まで幅広くカバーします。
1. AWS Single Sign-On (SSO) の基本
まず、AWS SSO の基本的な概念を理解しましょう。
- シングルサインオン (SSO): ユーザーが一度認証を受けるだけで、複数のアプリケーションやサービスにアクセスできるようになる認証方法です。
- AWS SSO: AWS が提供する、クラウド環境向けの SSO サービスです。
- アイデンティティプロバイダー (IdP): ユーザーの認証情報を管理するシステムです。AWS SSO は、AWS Directory Service (Active Directory または AWS Managed Microsoft AD)、Okta、Azure AD などの外部 IdP と連携できます。
- AWS Organizations: 複数の AWS アカウントをまとめて管理できるサービスです。AWS SSO は AWS Organizations と連携することで、組織内のすべてのアカウントに SSO を適用できます。
- パーミッションセット: AWS アカウントへのアクセス権限を定義するテンプレートです。例えば、「ReadOnlyAccess」や「AdministratorAccess」といったパーミッションセットが用意されています。
- AWS CLI: コマンドラインインターフェースで AWS リソースを操作するためのツールです。
- AWS SDK: プログラミング言語から AWS リソースを操作するためのライブラリです。
AWS SSO は、以下の流れで動作します。
- ユーザーが AWS CLI または AWS マネジメントコンソールから AWS にアクセスしようとします。
- AWS SSO は、ユーザーを IdP にリダイレクトします。
- ユーザーは IdP で認証を受けます(通常はユーザー名とパスワードを入力します)。
- IdP は、認証結果を AWS SSO に送信します。
- AWS SSO は、ユーザーに割り当てられたパーミッションセットに基づいて、一時的な AWS 認証情報 (アクセスキー、シークレットキー、セッショントークン) を生成します。
- AWS CLI または AWS マネジメントコンソールは、この認証情報を使用して AWS リソースにアクセスします。
2. aws configure sso
の設定手順
aws configure sso
は、AWS CLI で AWS SSO を利用するための設定を簡単に行うためのコマンドです。
2.1 前提条件
- AWS CLI のインストール: 最新版の AWS CLI がインストールされていることを確認してください。インストール方法は、AWS のドキュメントを参照してください。
- AWS SSO の設定: AWS マネジメントコンソールから AWS SSO が有効になっていることを確認してください。有効になっていない場合は、AWS SSO を有効にし、IdP と連携を設定してください。
- AWS Organizations の設定 (推奨): 複数の AWS アカウントを管理する場合は、AWS Organizations を設定し、AWS SSO を組織全体に適用することを推奨します。
2.2 aws configure sso
の実行
ターミナルを開き、以下のコマンドを実行します。
bash
aws configure sso
すると、以下の質問が表示されます。
SSO session name (Recommended):
SSO セッションの名前を入力します。これは、複数の SSO セッションを区別するための識別子です。例えば、「default」や「dev」といった名前を設定できます。
SSO start URL [None]:
AWS SSO の開始 URL を入力します。これは、AWS マネジメントコンソールで AWS SSO を有効にした際に表示される URL です。
SSO region [None]:
AWS SSO が有効になっているリージョンを入力します。例えば、「us-west-2」などです。
SSO registration scopes [sso:account:access]:
デフォルトのままで Enter キーを押します。
Client ID [None]:
デフォルトのままで Enter キーを押します。
Client Secret [None]:
デフォルトのままで Enter キーを押します。
設定が完了すると、~/.aws/config
ファイルと ~/.aws/credentials
ファイルが更新されます。
2.3 ブラウザでの認証
aws configure sso
の実行後、ブラウザが自動的に開き、認証を求められます。IdP にログインし、AWS SSO へのアクセスを許可します。
2.4 プロファイルの作成
aws configure sso
で SSO セッションを設定した後、アカウントごとにプロファイルを作成する必要があります。プロファイルは、AWS CLI が AWS リソースにアクセスする際に使用する設定のまとまりです。
以下のコマンドを実行して、プロファイルを作成します。
bash
aws configure profile <プロファイル名>
例えば、dev
アカウント用のプロファイルを作成する場合は、以下のコマンドを実行します。
bash
aws configure profile dev
すると、以下の質問が表示されます。
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]:
Default output format [None]:
これらの質問に対しては、何も入力せずに Enter キーを押します。aws configure sso
を使用している場合、認証情報は自動的に取得されます。
次に、~/.aws/config
ファイルを編集し、プロファイルに SSO セッションを設定します。
ini
[profile dev]
sso_session = <SSOセッション名>
sso_account_id = <AWSアカウントID>
sso_role_name = <IAMロール名>
region = <リージョン名>
output = json
<SSOセッション名>
:aws configure sso
で設定した SSO セッションの名前です。<AWSアカウントID>
: アクセスする AWS アカウントの ID です。<IAMロール名>
: AWS SSO で割り当てられた IAM ロールの名前です。<リージョン名>
: AWS アカウントが配置されているリージョンです。
例えば、default
という SSO セッションを使用し、123456789012
という AWS アカウントの ReadOnlyAccess
ロールで us-west-2
リージョンにアクセスする場合は、以下のようになります。
ini
[profile dev]
sso_session = default
sso_account_id = 123456789012
sso_role_name = ReadOnlyAccess
region = us-west-2
output = json
2.5 動作確認
プロファイルの設定が完了したら、AWS CLI を使用して AWS リソースにアクセスできることを確認します。
bash
aws s3 ls --profile dev
dev
プロファイルを使用して S3 バケットの一覧を表示する例です。
もし認証情報が期限切れの場合は、以下のコマンドで認証情報を更新します。
bash
aws sso login --profile dev
3. トラブルシューティング
aws configure sso
の設定で問題が発生した場合、以下の点を確認してください。
- AWS CLI のバージョン: 最新版の AWS CLI を使用しているか確認してください。
- AWS SSO の設定: AWS マネジメントコンソールで AWS SSO が正しく設定されているか確認してください。
- AWS Organizations の設定: 複数の AWS アカウントを管理する場合は、AWS Organizations が正しく設定されているか確認してください。
~/.aws/config
ファイルと~/.aws/credentials
ファイル: これらのファイルが正しく設定されているか確認してください。特に、プロファイルのsso_session
、sso_account_id
、sso_role_name
が正しい値になっているか確認してください。- IAM ロールの権限: AWS SSO で割り当てられた IAM ロールに、必要な権限が付与されているか確認してください。
- ネットワーク: AWS SSO にアクセスできるネットワーク環境にあるか確認してください。
- キャッシュ: 認証情報がキャッシュされている場合は、キャッシュをクリアしてみてください。
3.1 よくあるエラーと解決策
-
“Unable to locate credentials” エラー:
aws configure sso
が正しく実行されていない可能性があります。再度実行し、認証を完了してください。~/.aws/config
ファイルのプロファイル設定が間違っている可能性があります。sso_session
、sso_account_id
、sso_role_name
が正しい値になっているか確認してください。- 認証情報が期限切れになっている可能性があります。
aws sso login --profile <プロファイル名>
を実行して、認証情報を更新してください。
-
“Access Denied” エラー:
- IAM ロールに、必要な権限が付与されていない可能性があります。AWS マネジメントコンソールで、IAM ロールの権限を確認してください。
- 異なるアカウントの IAM ロールにアクセスしようとしている可能性があります。
sso_account_id
が正しいアカウント ID になっているか確認してください。
-
“Invalid client” エラー:
aws configure sso
で設定されたクライアント ID とクライアントシークレットが間違っている可能性があります。aws configure sso
を再度実行し、正しいクライアント ID とクライアントシークレットを入力してください。通常はデフォルトで問題ありません。
3.2 デバッグ方法
-
--debug
オプション: AWS CLI コマンドに--debug
オプションを付けて実行すると、詳細なログが出力されます。これにより、問題の原因を特定しやすくなります。bash
aws s3 ls --profile dev --debug -
CloudTrail: CloudTrail を有効にすると、AWS アカウントで行われた API コールのログが記録されます。これにより、認証に関する問題を追跡できます。
4. より高度な設定
aws configure sso
を使用した基本的な設定に加えて、より高度な設定を行うことで、AWS SSO をさらに活用できます。
4.1 環境変数によるプロファイル指定
AWS_PROFILE 環境変数を使用することで、AWS CLI コマンドを実行する際に使用するプロファイルを指定できます。
bash
export AWS_PROFILE=dev
aws s3 ls
これにより、毎回 --profile
オプションを指定する必要がなくなります。
4.2 複数の SSO セッション
複数の SSO セッションを設定することで、異なる IdP や異なる AWS Organizations にアクセスできます。例えば、本番環境用の SSO セッションと開発環境用の SSO セッションを分けて設定することができます。
bash
aws configure sso --profile prod --sso-session prod-session --sso-start-url <本番環境SSOの開始URL> --sso-region <本番環境SSOのリージョン>
aws configure sso --profile dev --sso-session dev-session --sso-start-url <開発環境SSOの開始URL> --sso-region <開発環境SSOのリージョン>
4.3 シェルスクリプトや自動化ツールとの連携
aws configure sso
で設定したプロファイルは、シェルスクリプトや自動化ツールから利用できます。これにより、CI/CD パイプラインやインフラストラクチャの自動化を安全かつ効率的に行うことができます。
例えば、Terraform で AWS リソースをプロビジョニングする場合は、provider ブロックでプロファイルを指定します。
terraform
provider "aws" {
region = "us-west-2"
profile = "dev"
}
4.4 IdP との統合
AWS SSO は、AWS Directory Service (Active Directory または AWS Managed Microsoft AD)、Okta、Azure AD などの外部 IdP と連携できます。これにより、既存のユーザーディレクトリと統合し、ユーザー管理を簡素化できます。
4.5 Attribute-Based Access Control (ABAC)
ABAC は、ユーザーの属性に基づいて AWS リソースへのアクセスを制御する方法です。AWS SSO と IAM を組み合わせることで、ユーザーの部署、役職、プロジェクトなどの属性に基づいて、アクセス権限を柔軟に管理できます。
例えば、開発チームのメンバーには、開発環境の S3 バケットへのフルアクセス権限を付与し、運用チームのメンバーには、読み取り専用のアクセス権限を付与するといったことができます。
5. セキュリティ上の考慮事項
AWS SSO を使用する際には、以下のセキュリティ上の考慮事項に注意してください。
- IdP のセキュリティ: IdP のセキュリティを確保することが重要です。強力なパスワードポリシー、多要素認証、定期的なセキュリティ監査を実施してください。
- IAM ロールの権限: IAM ロールには、必要な最小限の権限のみを付与してください。過剰な権限を持つロールは、セキュリティリスクを高めます。
- 認証情報の保護: 一時的な AWS 認証情報は、安全に保護してください。認証情報を GitHub などのパブリックリポジトリにコミットしないでください。
- 監査: CloudTrail を有効にし、AWS アカウントで行われた API コールを監視してください。不正なアクティビティを早期に検知し、対応することができます。
- 定期的な見直し: AWS SSO の設定、IAM ロールの権限、IdP のセキュリティ設定を定期的に見直し、最新のベストプラクティスに従っていることを確認してください。
6. まとめ
aws configure sso
は、複数 AWS アカウントへのアクセスを効率化するための強力なツールです。本記事では、AWS SSO の基本的な概念から、aws configure sso
の具体的な使い方、トラブルシューティング、そしてより高度な設定まで幅広く解説しました。
AWS SSO を適切に設定することで、開発者の生産性を向上させ、セキュリティリスクを軽減し、AWS 環境の管理を簡素化できます。ぜひ本記事を参考に、aws configure sso
を活用して、より安全で効率的な AWS 環境を構築してください。
7. 今後の学習のために
- AWS Single Sign-On のドキュメント: 公式ドキュメントは、AWS SSO の詳細な情報と最新のアップデートを提供します。
- AWS CLI のドキュメント: AWS CLI のコマンドリファレンスは、各コマンドのオプションと使用例を提供します。
- AWS IAM のドキュメント: IAM のドキュメントは、IAM ロールとポリシーの設定について詳しく解説します。
- AWS Security Blog: AWS Security Blog は、AWS 環境のセキュリティに関する最新情報とベストプラクティスを提供します。
これらのリソースを活用することで、AWS SSO と AWS CLI の理解を深め、より安全で効率的な AWS 環境を構築することができます。