本ページは、AWS に関する個人の勉強および勉強会で使用することを目的に、AWS ドキュメントなどを参照し作成しておりますが、記載の誤り等が含まれる場合がございます。

最新の情報については、AWS 公式ドキュメントをご参照ください。

TEAM

Temporary elevated access management (TEAM) for AWS IAM Identity Center とは、AWS が提供するオープンソースソリューションで、ユーザーに一時的な管理者権限を付与するための仕組みです。

TEAM architecture

** 画像は TEAM の GitHub より引用

1.1. 公式ドキュメント

TEAMを理解する公式ドキュメントは次のとおりです。

Temporary elevated access management (TEAM)

GitHub

AWS Security Blog on 08 JUN 2023

builders.flash on 2025-05-01 | AWS Community Hero: 山口 正徳氏)

1.2. 導入のメリット

TEAMを導入する主なメリットは以下の5つです。

1.3. 主なユースケース

TEAMは以下の主要な機能を提供します。

2.1. 権限申請機能

利用者(申請者)は、Webベースのアプリケーションから一時的な管理者権限を申請できます。

image09

申請時に指定可能な項目は次のようなものがあります。

申請後、設定された承認ポリシーに従って承認者に通知が送信されます。

2.2. 承認ワークフロー

承認者は申請内容を確認し、承認または拒否を判断します。

承認ワークフローの特徴は次のとおりです。

2.3. 一時権限の自動付与・削除

承認された申請は、指定された開始時刻に自動的にIAM Identity Centerで権限が付与されます。

TEAMはサーバーレスアーキテクチャで構築されており、以下のAWSサービスが連携して一時権限のライフサイクルを自動管理します。

  1. 申請データの保存
    • 承認された申請情報(開始時刻、終了時刻、対象アカウント、権限など)はAmazon DynamoDBに保存されます
  2. 権限の自動付与と削除
    • AWS Step Functionsが権限のライフサイクル全体を管理します。
    • Grant State Machineが起動し、IAM Identity Center APIを呼び出してアカウントアサインメント(Account Assignment)を作成します
    • ユーザーはAWSアクセスポータルにログインすると、付与された権限で対象アカウントにアクセスできるようになります
  3. 時限制御による自動削除
    • Step FunctionsのWaitステートが、指定された期間(duration)分の待機を実行します
      • 例: 8時間の申請なら28,800秒間待機
      • 待機中は課金が発生せず、効率的に期限を管理
    • 待機期間が終了すると、自動的にRevoke State Machineが起動します
    • IAM Identity Center APIを呼び出し、該当するアサインメントを削除します
    • これにより、アクセス期間が終了すると自動的に権限が取り消されます
  4. ワークフローの調整
    • AWS Step Functionsが申請から承認、通知、権限付与までの一連のワークフローを統合的に管理します
    • Amazon API Gateway + Lambdaがフロントエンド(Amplifyアプリ)からのリクエストを処理します
  5. 監査ログの記録
    • すべての権限付与・削除操作はAWS CloudTrailに記録され、監査証跡として保持されます
    • CloudTrail Lakeと統合することで、一時権限を使用したユーザーの操作履歴も追跡可能です

この自動化により、手動での権限管理が不要になり、人的ミス(権限の付けっぱなしなど)を防止できます。

2.4. 通知機能

申請や承認のステータス変化を、複数のチャネルで通知できます。

サポートされる通知方法は次のとおりです。

通知は申請者、承認者の両方に送信され、承認待ちや承認完了などのステータスをタイムリーに把握できます。

2.5. 監査とコンプライアンス

すべてのアクセス履歴と操作ログが記録され、監査に対応できます。

監査機能は次のとおりです。

2.6. ポリシー管理

管理者は柔軟にポリシーを設定し、組織のセキュリティ要件に合わせた運用が可能です。

これらのポリシーにより、例えば「開発環境は承認不要で最大8時間」「本番環境は承認必須で最大4時間」といった柔軟な設定が可能です。

TEAMを効果的に運用するためのベストプラクティスと注意点を解説します。

3.1. コスト管理

TEAMアプリケーションの運用にかかる主なコストは以下の通りです。

主なコスト要素:

コスト最適化のポイント:

💡 一般的な中小規模の組織(ユーザー数50名程度、月間申請数100件程度)であれば、月額コストは数十ドル程度。

3.2. モニタリング

TEAMアプリケーションの健全性と利用状況を継続的に監視することが重要です。

  1. アプリケーションの可用性
  1. 利用状況の把握
  1. セキュリティイベントの監視

推奨する監視方法

3.3. セキュリティ

TEAMを安全に運用するためのセキュリティベストプラクティスです。

