5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

IAM Identity Centerを使って複数アカウント管理する。(その2:CLIでのアクセスと管理の委任)

Last updated at Posted at 2023-04-09

はじめに

前回はIAM Identity Centerの基本設定とAWSマネジメントコンソールへのログインまで行ったので、今回はCLIでのアクセス方法とIAM Identity Center管理の委任についてまとめてみようと思います。

以下目次

CLIアクセスについて

IAM Identity Centerで作成したユーザのCLIアクセスは、期限付きのセッショントークンによる認証方式となります。

CLIアクセスに必要となる情報はIAM Identity Centerにログインした際に表示される、「Command line or programmatic access」を選択すると表示されるため、ユーザごとにクレデンシャル情報を作成して配布したり、クレデンシャル情報の定期的な変更を促す必要がありません。

Monosnap_20230315_143827.png

各アカウント、各許可セットの「Command line or programmatic access」を選択すると、コピーして使用できる以下のような情報が表示されるため、コンソールに貼り付けたり、~/.aws/credentialsに書き込んでprofile指定してコマンド実行することで、選択したアカウント、権限でコマンドを実行することができます。

Monosnap_20230315_144130.png

セッショントークンの保持時間は許可セットの「セッション期間」から設定を行うことができ、デフォルトで最短となる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」を選択します。

Monosnap_20230315_163758.png

インターネットブラウザが開けない場合は、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

Monosnap_20230315_163849.png

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に以下のような設定情報が作成されます。

~/.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コマンドで複数プロファイルを作成する場合と同じように以下のコマンドを実行することで作成出来ます。

CLIプロファイルの追加
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を書き換えるよりも簡単に切り替えることが出来ます。

作業用CLIプロファイル指定
aws configure sso --profile [作業用CLIプロファイル名]

また、プロンプトが閉じられていなければ2回目以降、--profileを指定しなくても良いので、aws configure ssoのみでOKです。

セッショントークンの期限が切れた際のアクセス方法

セッショントークンの期間満了となった場合、aws sso login --profile [プロファイル名]を実行することで、初期設定と同じようにインターネットブラウザが開き、IAM Identity Centerの認証を行うことでトークン情報が自動的に更新され、新しいトークンでアクセスすることができます。

aws sso loginコマンドによるサインイン
aws sso login --profile [プロファイル名]

また、セッショントークンの期間満了を待たずに明示的にログアウトしたい場合は以下のコマンドを実行することでログアウトされ、クライアント側にキャッシュされているトークン情報も削除されます。

aws sso logoutコマンドによるサインアウト
aws sso logout

IAM Identity Centerの管理の委任

IAM Identity Centerはデフォルトではルートアカウントで管理されています。

そのままルートアカウントで使用しても良いですが、AWSのベストプラクティスではルートアカウントで管理するサービス、タスクは、ルートアカウントでないと実行できないものに限定するほうが良いと記載されているため、ルートアカウントで実行するサービスは必要最低限とするのが良いでしょう。

IAM Identity Centerの管理もルートアカウントから他のメンバーアカウントに管理を委任することができるので、設定してみたいと思います。

委任の設定

委任の設定自体は非常に簡単で、「IAM Identity Center」の「設定」→「管理」タブの「アカウントを登録」から行います。

Monosnap_20230315_153156.png

委任するメンバーアカウント選択画面が表示されるため、委任するメンバーアカウントを選択して、「アカウントを登録」を実行することでIAM Identity Centerの管理を委任することができます。

Monosnap_20230315_153423.png

上記画面の注意書きにも記載されている通り、ルートアカウントに対する許可セットの管理やIAM Identity Center自体の削除などは、今まで通りルートアカウントで行う必要がありますが、委任することでルートアカウントからIAM Identity Centerの管理を分離することができます。

おわりに

今回はCLIでのアクセス方法とIAM Identity Center管理の委任方法についてまとめました。

セッショントークンの期間満了ごとに再認証を行う手間はありますが、IAM Identity Centerを使うことでユーザに永続的なアクセスキーを配布すること無くユーザアクセスできるというのはシステム管理者にとってメリットの大きいものかと思います。

IAM Identity Centerの委任についても、委任することで各アカウントごとの役割が明確になることから、アカウント数が多いシステムの場合はユーザ管理用として1つアカウントを用意してしまうのも良いかと思います。

次回は自組織とは異なる外部AWSアカウントに対してIAM Identity CenterからSAMLアクセスを行う方法について試してみようと思います。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?