はじめに
前回はIAM Identity Center
の基本設定とAWSマネジメントコンソールへのログインまで行ったので、今回はCLIでのアクセス方法とIAM Identity Center
管理の委任についてまとめてみようと思います。
- 【前】IAM Identity Centerを使って複数アカウント管理する。(その1:IAM Identity Centerでのログイン)
- 【次】IAM Identity Centerを使って複数アカウント管理する。(その3:外部AWSアカウントへのSAML)
以下目次
CLIアクセスについて
IAM Identity Center
で作成したユーザのCLIアクセスは、期限付きのセッショントークンによる認証方式となります。
CLIアクセスに必要となる情報はIAM Identity Center
にログインした際に表示される、「Command line or programmatic access」を選択すると表示されるため、ユーザごとにクレデンシャル情報を作成して配布したり、クレデンシャル情報の定期的な変更を促す必要がありません。
各アカウント、各許可セットの「Command line or programmatic access」を選択すると、コピーして使用できる以下のような情報が表示されるため、コンソールに貼り付けたり、~/.aws/credentials
に書き込んでprofile指定してコマンド実行することで、選択したアカウント、権限でコマンドを実行することができます。
セッショントークンの保持時間は許可セットの「セッション期間」から設定を行うことができ、デフォルトで最短となる1時間、最長で12時間まで伸ばすことができます。
保持期間が満了した場合はコマンドが失敗するため、再度ポータル画面にアクセスし、トークン情報をコピーすることでアクセスできるようになります。
ただ、毎回ポータル画面にアクセスしてトークン情報をコピーして使うというのは、アクセスキー&シークレットアクセスキーでのアクセスと比べると手間であることから、結局IAMユーザによる管理に戻ってしまう可能性もありますが、セッショントークンを使用したCLIアクセスを行う場合に、なるべくユーザビリティを落とさない方法も用意されているため、以下で紹介していきます。
前提条件
AWS CLIでIAM Identity Center
を使うためにはAWS CLI v2
である必要があります。
AWS CLI v2
ではない場合は以下より更新しておきましょう。
aws configure ssoによるトークンの更新
上述したポータル画面からトークン情報をコピペする方法もありますが、以下AWSのユーザガイドにはaws configure sso
コマンドを使用した2種類の方法が紹介されております。
紹介されている以下2種類のうち、1つはトークン満了時に手動で更新する方法、もう1つは推奨構成となるトークン満了時に自動で更新する方法となります。
今回は推奨構成となる自動更新を行う方法を紹介します。
SSOトークンプロバイダ構成
SSOトークンプロバイダ構成の設定を行うため、aws configure sso
コマンドで設定していきます。
aws configure sso
実行すると、以下のような入力項目が表示されるため、それぞれ入力します。
AWS CLI v2
を使用していても、バージョンが古いとSSO session name
が表示されなかったりするようです。
表示されない場合は最新版のAWS CLI v2
に更新してください。
SSO session name (Recommended): [任意のセッション名]
SSO start URL [None]: [SSOスタートURL]
SSO region [None]: [リージョン]
SSO registration scopes [None]: sso:account:access
ちなみに私は今回以下のような設定を行いました。
項目 | 設定 | 備考 |
---|---|---|
SSO session name | AdministratorAccessCLI | |
SSO start URL | https://x-xxxxxxxxxx.awsapps.com/start# | ポータル画面からコピーしたURL |
SSO region | ap-northeast-1 | |
SSO registration scopes | sso:account:access | ユーザガイドの通り固定値で入力 |
入力完了後、AWS CLIからインターネットブラウザが開けるようであれば以下のような画面が開くため、「Allow」を選択します。
インターネットブラウザが開けない場合は、AWS CLIのコマンド結果で表示されている以下のURLにアクセスし、記載されているコードを入力することで関連付けます。
Attempting to automatically open the SSO authorization page in your default browser.
If the browser does not open or you wish to use a different device to authorize this request, open the following URL:
https://device.sso.ap-northeast-1.amazonaws.com/
Then enter the code:
XXXX-XXXX
AWS CLIに戻ると関連付けられているアカウントが対話式で選択できるようになるため、上下ボタンでアクセスしたいアカウントを選択してEnterを押します。
There are 2 AWS accounts available to you.
> RootAccount, root@example.com (xxxxxxxxxxxx)
MemberAccount, member@example.com (yyyyyyyyyyyy)
続いて関連付けられている許可セットの選択を行います。
There are 2 roles available to you.
ReadOnlyAccess
> AdministratorAccess
デフォルトリージョン、アウトプットフォーマット、任意のプロファイル名の指定を行い実行。
CLI default client Region [ap-northeast-1]: ap-northeast-1
CLI default output format [yaml]: json
CLI profile name [AdministratorAccess-xxxxxxxxxxxx]: RootAdministratorAccess
aws configure sso
コマンドの設定完了後、~/.aws/config
に以下のような設定情報が作成されます。
[profile RootAdministratorAccess]
sso_session = AdministratorAccessCLI
sso_account_id = [SSOアカウントID]
sso_role_name = AdministratorAccess
region = ap-northeast-1
output = json
[sso-session AdministratorAccessCLI]
sso_start_url = https://x-xxxxxxxxxx.awsapps.com/start#
sso_region = ap-northeast-1
sso_registration_scopes = sso:account:access
上記設定後に表示される実行例のように、--profile [CLIプロファイル名]
を指定することで、指定したプロファイルの権限でコマンドを実行できます。
To use this profile, specify the profile name using --profile, as shown:
aws s3 ls --profile RootAdministratorAccess
他のアカウント用プロファイルへの切り替え方法
CLIプロファイルの切替方法は従来のやり方と同様、--profile
を指定して接続先アカウントのプロファイルを切り替えます。
IAM Identity Center
で複数プロファイルを作成する場合もaws configure
コマンドで複数プロファイルを作成する場合と同じように以下のコマンドを実行することで作成出来ます。
aws configure sso --profile [CLIプロファイル名]
コマンドの後ろに--profile
を追加することで使用するプロファイルを簡単に切り替えられ、もちろん環境変数AWS_PROFILE
にCLIプロファイル名を指定することで、--profile
無しでコマンド実行することも出来ます。
実運用時のプロファイル構成例
いちいち--profile
でアカウントを切り替えたり、export AWS_PROFILE
でプロファイルを指定するのが面倒だという場合、作業用のプロファイルを準備しておくことで運用時の作業を少し効率的に行うことができるので紹介しておこうと思います。
上述したコマンドでのプロファイル登録は、以下のように1対1でCLIプロファイルとAWSアカウントが結びつき、--profile
や環境変数でプロファイルを切り替えることで接続先アカウントを切り替えることが出来ます。
今回紹介する方法は、CLIプロファイルは1つで、コマンドにより接続アカウントを切り替える方法となります。
手間としてはexport AWS_PROFILE
で使用プロファイルを直接指定して、コマンド実行時に--profile
を指定せずに実行する方法とあまり変わりませんが、こちらはプロンプトを開いて1回目の操作以外は矢印キーとエンターだけでプロファイルを切り替えられるため、複数のアカウントで操作する運用者の方には便利かと思います。
やり方としては先程設定したプロファイルとは別に作業用のプロファイルを準備しておき、切り替えたいときにaws configure sso
コマンドで接続アカウントを書き換えることで切り替えます。
aws configure sso
コマンドは実行後プロンプトが閉じられるか、環境変数でAWS_PROFILE
の値を指定するまではaws configure sso
で指定したCLIプロファイルが使われるため、予め作業用CLIプロファイルを作成しておいた上で以下実行すると、プロファイル作成時に設定した内容はエンターで飛ばすことができ、接続先アカウントだけ矢印キーで選択することで切り替えられるため、環境変数AWS_PROFILE
を書き換えるよりも簡単に切り替えることが出来ます。
aws configure sso --profile [作業用CLIプロファイル名]
また、プロンプトが閉じられていなければ2回目以降、--profile
を指定しなくても良いので、aws configure sso
のみでOKです。
セッショントークンの期限が切れた際のアクセス方法
セッショントークンの期間満了となった場合、aws sso login --profile [プロファイル名]
を実行することで、初期設定と同じようにインターネットブラウザが開き、IAM Identity Center
の認証を行うことでトークン情報が自動的に更新され、新しいトークンでアクセスすることができます。
aws sso login --profile [プロファイル名]
また、セッショントークンの期間満了を待たずに明示的にログアウトしたい場合は以下のコマンドを実行することでログアウトされ、クライアント側にキャッシュされているトークン情報も削除されます。
aws sso logout
IAM Identity Centerの管理の委任
IAM Identity Center
はデフォルトではルートアカウントで管理されています。
そのままルートアカウントで使用しても良いですが、AWSのベストプラクティスではルートアカウントで管理するサービス、タスクは、ルートアカウントでないと実行できないものに限定するほうが良いと記載されているため、ルートアカウントで実行するサービスは必要最低限とするのが良いでしょう。
IAM Identity Center
の管理もルートアカウントから他のメンバーアカウントに管理を委任することができるので、設定してみたいと思います。
委任の設定
委任の設定自体は非常に簡単で、「IAM Identity Center」の「設定」→「管理」タブの「アカウントを登録」から行います。
委任するメンバーアカウント選択画面が表示されるため、委任するメンバーアカウントを選択して、「アカウントを登録」を実行することでIAM Identity Center
の管理を委任することができます。
上記画面の注意書きにも記載されている通り、ルートアカウントに対する許可セットの管理やIAM Identity Center
自体の削除などは、今まで通りルートアカウントで行う必要がありますが、委任することでルートアカウントからIAM Identity Center
の管理を分離することができます。
おわりに
今回はCLIでのアクセス方法とIAM Identity Center
管理の委任方法についてまとめました。
セッショントークンの期間満了ごとに再認証を行う手間はありますが、IAM Identity Center
を使うことでユーザに永続的なアクセスキーを配布すること無くユーザアクセスできるというのはシステム管理者にとってメリットの大きいものかと思います。
IAM Identity Center
の委任についても、委任することで各アカウントごとの役割が明確になることから、アカウント数が多いシステムの場合はユーザ管理用として1つアカウントを用意してしまうのも良いかと思います。
次回は自組織とは異なる外部AWSアカウントに対してIAM Identity Center
からSAMLアクセスを行う方法について試してみようと思います。