1. 最小権限の原則

2. 承認プロセスの設計

3. 監査とレビュー

4. 設定の定期的な見直し

5. バックアップと災害対策

6. 通信のセキュリティ

💡 セキュリティインシデントが発生した場合は、TEAMアプリケーションの監査ログとCloudTrail Lakeを活用し、影響範囲を迅速に特定できます。

TEAMアプリケーションをTEAM管理用のAWSアカウントへデプロイするまでを解説します。

デプロイの流れ

本ガイドで説明するデプロイの主な流れは以下の通りです。

  1. デプロイ前準備
    1. IAM Identity Centerの管理アカウントからTEAM管理アカウントへ管理の委任を行う
    2. TEAMのGitリポジトリをCloneし、リポジトリにアクセスするためのpersonal access token (classic)を発行する
    3. TEAMで使用するIAM Identity Centerのグループを作成する
  2. デプロイ実施
    1. デプロイ用のシェルを実行し、デプロイを行う
  3. (Nextアクション ※本ガイド対象外)「02. Administrator Guide」に従い、設定を行う

デプロイ前準備

ステップ1: AWS IAM Identity Centerの管理アカウントからTEAM管理アカウントへの権限委任

see: TEAM Deployment guide

**IAM Identity Centerの管理アカウントから、**以下の委任を実行します。

CloudShellや、ローカルからコマンドで実行が可能です。 ローカルから実行する場合は、コマンドの最後に、--profile xxxxx として管理アカウントのプロファイル名を指定します。

aws organizations register-delegated-administrator \
  --account-id 111122223333 \
  --service-principal sso.amazonaws.com
# 無効化する場合
aws organizations deregister-delegated-administrator \
  --account-id 111122223333 \
  --service-principal sso.amazonaws.com
aws organizations register-delegated-administrator \
  --account-id 111122223333 \
  --service-principal cloudtrail.amazonaws.com
# 無効化する場合
aws organizations deregister-delegated-administrator \
  --account-id 111122223333 \
  --service-principal cloudtrail.amazonaws.com
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 deregister-delegated-administrator \
  --account-id 111122223333 \
  --service-principal account.amazonaws.com

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

委任状況は以下のコマンドで確認します。

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

ステップ2:personal access token (classic) の作成とAWS Secrets Managerへの登録

see: TEAM Deployment guide

このTEAMアプリケーションをデプロイするフローの中で、GitHubリポジトリのソースを取得する必要があります。そのためのアクセストークンを発行します。

発行手順は、GitHub Docsのここを参照してください。

権限は以下のように、[repo]をすべて指定します。

WS000930.jpg

⚠️ 現状は、personal access token (classic)しか対応していません。そのため、アクセストークンは個人ユーザー管理になっています。(下記Issue参照)

Why classic GitHub tokens are required? https://github.com/aws-samples/iam-identity-center-team/issues/401

発行したアクセストークンをTEAM管理アカウントのシークレットマネージャーに登録します。

# 新規作成
SECRET_NAME="TEAM-IDC-APP"
aws secretsmanager create-secret \
    --name "$SECRET_NAME" \
    --description "GitHub repository credentials for TEAM application" \
    --secret-string '{"url": "https://github.com/your-repository-name/iam-identity-center-team.git", "AccessToken": "xxxxxxx"}' \
    --tags Key=Project,Value=YOUR_PROJECT_NAME Key=Env,Value="YOUR_ENV" \
    --region "ap-northeast-1"
# 更新する場合
aws secretsmanager update-secret \
    --secret-id "$SECRET_NAME" \
    --description "GitHub repository credentials for TEAM application" \
    --secret-string '{"url": "https://github.com/your-repository-name/iam-identity-center-team.git","AccessToken": "xxxxxxx"}' \
    --tags Key=Project,Value=YOUR_PROJECT_NAME Key=Env,Value="YOUR_ENV" \
    --region "ap-northeast-1"

ステップ3:TEAMで利用する IAM Identity Center グループの作成

TEAM管理アカウントのCloudShellまたは、プロファイル名を指定してローカルからAWS CLIにて実行します。

STORE_ID=$(aws sso-admin list-instances --query "Instances[0].IdentityStoreId" --output text --no-paginate)

aws identitystore create-group --output yaml \\
  --identity-store-id "${STORE_ID}" \\
  --display-name "TEAM-Users" \\
  --description "TEAM アプリケーションで一時的なアクセス権限をリクエストするユーザーグループ(開発者やオペレーターなど)"

