AWS IAM Identity Center において一時的なアクセス許可を与える仕組みを提供する Temporary Elevated Access Management (TEAM) ソリューションを試してみた

2023.07.01

AWS IAM Identity Center で一時的なアクセス許可を与える仕組みを提供するソリューション Temporary Elevated Access Management (TEAM) aws-samples で公開されました。例えば、特定の AWS アカウントへの AdministratorAccess 権限のアクセスを利用者が申請し、上長が承認する、といった運用を実現できます。


AWS のブログでも TEAM の使い方が紹介されています。

本ブログでは TEAM ソリューションをデプロイし、AWS アカウントへの一時的なアクセスの申請と承認を試してみます。

TEAM の概要

TEAM は IAM Identity Center の AWS アクセスポータルからアクセスするアプリケーションとして構築され、TEAM のアプリケーション上で AWS アカウントへのアクセス申請や承認作業を実施します。承認に合わせて、自動的に IAM Identity Center 上で対象 AWS アカウントとアクセス許可セットを関連付けることで、申請者が AWS アカウントにアクセスできるようになります。

(引用元)TEAM アプリケーションのトップページ


簡単な利用例を示します。

利用者は TEAM アプリケーションにおいて AWS アカウントへの AdministratorAccess 権限のアクセスを申請します。

承認されると AWS アクセスポータルから AWS アカウントにアクセスできるようになります。

承認された時間が経過するとアクセスできなくなります。

デモ動画が次のページで公開されており、動画で見ると分かりやすいです。

About | TEAM


TEAM のアーキテクチャは次のドキュメントで紹介されており、主要なコンポーネントは下図となります。

Architecture | TEAM

TEAM のデプロイ

TEAM は IAM Identity Center の管理を委任されたアカウントにデプロイすることが推奨されているため、本ブログにおいても IAM Identity Center を委任したアカウントに対してデプロイしてみます。以降では、IAM Identity Center を委任して TEAM をデプロイするアカウントを「デプロイ先アカウント」と呼ぶこととします。

デプロイ前の準備

デプロイ前の準備作業は次のページに手順があります。AWS Organizations 環境へのアクセス権の設定は実施済みの環境のため、本ブログでは割愛します。

Prerequisites | TEAM


デプロイ先アカウントへの委任設定

ドキュメントによると、デプロイ先アカウントに次の 3 つのサービスの委任が必要です。

  • IAM Identity Center
  • CloudTrail Lake
  • Account management

委任は管理アカウントから次のコマンドで実行できます。

IAM Identity Center の委任コマンドです。

aws organizations register-delegated-administrator \
  --account-id 111122223333 \
  --service-principal sso.amazonaws.com

CloudTrail の委任コマンドです。

aws organizations register-delegated-administrator \
  --account-id 111122223333 \
  --service-principal cloudtrail.amazonaws.com

Account management の委任コマンドです。始めに信頼されたアクセスを有効にしています。

aws organizations enable-aws-service-access \
  --service-principal account.amazonaws.com

aws organizations register-delegated-administrator \
  --account-id 111122223333 \
  --service-principal account.amazonaws.com

委任状況は次のコマンドで確認できます。

aws organizations list-delegated-services-for-account \
  --account-id 111122223333 \
  --output text

委任状況の確認結果例です。

$ aws organizations list-delegated-services-for-account \
>   --account-id 111122223333 \
>   --output text
DELEGATEDSERVICES       2023-06-29T14:17:46.624000+00:00        account.amazonaws.com
DELEGATEDSERVICES       2023-06-25T15:11:09.553000+00:00        cloudtrail.amazonaws.com
DELEGATEDSERVICES       2023-06-25T14:56:02.172000+00:00        sso.amazonaws.com


TEAM で利用する IAM Identity Center グループ・ユーザーの作成

