西山です。
ギークフィードでは社内で複数のAWS Organizationsを管理しており、それぞれのメンバーアカウントに対してCLIアクセスを楽に、かつセキュアに行いたいというニーズがあります。
今回は実際に社内で運用している方法として、AWS CLIを複数のAWS IAM Identity Centerに関連付ける方法(AWS CLIの認証にAWS IAM Identity Centerを利用する方法)について紹介します。
また、後半では社内運用を楽にするTipsを紹介します。
前提
- OS: macOS Ventura
- AWS CLI: aws-cli/2.13.14
AWS CLIの設定
まずは1つ目のSSO設定を行います。
1 2 3 4 5 |
$ aws configure sso SSO session name (Recommended): GeekFeedMainSSO SSO start URL [None]: https://my-sso-portal.awsapps.com/start(SSOのURLを指定) SSO region [None]: ap-northeast-1(IAM Identity Centerのインスタンスがあるリージョンを指定) SSO registration scopes [None]: sso:account:access |
上記コマンドでSSO設定を行います。SSO session nameは任意の名前を入力します。1つ目なのでMainとしました。
SSOセッションの設定が完了すると、自動的にアクセス可能なアカウントを選択するプロンプトが表示されます。こちらは後でまとめて設定するので適当なアカウントを指定して大丈夫です。
続いて2つめのSSO設定を行います。
1 2 3 4 5 |
$ aws configure sso SSO session name (Recommended): GeekFeedSubSSO SSO start URL [None]: https://my-sso-portal.awsapps.com/start(SSOのURLを指定) SSO region [None]: ap-northeast-1(IAM Identity Centerのインスタンスがあるリージョンを指定) SSO registration scopes [None]: sso:account:access |
SSO session nameとSSO start URLは1つ目とは異なるパラメーターを指定します。2つ目なのでSubとしています。
こちらもそのまま進めていけば1つ目と同様に設定可能です。
CLI configを見てみる
設定が完了したのでCLI configを見てみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# 1つ目のSSO用に属するアカウントの設定 [profile main-account] sso_session = GeekFeedMainSSO # ここでどのSSOセッションを利用するか指定している sso_account_id = XXXXXXXXXXXX sso_role_name = AdministratorAccess region = ap-northeast-1 output = json # 1つ目のSSO用のセッション設定 [sso-session GeekFeedMainSSO] sso_start_url = https://geekfeedmain.awsapps.com/start#/ sso_region = ap-northeast-1 sso_registration_scopes = sso:account:access # 2つ目のSSO用に属するアカウントの設定 [profile sub-account] sso_session = GeekFeedSubSSO # ここでどのSSOセッションを利用するか指定している sso_account_id = XXXXXXXXXXXX sso_role_name = AdministratorAccess region = ap-northeast-1 output = json # 2つ目のSSO用のセッション設定 [sso-session GeekFeedSubSSO] sso_start_url = https://geekfeedsub.awsapps.com/start#/ sso_region = ap-northeast-1 sso_registration_scopes = sso:account:access |
SSOのセッション用設定のセクションと個別のアカウント設定のセクションがあります。
アカウントの設定を見てみると、sso_sessionにおいてどのSSOセッションを利用して認証をするかを指定していることがわかります。
ここまでわかれば後は以下のテンプレートですべてのアカウントを追記していくだけです。
1 2 3 4 5 6 7 |
# 2つ目のSSO用に属するアカウントの設定 [profile 任意のプロファイル名] sso_session = 任意のSSOセッションを指定 sso_account_id = XXXXXXXXXXXX sso_role_name = AdministratorAccess region = ap-northeast-1 output = json |
aws configureコマンドを利用しなくてもconfigファイルに追記するだけでSSOでアクセス可能なアカウントに対してCLI実行することができます。
configを社内に配布する
AWS CLIの認証にIAM Identity Centerを利用することは、IAMユーザーが不要になり一時的なセキュリティトークンによってセキュアにアクセスできるというメリットが第一に挙げられますが、もう一つ、社内でAWS CLIのconfigファイルを全社員共通利用するものとして配布できるようになるという大きなメリットがあります。
先程みたconfigファイルには個人ごとに設定する必要のあるパラメーターはなく、各メンバーアカウントにアクセスできるかどうかはIdentity Center側で制御されるため、configを共通ファイルとして配布できます。
配布されたconfigファイルから環境設定を行う
configファイルが配布されたクライアントでは、AWS CLI v2がインストールされていることが前提になります。
configファイルを.awsフォルダ配下に配置し、以下のコマンドを実行します。
1 2 |
$ aws sso login --sso-session 1つ目のSSOセッション $ aws sso login --sso-session 2つ目のSSOセッション |
それぞれコマンドを実行すると、SSOセッション登録時と同様にブラウザが立ち上がりアクセス許可が求められるので、「Allow」をクリックします。
これだけで新規クライアントでも各メンバーアカウントやセッションの登録をせずにすぐにセキュアなAWS CLIを利用することができます!
configファイルをGitリポジトリで管理して更新があったら社内にSlackなどで通知する仕組みを用意するとさらに効率的になると思います。
参考資料
AWS IAM Identity Center (successor to AWS Single Sign-On) の自動認証更新によるトークンプロバイダーの設定
IAM Identity Center 名前付きプロファイルを使用する
- 組織内のIPv4アドレス(EIP)を自動通知してコスト削減する - 2024-12-03
- 組織内のAWSコスト最適化のためにやっている7つのこと - 2024-12-01
- Amazon Connect Contact Lens + iPaaSで生成AI活用&他サービス連携を簡単に実現!– Amazon Connect アドベントカレンダー 2024 - 2024-12-01
- AWS Step Functionsの基本を再学習しました - 2024-09-23
- Amazon SESでバウンスメールを管理する - 2024-07-07