aws identitystore create-group --output yaml \\
  --identity-store-id "${STORE_ID}" \\
  --display-name "TEAM-Approvers-Production" \\
  --description "TEAM アプリケーションで本番アカウントへのリクエストをレビュー・承認 / 拒否する権限を持つユーザーグループ。ただし、自身のリクエストは自身では承認できません"

aws identitystore create-group --output yaml \\
  --identity-store-id "${STORE_ID}" \\
  --display-name "TEAM-Approvers-NonProduction" \\
  --description "TEAM アプリケーションで本番アカウント以外へのリクエストをレビュー・承認 / 拒否する権限を持つユーザーグループ。ただし、自身のリクエストは自身では承認できません"

aws identitystore create-group --output yaml \\
  --identity-store-id "${STORE_ID}" \\
  --display-name "TEAM-Admins" \\
  --description "TEAM アプリケーションの設定管理・ユーザー管理・グループ設定などを行うユーザーグループ"

aws identitystore create-group --output yaml \\
  --identity-store-id "${STORE_ID}" \\
  --display-name "TEAM-Auditors" \\
  --description "TEAMアプリケーションのリクエスト履歴やアクセスログの確認・レビューを行うユーザーグループ (読み取り専用)"

作成したグループは以下のコマンドで確認できます。

aws identitystore list-groups --output table \\
  --identity-store-id "${STORE_ID}" \\
  --query "Groups[?starts_with(DisplayName, 'TEAM')].[DisplayName,GroupId,Description]"

以下のように表示されます

#-------------------------------------------------------------------------------------------------
#|ListGroups                          |
#+------------------------------+---------------------------------------+------------------------+
#|  TEAM-Approvers-Production   |  0744ba98-8031-70a4-061a-ada3cf44ca14 |  xxxxx       |||
#|  TEAM-Auditors               |  37549a08-5081-702d-0063-15540c1d1abe |  xxxxx       ||
#|  TEAM-Users                  |  4754aa28-9041-7094-5ccc-3f27cacb7e2e |  xxxxx       |||
#|  TEAM-Admins                 |  6774ea58-2061-7071-b591-8b4d3fd32f0a |  xxxxx       ||
#|  TEAM-Approvers-NonProduction|  f7e44ab8-6091-704c-4461-e6f241837f74 |  xxxxx       |||
#+------------------------------+---------------------------------------+-----------------------+

ステップ4:CloudTrail Lake EventDataStoreの作成

TEAM管理アカウントのCloudShellまたは、プロファイル名を指定してローカルからAWS CLIにて実行します。

EDS_NAME="TEAM-audit-logs"

aws cloudtrail create-event-data-store \
    --name "$EDS_NAME" \
    --multi-region-enabled \
    --organization-enabled \
    --retention-period 365 \
    --no-termination-protection-enabled \
    --tags-list Key=Project,Value=YOUR_PROJECT_NAME Key=Env,Value=YOUR_ENV \
    --region "ap-northeast-1"

削除するときは以下のコマンドを使用します。

aws cloudtrail delete-event-data-store \
    --event-data-store "$EDS_NAME" \
    --region "ap-northeast-1"

デプロイ

ステップ1:GitHubリポジトリのクローン

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

ステップ2:デプロイ用パラメータの作成

すでにデプロイ用パラメータが作成済みの場合は本手順をスキップします。

cd deployment
cp -n parameters-dev.sh parameters_YOUR_ENV.sh

コピーしたデプロイ用パラメータファイルを修正します。

ステップ3:デプロイ実行

作成したデプロイ用パラメータファイルを使用してデプロイを実行します。

PARAMETERS_FILE=./parameters_YOUR_ENV.sh ./deploy_custom.sh

WS000938.jpg

このデプロイを実行すると、下記2つのCloudFormationスタックが作成されます。「amplify-teamidcapp-main」スタックは「TEAM-IDC-APP」作成後、5分程度時間が経ってから作成されます。また、複数のスタックをネストしており、すべてのスタックが完了するまで15分くらいかかります。

ステップ4:IAM Identity Center SAML Integrationの設定

see: TEAM Deployment guide

ステップ3ですべてのスタックが「CREATE_COMPLETE」になっていることを確認してから実行します。

WS000982.jpg

以下のコマンドを実行します。

PARAMETERS_FILE=./parameters_YOUR_ENV.sh ./integration_custom.sh

WS000936.jpg

実行すると、以下のURLが払い出されます。この値は次の手順で使用しますので、メモしておきます。

applicationStartURL: https://xxxxxx-main.auth.amazoncognito.com/authorize?client_id=xxxxxx&response_type=code&scope=aws.cognito.signin.user.admin+email+openid+phone+profile&redirect_uri=https://main.d1s8z5724fsfj7-.amplifyapp.com/&idp_identifier=team
applicationACSURL: https://xxxxxx-main.auth.amazoncognito.com/saml2/idpresponse
applicationSAMLAudience: urn:amazon:cognito:sp:us-east-1_xxxxxx