TEAM では最低限、IAM Identity Center において管理者向けと監査向けのグループの作成が必要です。グループ名は任意の名前でよいため、今回は検証用に次のグループとユーザーを作成します。利用者グループは今回のテスト用に用意しているグループです。

  • TEAM 管理者(今回は承認者も兼ねる)
    • グループ Test admins
    • ユーザー test-admin
    • メールアドレス test-admin@example.com
  • TEAM 監査
    • グループ Test auditors
    • ユーザー test-auditor
    • メールアドレス test-auditor@example.com
  • 利用者
    • グループ Test User
    • ユーザー test-user
    • メールアドレス test-user@example.com


Amazon SES のセットアップ

TEAM アプリケーションが申請や承認結果をメール通知するため、デプロイ先アカウントの Amazon SES において検証済みのドメインを用意します。SES に登録しているドメインを利用したメールアドレスからメール通知されます。

今回は検証目的のため SES をサンドボックスのまま利用し、次の検証済み ID を設定します(ブログ上では例示の値に置換しています)。サンドボックス環境では、送信先メールアドレスも検証済み ID として登録しておく必要があるため、IAM Identity Center ユーザーのメールアドレスも登録しています。

  • ドメイン example.net
  • E メールアドレス test-admin@example.com
  • E メールアドレス test-auditor@example.com
  • E メールアドレス test-user@example.com


デプロイ環境の準備

今回はローカル環境の PC からセットアップを実施してみます。

下記の環境でデプロイ作業をします。

  • AWS CLI v2 - 2.12.4
  • pip 23.1.2

git-remote-codecommitjqコマンドが必要となります。

git-remote-codecommitは次のページにインストール方法が記載されています。

Setup steps for HTTPS connections to AWS CodeCommit with git-remote-codecommit - AWS CodeCommit


git-remote-codecommitをインストールします。

% pip3 install git-remote-codecommit

jqはインストール済みであり、次のバージョンを利用しています。

% jq --version
jq-1.6


次に、デプロイ時には管理アカウントとデプロイ先アカウントへの権限を持つ AWS CLI の名前付きプロファイル名が必要となるため準備します。

今回は管理アカウントとデプロイ先アカウントのそれぞれで AdministratorAccess 権限を持つ IAM ユーザーを作成して、プロファイルを設定します。

% aws configure --profile management
AWS Access Key ID [None]: XXX
AWS Secret Access Key [None]: XXX
Default region name [None]: ap-northeast-1
Default output format [None]: json

% aws configure --profile iam
AWS Access Key ID [None]: XXX
AWS Secret Access Key [None]: XXX
Default region name [None]: ap-northeast-1
Default output format [None]: json

以上で、準備は終わります。


デプロイ

デプロイ手順は次のページに記載されています。

Deployment | TEAM


リポジトリをクローンします。

% git clone https://github.com/aws-samples/iam-identity-center-team.git

次に deployment ディレクトリに移動して設定ファイルparameters.shを作成します。

% cd iam-identity-center-team/deployment
% vi parameters.sh
EMAIL_SOURCE=noreply@example.net
IDC_LOGIN_URL=https://d-xxxxxxxxxx.awsapps.com/start
REGION=ap-northeast-1
TEAM_ACCOUNT=111122223333
ORG_MASTER_PROFILE=management
TEAM_ACCOUNT_PROFILE=iam
TEAM_ADMIN_GROUP="TEAM admins"
TEAM_AUDITOR_GROUP="TEAM auditors"

EMAIL_SOURCEは Amazon SES で設定しているドメインを用いたメールアドレスを指定します。

TEAM_ACCOUNTはデプロイ先アカウント(AWS IAM Identity Center の委任先アカウント)を指定します。

ORG_MASTER_PROFILETEAM_ACCOUNT_PROFILEは事前準備で作成した、管理アカウントとデプロイ先アカウントの AWS CLI のプロファイル名を指定します。

TEAM_ADMIN_GROUPTEAM_AUDITOR_GROUPは事前準備で作成した、IAM Identity Center 上の管理者向けのグループと監査向けのグループを指定します。