TEAM管理アカウントのAWSマネジメントコンソールから、[AWS IAM Identity Center console > Application assignment > Applications > Add application] を開きます。

ステップ5:Amazon Cognitoの設定

see: TEAM Deployment guide

以下のコマンドでコピーしたJSONファイルを開き、MetadataURLIAM Identity Center SAML メタデータファイルのURLを記載します。 すでにファイルが存在する場合は、そのまま編集してください。

cd deployment
cp -n details_dev.json details_YOUR_ENV.json

JSONファイルは以下のようになっています。

{
    "MetadataURL": "https://portal.sso.ap-northeast-1.amazonaws.com/saml/metadata/xxxxxxxxxxxxxxxx"
}

以下のコマンドで設定を実行します。

PARAMETERS_FILE=./parameters_YOUR_ENV.sh ./cognito_custom.sh

画面出力が複数行でますので、コンソール画面ではqを押して表示を終了させます。

WS000937.jpg

ステップ6:Amazon SESの設定

see: TEAM Deployment guide

see: https://aws-samples.github.io/iam-identity-center-team/docs/deployment/configuration/notifications.html#email-notification-via-amazon-ses

TEAM管理アカウントのAWSマネジメントコンソールから、[Amazon SES > 設定: ID]を開きます。

「02. Administrator Guide」に従い、設定を行います。

TEAMアプリケーションをアンインストールする手順です。destroy_custom.sh を実行することでデプロイ時に作成したスタックが削除されます。

ただし、Amplify デプロイメントの S3 バケットが削除されないため、手動での削除が必要です。s3バケット名の形式はamplify-teamidcapp-main-xxxx-deploymentです。

see: TEAM Deployment guide

ステップ1:アンインストール

カレントディレクトリがdeployment ではない場合は移動します。

cd deployment

以下のコマンドでアンインストールを実行します。

PARAMETERS_FILE=./parameters_YOUR_ENV.sh ./destroy_custom.sh

deployimage02

deployimage03

AWSマネジメントコンソールで、[CloudFormation]にアクセスすると、「DELETE_IN_PROGRESS」となり、削除が実施されます。

deployimage04

⚠️アンインストール前に、権限委任の解除が実施されていると「CloudTrail Lake EventDataStore」の削除が権限不足で失敗し、スタックの削除にも失敗します。この場合、リソースは残したうえでスタックの強制削除を行ってください。残ってしまった「CloudTrail Lake EventDataStore」は、IAM Identity Centerの管理アカウント上から手動で削除します。

ステップ2:S3バケットの削除

S3バケットを削除します。

deployimage05

TEAM管理アカウントのCloudShell上に貼り付けて実行します。

aws s3api list-buckets \
  --query "Buckets[?starts_with(Name, 'amplify-teamidcapp-main-')].Name" \
  --output text | \
tr '\t' '\n' | \
while read -r BUCKET_NAME; do
  echo "バケットを削除中: ${BUCKET_NAME}"
  # 1. 通常のオブジェクトを削除
  echo "  - オブジェクトを削除中..."
  aws s3 rm "s3://${BUCKET_NAME}" --recursive > /dev/null 2>&1
  
  # 2. すべてのバージョンと削除マーカーを削除
  echo "  - すべてのバージョンを削除中..."
  aws s3api list-object-versions \
    --bucket "${BUCKET_NAME}" \
    --output json \
    --query '{Objects: Versions[].{Key:Key,VersionId:VersionId}}' 2>/dev/null | \
  jq -c 'if .Objects then . else empty end' | \
  while read -r DELETE_JSON; do
    if [ "$DELETE_JSON" != "" ] && [ "$DELETE_JSON" != '{"Objects":null}' ]; then
      aws s3api delete-objects \
        --bucket "${BUCKET_NAME}" \
        --delete "$DELETE_JSON" > /dev/null
    fi
  done
  
  # 3. 削除マーカーを削除
  echo "  - 削除マーカーを削除中..."
  aws s3api list-object-versions \
    --bucket "${BUCKET_NAME}" \
    --output json \
    --query '{Objects: DeleteMarkers[].{Key:Key,VersionId:VersionId}}' 2>/dev/null | \
  jq -c 'if .Objects then . else empty end' | \
  while read -r DELETE_JSON; do
    if [ "$DELETE_JSON" != "" ] && [ "$DELETE_JSON" != '{"Objects":null}' ]; then
      aws s3api delete-objects \
        --bucket "${BUCKET_NAME}" \
        --delete "$DELETE_JSON" > /dev/null
    fi
  done
  
  # 4. バケット自体を削除
  echo "  - バケットを削除中..."
  aws s3api delete-bucket --bucket "${BUCKET_NAME}"
  
  if [ $? -eq 0 ]; then
    echo "✓ 削除成功: ${BUCKET_NAME}"
  else
    echo "✗ 削除失敗: ${BUCKET_NAME}"
  fi
done

image06

ステップ3:IAM Identity Center から TEAM アプリの削除

  1. TEAM管理アカウントのAWSマネジメントコンソールを開きます
  2. IAM Identity Centerコンソールにアクセスします
  3. 左ペインから、[アプリケーションの割り当て>アプリケーション]を選択しますdeployimage07
  4. [カスタマー管理]タブを開きますdeployimage08
  5. 削除したいアプリケーションを選択し、右上の[アクション > 削除]を選択しますdeployimage09
  6. 削除確認を行い、削除を実行しますdeployimage10

⚠️ ステップ4を先に実行した場合はエラーになります。このエラーは、グループとの紐づけ情報が不正になっているためですので、「割り当てられたユーザーとグループ」をすべて削除することで、削除できるようになります。

ステップ4:TEAMで利用していた IAM Identity Center グループの削除

TEAM管理アカウントのCloudShell上に貼り付けて実行します。

STORE_ID=$(aws sso-admin list-instances --query "Instances[0].IdentityStoreId" --output text --no-paginate)

# 各グループを削除
aws identitystore list-groups \
  --identity-store-id "${STORE_ID}" \
  --output json | \
jq -r '.Groups[] | select(.DisplayName | startswith("TEAM-")) | "\(.GroupId)\t\(.DisplayName)"' | \
while IFS=$'\t' read -r GROUP_ID GROUP_NAME; do
  echo "グループを削除中: ${GROUP_NAME} (ID: ${GROUP_ID})"
  aws identitystore delete-group \
    --identity-store-id "${STORE_ID}" \
    --group-id "${GROUP_ID}"
  
  if [ $? -eq 0 ]; then
    echo "✓ 削除成功: ${GROUP_NAME}"
  else
    echo "✗ 削除失敗: ${GROUP_NAME}"
  fi
done

deployimage11

TEAM用IAM Identity Centerグループ定義例

役割名

主な役割

グループ名

申請者

TEAM アプリケーションで一時的なアクセス権限をリクエストするユーザーグループ(開発者やオペレーターなど)

TEAM-Users

承認者

TEAM アプリケーションで本番アカウントへのリクエストをレビュー・承認 / 拒否する権限を持つユーザーグループ。ただし、自身のリクエストは自身では承認できません

TEAM-Approvers-Production

承認者

TEAM アプリケーションで本番アカウント以外へのリクエストをレビュー・承認 / 拒否する権限を持つユーザーグループ。ただし、自身のリクエストは自身では承認できません

TEAM-Approvers-NonProduction

管理者

TEAM アプリケーションの設定管理・ユーザー管理・グループ設定などを行うユーザーグループ

TEAM-Admins

監査者

TEAMアプリケーションのリクエスト履歴やアクセスログの確認・レビューを行うユーザーグループ (読み取り専用)

TEAM-Auditors

TEAMアプリケーションを利用したAWSアカウントへの一時アクセス許可申請を行う方法を説明します。

TEAMアプリケーションにログインする

  1. AWSアクセスポータルを開きます image02
  2. アプリケーションタブを開きます image03
  3. 「TEAM IDC APP」のアプリケーションが表示されていることを確認し、クリックします ⚠️ 「TEAM IDC APP」が表示されていない場合は、TEAM管理者に連絡し、アクセス権限を付与してもらってください。
  4. [Federated Sign In] ボタンをクリックします image04
  5. [IDC]ボタンをクリックします。AWSマネジメントコンソールにログインするユーザーで認証が行われます image05
  6. TEAMアプリケーションのトップページが表示されます image06

一時アクセス許可の申請を行う