次に、deployment ディレクトリでinit.shを実行します。

% ./init.sh
111122223333 is already configured as delegated Admin for AWS Account Manager
111122223333 is already configured as delegated Admin for cloudtrail
111122223333 is already configured as delegated Admin for IAM IdC

管理アカウントからデプロイ先アカウントへの委任設定を実施してくれるスクリプトですが、事前準備で委任設定済みのため、出力内容は既に設定済みであることを示すメッセージとなっています。


最後に deployment ディレクトリでデプロイします。

% ./deploy.sh
(略)
Successfully created/updated stack - TEAM-IDC-APP


IAM Identity Center のアプリケーション設定(インテグレーション設定)

次は、TEAM Configuration 設定です。

IAM Identity Center の AWS アクセスポータルから TEMA アプリケーションにアクセスできるようにアプリケーションの割り当て設定をします。

アプリケーション設定から「アプリケーションを追加」をクリックします。

「カスタム SAML 2.0 アプリケーションの追加」を選択して進めます。

アプリケーション設定です。

「IAM Identity Center SAML メタデータファイル」は後で利用するので、メモしておきます。

「アプリケーションのデプロイ」と「アプリケーションメタデータ」に設定する値は、deployment ディレクトリのintegration.shで取得します。

% ./integration.sh

applicationStartURL: https://d121h8ygqbhre9-main.auth.ap-northeast-1.amazoncognito.com/authorize?client_id=75d0njkmr3eav34k93evmae6f7&response_type=code&scope=aws.cognito.signin.user.admin+email+openid+phone+profile&redirect_uri=https://main.d121h8ygqbhre9.amplifyapp.com/&idp_identifier=team
applicationACSURL: https://d121h8ygqbhre9-main.auth.ap-northeast-1.amazoncognito.com/saml2/idpresponse
applicationSAMLAudience: urn:amazon:cognito:sp:ap-northeast-1_dfGHMqv4Q


アプリケーション作成後に「属性マッピングを編集」を選択します。

次の属性マッピング設定を実施します。

Subject - ${user:subject} - persistent
Email - ${user:email} - basic

属性マッピングの次はアプリケーションにアクセスできるユーザーを割り当てます。

TEAM アプリケーションを利用するグループを選択します。

グループの割り当て設定後の画面です。

本設定を行うことで、AWS アクセスポータルで下図のように TEAM アプリケーション「TEAM IDC APP」が表示されるようになります(この時点では、まだ TEAM IDC APP にサインインすることはできません)。


Congnito ユーザープールの設定

TEAM IDC APP にサインインできるようにするために Congnito ユーザープールを更新します。

deployment ディレクトリで作業します。用意されているテンプレートをコピーして編集します。MetadataURLを IAM Identity Center のアプリケーション設定でメモした「IAM Identity Center SAML メタデータファイル」に置き換えます。

% cp details-template.json details.json
% vi details.json
{
    "MetadataURL": "https://portal.sso.ap-northeast-1.amazonaws.com/saml/metadata/MTMwOTA2OTc2NzM2X2lucy1hYzc4NjRhYmEyOexample"
}

Cognito の設定を実施するスクリプトを実行します。

% ./cognito.sh


ここまでの設定で TEAM IDC APP にサインインできるようになります。

管理者グループのユーザーで AWS アクセスポータル経由で TEAM IDC APP にアクセスするとトップページを確認できます。

TEAM の管理者設定

ここからは TEAM IDC APP の設定です

まずは、AWS アカウントへアクセスする資格を持つ利用者の定義とそれを承認する承認者の定義を設定します。

管理者グループのユーザーで「Administration」メニューから設定するのですが、「Administration」メニューが表示されていない場合は、一度ログアウトすると表示されます。ドキュメントにも一度ログアウトする必要があると記載があります。


利用者の資格ポリシー(Eligibility policy)の設定

利用者がどの AWS アカウントにアクセスできるかを指定する資格ポリシーを作成します。