see: TEAM Requestor guide

  1. TEAMアプリケーションのトップページにある[TEAM Requests]からActions[Create TEAM request]または、左ペインの[Requests]から[Create request]を選択します image07image08
  2. リクエストフォームが表示されます image09
  3. 以下の項目を入力します
    • 【変更不可】 Email:ログインしているユーザーのメールアドレスが表示されています
    • 【必須】 Account:一時アクセスを申請したいAWSアカウントをリストから選択します
    • 【必須】 Role:一時アクセスのロールをリストから選択します
    • 【必須】 Start time:一時アクセスを開始する日時を指定します。デフォルトは現在日時となっていますので、忘れずに変更してください
    • 【必須】 Duration:一時アクセスが許可される時間を数字で指定します。上記[Start time]から何時間作業する予定なのか入力します。
      • ⚠️ TEAM管理者によって最大作業時間が指定されています。最大9時間が指定されている場合、「10」と入れようとすると「0」が入力できずにエラーになります。設定された最大作業時間を超える申請が必要な場合は、TEAM管理者に連絡してください。す image10
    • 【任意】Ticket no:今回の申請に関係するチケット番号を入力します
    • 【必須】Justification:今回の申請に関する理由を入力します。できるだけ明確に理由を入力してください
  4. [Submit]ボタンをクリックし、申請を実施します
  5. 申請の状況を確認する場合は、次の手順「申請のステータスを確認する」を実施します

申請のステータスを確認する

see: TEAM Requestor guide

  1. 左ペインの[Requests]から[My requests]を選択します image11
  2. 申請の一覧を確認します。ステータスが「pending」になっているものは承認待ちです。承認が完了すると「approved」になります。す image12
    • pending:申請は承認待ちです
    • approved:申請が許可されました
    • rejected:申請が拒否された
    • cancelled:申請をキャンセルされました
  3. 詳細を確認したい場合は、確認したい申請を選択し、[View details]をクリックします

💡 申請ステータスが「approved」になっている場合、申請時に指定した[Start time]以降にAWSアクセスポータルを表示すると、申請したAWSアカウントが表示されるようになります。表示されない場合は、TEAM管理者に連絡してください。

⚠️ アクセス有無にかかわらず、申請した作業時間が過ぎた場合は自動的にアクセス許可が削除されます。

申請をキャンセルする

see: TEAM Requestor guide

  1. 「申請のステータスを確認する」の手順で、申請の一覧を表示します
  2. キャンセルしたい申請をクリックし、[View details]をクリックします
  3. [Cancel request]ボタンをクリックしますす image13

⚠️ 一度キャンセルした申請は、もとに戻すことはできません。再度申請を行ってください。

TEAMアプリケーション管理者を追加または削除する

初期構築時点では、IAM Identity Centerで定義されている「TEAM-Admins」グループに登録されている人が、TEAMアプリケーションを管理できます。

TEAMアプリケーション管理者はAdministrationメニューにある以下のことが実施できます。

image02

⚠️ 「管理者グループ」に所属するメンバーであっても、「承認者グループ」に割り当てない限り、申請承認の操作を行うことはできません。

  1. 「TEAM管理用AWSアカウント」で、AWSマネジメントコンソールを開きます
  2. 最近アクセスしたサービスまたは、検索から[IAM Identity Center]コンソールを開きますimage03
  3. 左ペインから、[グループ]を選択しますimage04
  4. 「TEAM-Admins」のグループを検索してクリックし、グループの詳細を開きますimage05
  5. [ユーザーをグループに追加]から、ユーザーを追加または削除しますimage06

⚠️ グループにユーザーを追加した直後は、AWSアクセスポータルの画面にTEAMアプリケーションが表示されないことがあります。その場合は、AWSアクセスポータルの画面でログオフし、再度ログインを行ってください。

TEAMアプリケーション監査者を追加または削除する

初期構築時点では、IAM Identity Centerで定義されている「TEAM-Auditors」グループに登録されている人が、TEAMアプリケーションでの申請承認履歴やアクティビティを参照できます。

TEAMアプリケーション管理者はAuditメニューにある以下のことが実施できます。

image07

TEAMアプリケーション監査者を追加する手順は、「TEAMアプリケーション管理者」と同様となりますのでそちらを参照してください。「TEAM-Auditors」に対してユーザーを追加または削除します。

image08

申請者管理

TEAMアプリケーションを使って申請できる人を追加または削除する

初期構築時点では、IAM Identity Centerで定義されている「TEAM-Users」グループに登録されている人が、TEAMアプリケーションを利用できます。

TEAMアプリケーションの利用可否を制御するには、このグループにメンバーを追加または削除します。

TEAMアプリケーション監査者を追加する手順は、「TEAMアプリケーション管理者」と同様となりますのでそちらを参照してください。「TEAM-Users」に対してユーザーを追加または削除します。

image09

TEAMアプリケーションの申請者グループを追加、削除する

次の手順「申請者ポリシーを管理する」にあるように申請者グループに対して、アカウントやOUの単位で、どの許可セットが申請可能か、といった細かい制御が可能です。

複数の申請者グループで管理を細分化したい場合は、IAM Identity Centerでグループを作成してください。

申請者ポリシーを管理する

see: TEAM Administrator guide

申請者のグループごとにAWSアカウントまたは、OU単位で、申請時に選択可能な権限(許可セット)や承認フローが必須かどうかを設定できます。

初期構築時点では、「TEAM-Users」のグループが[アカウント指定+許可セット+承認必須]という定義になっています。

⚠️ 対象アカウントを指定しているので、AWSアカウントを追加した場合は、修正が必要です。

💡 OU単位でのポリシーを作成すると、AWSアカウントの増減に対するメンテナンスは必要なくなりますが、広い範囲での申請が可能になってしまいます。

  1. 左ペインの[Administration]から[Eligibility policy]を選択しますimage10
  2. [Add approvers]ボタンまたは、既存のポリシーを選択し[Actions]から[Edit]を選択しますimage11
  3. 以下を設定します
    • Entity type:UserかGroupをリストから選択します。ユーザー単位でも定義できますが、グループ単位での管理を推奨します。
    • Ticket No:作業を紐づけるチケット番号がある場合は入力します
    • Accounts:申請可能なAWSアカウントをリストから選択します。複数選択が可能です
    • OUs:OU単位で許可する場合は、許可するOUを選択します。複数選択が可能です
    • Permission:許可セットをリストから選択します。複数選択が可能です
    • Max duration:一時アクセスの作業時間を数字で指定します
      • 💡 [Administration>Settings]で「Maximum request duration」 を超える値の設定が可能です
    • Approval required:申請の承認が必須かどうかを選択します
      • ⚠️ [Administration>Settings]で「Approval workflow」 を Not requiredにした場合は、この設定に関係なく承認不要になります。
  4. [Add eligibility policy]をクリックして保存します

承認管理

承認ポリシーを管理する

see: TEAM Administrator guide

see: https://aws-samples.github.io/iam-identity-center-team/docs/guides/admin.html#configure-approver-policy

  1. 左ペインの[Administration]から[Approver policy]を選択しますimage12
  2. [Add approvers]ボタンまたは、既存のポリシーを選択し[Actions]から[Edit]を選択しますimage13
  3. 以下を設定します
    • Entity type:[Organizational Unit]か[Account]をリストから選択します。
    • Accounts:「Entity type」に[Account]を選択した場合に表示されます。申請可能なAWSアカウントをリストから選択します。複数選択が可能です
    • OUs:「Entity type」に[Organizational Unit]を選択した場合に表示されます。OU単位で許可する場合は、許可するOUを選択します。複数選択が可能です
    • Ticket No:作業を紐づけるチケット番号がある場合は入力します
    • Approver Groups:承認者グループをリストから選択します。複数選択が可能です
  4. [Add approvers]をクリックして保存します

⚠️ 複数アカウント×複数承認グループを設定すると、ポリシーはそれぞれの組み合わせごとに分割されます。修正する場合は、個別に実施する必要があります。

image14

その他設定

see: TEAM Administrator guide

see: https://aws-samples.github.io/iam-identity-center-team/docs/guides/admin.html#configure-team-settings

  1. 左ペインの[Administration]から[Settings]を選択しますimage15
  2. 設定画面が開きますimage16
  3. [Edit]ボタンをクリックします
  4. 必要箇所を変更します(変更箇所は後述の手順に従います)

申請に対する承認を有効または無効に変更する

ここで申請承認を無効にすると、TEAMアプリケーション全体で承認が不要になります。

申請承認を有効にすると、申請者ポリシーで指定した動作に従って承認の有無が判断されます。

  1. 「Approval workflow」 をRequiredNot requiredに変更しますimage17image18
  2. [Submit]ボタンをクリックして保存します

申請時のコメント入力を必須または任意に変更する

  1. 「Comments」をRequiredNot requiredに変更しますimage19image20
  2. [Submit]ボタンをクリックして保存します

申請時のチケット番号入力を必須または任意に変更する

  1. 「Require ticket number」をRequiredNot requiredに変更しますimage21image22
  2. [Submit]ボタンをクリックして保存します

一時権限の最大利用可能時間を設定する

ここで指定した時間を超える利用時間で申請ができなくなります。

  1. Maximum request durationに期限切れとなる[時間]を数字で入力しますimage23
  2. [Submit]ボタンをクリックして保存します

未承認リクエストの期限切れとなる時間を設定する

未承認リクエストは指定した時間を過ぎると期限切れとなり、再申請が必要になります。

  1. 「Request expiry timeout」に期限切れとなる[時間]を数字で入力しますimage24
  2. [Submit]ボタンをクリックして保存します