Eligibility policy の設定ガイドは次のドキュメントです。

Administrator guide | TEAM


「Eligibility policy」から設定します。

承認があれば、「TEAM users」グループに対して Security OU の AWS アカウントに「Administer Access」権限でアクセスできる資格がある設定をします。チケット番号は適当な値としており、運用を考慮して決定する必要がありそうです。「Max duration」はアクセスを要求できる最大時間です。

設定後の画面です。


承認者ポリシー(Approval policy)の設定

指定した承認者が承認できる AWS アカウントを定義するポリシーを作成します。

Approval policy の設定ガイドは次のドキュメントです。

Administrator guide | TEAM


「Approver policy」から承認者ポリシーを作成します。

今回は、管理者グループ「TEAM admins」を Security OU の承認者として設定します。AWS アカウント単位の設定もできます。

設定後の画面です。


全般の設定

全体の設定項目もありますが、今回のデフォルトのまま進めたいと思います。

AWS アカウントへの一時的なアクセス申請

特定の AWS アカウントへの一時的なアクセスを申請し、承認する流れを試してみます。

利用者の申請

利用者が一時的な昇格された権限をアクセスする方法のガイドは次のドキュメントです。

Requestor guide | TEAM


アクセスを申請する「TEAM user」ユーザーで TEAM IDC APP にアクセスします。

「Create request」を選択します。

Account では資格ポリシー(Eligibility policy)で指定した Security OU 内に存在する 2 つのアカウントから利用申請するアカウントを選択できるようになっています。余談ですが、今回の環境は AWS Control Tower を利用しており、Security OU 内に Audit アカウントと Log Archive アカウントが存在しています。

今回は、Log Archive アカウントを選択して、AdministratorAccess 権限を指定時間から 1 時間利用する内容で Submit します。「Justification」には申請理由を記載します。

ちなみにですが、「Justification」を日本語で入力したところエラーとなりました。

Submit 後の画面です。申請内容を確認でき、ステータスが「pending」になっています。

なお、承認依頼はメールで通知されます。宛先は申請者と承認者です。送信元メールアドレスはデプロイ時にパラメータとして指定した「EMAIL_SOURCE」となります。


承認者の承認

承認者のガイドは次のドキュメントです。

Approver guide | TEAM


承認者として指定している「TEAM admin」ユーザーで TEAM IDC APP にアクセスします。

「Approve requests」で現在の申請内容を確認できます。

申請内容に対して、承認(Approve)か否認(Reject)かを選択します。今回は Approve を選択します。

「Commect」に理由を記載して Confirm を実行します。

承認後は「Approve requests」からはなくなり、「My approvals」で確認できるようになります。

承認結果はメールでも通知されます。宛先は申請者と承認者です。


承認後の AWS アカウントへのアクセス

承認後は、IAM Identity Center において、申請したアカウントに対してアクセス許可セットが割り当てられ、AWS アクセスポータルからアクセスできるようになります。

IAM Identity Center のアカウント画面においても、アクセス許可セットの割り当てを確認できます。

TEAM IDC APP では「Acitve access」で許可されているアクセスを確認できます。


許可された 1 時間が経過すると、申請した AWS アカウントにアクセスできなくなります。

IAM Identity Center のアカウント画面においても、アクセス許可セットの割り当てが解除されています。

TEAM IDC APP では「Ended access」で終了したアクセスを確認できます。

アクセス権の期限切れはメールでも通知されます。宛先は申請者と承認者です。

以上で、TEAM のデプロイと申請のお試しは終わりです。

さいごに

AWS IAM Identity Center において Just in time アクセスを提供するソリューションである「Temporary Elevated Access Management (TEAM) 」を試してみました。このソリューションを利用することで、AWS アカウントへのアクセスに対するレビューの仕組みを容易に実現できます。

待望のソリューションであり、今後のアップデートが楽しみです。

以上、このブログがどなたかのご参考になれば幸いです。