Eメールによる申請通知を有効にする

  1. 「Send Email notifications」をONに変更しますimage25image26
  2. Source emailを入力しますimage27
  3. [Submit]ボタンをクリックして保存します

SNSによる申請通知を有効にする

  1. 「Send SNS notifications」をONに変更しますimage28image29
  2. [Submit]ボタンをクリックして保存します

⚠️ SNSはTEAMアプリケーションデプロイ時に作成されています。通知を受信するにはTEAM管理用AWSアカウントのマネジメントコンソールから、「Simple Notification Service」を開き TeamNotifications-main のトピックへのサブスクリプション登録を行ってください。

Slackによる申請通知を有効にする

  1. 「Send Slack notifications」をONに変更しますimage30image31
  2. あらかじめSlack通知用のアプリケーションを作成しておく必要がありますimage32
  3. Slack OAuth tokenSlack Audit Channelを入力します
  4. [Submit]ボタンをクリックして保存します

申請を承認する

  1. 左ペインの[Approvals]から[Approve requests]を選択します
  2. 自身が承認しなければならない申請の一覧が表示されます ⚠️ 自分で行った申請は、承認者権限があったとしても一覧に表示されません
  3. 申請内容を確認する場合は、申請を選択し[View details]をクリックします
  4. 申請を承認する場合は、申請を選択し、[Actions]から[Approve]を選択します
  5. コメントを入力し、[Confirm]ボタンをクリックします
  6. 承認した履歴を確認する場合は、「自身が実施した承認履歴を確認する」を参照してください

申請を否認する

「申請を承認する」の手順と同様ですが、手順4で[Actions]から[Reject]を選択します。

自身が実施した承認履歴を確認する

  1. 左ペインの[Approvals]から[My approvals]を選択します
  2. 承認を行った履歴が表示されます
  3. 承認の内容を確認したい場合は、確認したい承認を選択し、[View details]ボタンをクリックします
  4. 承認履歴をダウンロードしたい場合は、[Download]ボタンをクリックすることでCSVファイルがダウンロードできます

TEAMアプリケーションの申請やセッションのアクティビティ等の監査を行う方法を説明します。

承認履歴を閲覧する

see: TEAM Auditor guide

  1. [Adit]メニューより、[Approvals]を選択します image02
  2. 承認一覧が表示されているので確認します image03
  3. 詳細を確認したい場合は、確認したい履歴を選択し、[View Details]ボタンをクリックします image04
  4. 表示数や項目を変更したい場合は、⚙アイコンをクリックして変更します image05
  5. 必要に応じて、[Download]ボタンからCSVファイルをダウンロードして確認します image06

セッションアクティビティを確認する

see: TEAM Auditor guide

  1. [Audit]メニューより、[Elevated access]を選択します image07
  2. セッションの一覧が表示されます image08
  3. 詳細を確認したい申請を選択し、[View Details]ボタンをクリックします image09
  4. [Session Logs]を展開すると、接続したセッションの一覧を表示できます。どのサービスにアクセスしたのかといったレベルで確認することができます。 image10
  5. 必要に応じて、[Download]ボタンからCSVファイルをダウンロードして確認します

本記事では、AWS IAM Identity Center向けの一時的な権限昇格管理ソリューション「TEAM(Temporary Elevated Access Management)」について、導入から運用までを包括的に解説しました。

TEAMの主な特徴

TEAMは、AWSが提供するオープンソースソリューションとして、以下の特徴を備えています。

導入効果

TEAMを導入することで、以下のような効果が期待できます。

導入時の検討ポイント

TEAMを導入する際は、以下の点を考慮してください。

  1. 組織のポリシー設計
  1. 運用体制の整備
  1. 既存システムとの統合

次のステップ

TEAMを導入した後は、以下のステップで継続的に改善していくことをお勧めします。

  1. 初期運用の観察: 導入後1〜3ヶ月は、申請・承認の頻度やパターンを観察し、ポリシーが適切か確認する
  2. ユーザーフィードバックの収集: 申請者と承認者からフィードバックを集め、運用上の課題を特定する
  3. ポリシーの最適化: 観察結果に基づいて、申請者ポリシーと承認者ポリシーを調整す
  4. 監査プロセスの確立: 定期的な監査レビューのプロセスを確立し、異常なアクセスパターンを検出する

参考リソース

TEAMに関するさらに詳しい情報は、以下の公式リソースを参照してください。

TEAMは、AWS環境におけるゼロスタンディング特権の実現と、特権アクセス管理の自動化・可視化を実現する強力なソリューションです。本記事が、皆様のセキュリティ向上とコンプライアンス対応の一助となれば幸いです。