【実用】Temporary elevated access management (TEAM)をCloudShell・CodeCommitを使ってzipファイルからデプロイする

記事タイトルとURLをコピーする

垣見です。

Temporary elevated access management (TEAM) for AWS IAM Identity Center (以下、TEAM)で、GitHubを使わないでCodeCommitを使う実用的なデプロイ方法をご紹介します。

初めに

以前、こんな記事を投稿しました。

blog.serverworks.co.jp

AWS IAM Identity Center(以下、IdC)の運用を楽にするTEAMのデプロイ方法の記事です。

TEAMのデプロイはdeploy.shというスクリプトファイルを実行することで簡単に進みます。しかし、もともとの手順はリポジトリとしてCodeCommitを使う手順となっていました。 この当時はAWS CodeCommitが使えなくなったことでTEAMのIssue上で大騒ぎしていましたが、CodeCommitは奇跡の復活を遂げました。

blog.serverworks.co.jp

しかしこの騒動を経て、公式でのTEAMデプロイ手順はGitHubを使った応急対応に変更されて、そのままになっています。

aws-samples.github.io

GitHubを使った方法は、Classicのトークンを必要とするなどセキュリティ的に微妙な点があります。
需要があるであろうCodeCommitを使うデプロイ方法が現状わかりにくいので、今回はそれをご紹介します。

また手順内では、実運用に役立つ以下のポイントもお伝えします。

  • 外部の開発環境の準備が必要ない、AWS CloudShell上からデプロイを完結させられる手順をご紹介します。
  • OSSであるTEAMのどの時点のデプロイかを開発者サイドでも管理でき、かつ開発環境と本番環境で絶対に同じソースコードを使えるように、git cloneではなくzipファイルを用いたデプロイ方法を使います。

前提条件

  • AWS Organizationsが存在する
  • AWS IAM Identity Centerが有効化されている
  • AWS IAM Identity CenterのログインURLをメモしておく(IdCコンソール→設定→アイデンティティソース→AWS accsess portal URLのデュアルスタックまたはデフォルトIPv4のみ)
  • 構築に必要な権限を持っている
  • デプロイしたいバージョンのTEAMをzipファイル化してローカル(AWS環境と接続するPC端末)に保管しておく(初回はこのリリースノートから最新バージョンをとるのがおすすめです)

概要

管理アカウントでやること:

  • TEAMをデプロイするアカウントに対し、各種委任を行う
    • IAM Identity Centerの委任
    • Cloudtrailの委任
    • Account Managementの信頼されたアクセスを有効化

IdC委任アカウントでやること:

  • CloudTrail Lake EventDataStoreを作成する
  • IdCで、TEAM用のAdministrator・Auditorペルソナ用のグループを作る
  • TEAMのデプロイ

    • デプロイ用ファイルの準備
    • defaultクレデンシャル設定
    • parameter.shの用意
    • deploy.shの実行(= デプロイ)
  • TEAMとIdC, Cognitoを連携する

    • 統合用情報取得
    • SAML2.0アプリケーションの作成
    • 属性マッピングの編集
    • ユーザーとグループの割り当て
    • Cognito連携
  • ログイン確認
  • 【おまけ】CloudWatch Logsの保持期間設定

deploy.shの挙動

TEAMリソースのデプロイ自体はdeploy.sh実行により簡単にできますが、裏ではCodeCommit→Amplify周り→CloudFormation、のように結構複雑に動いていました。
ファイル実行による挙動を以下に簡単にまとめておきます。(バージョン1.4.2時点)

解説(折り畳み)

前提:parameter.shとデプロイスクリプト(deploy.shおよびTEAM用のコード)を用意

  • parameter.shに記載した任意のロールを使ってdeploy.sh実行。それにより以下が同時に起きる
    • TEAM用のコードがCodeCommitに送られる。
    • TEAM-IDC-APPスタック経由
      • Amplify用AdminロールTEAM-IDC-APP-AmplifyRole-<ランダム値>作成
      • Lambda用ロールTEAM-IDC-APP-AmplifyLambdaRole-<ランダム値>作成
      • 上記ロールとCodeCommitとparameter.shの値を参照するAmplifyのApp、Branch作成
      • 上記ロールを使うLambda関数TEAM-IDC-APP-TriggerBuildLambda-<ランダム値>を作成
      • →LambdaによりAmplifyのBuildトリガー
  • BuildトリガーによってAmplifyがamplify-teamidcapp-main-<ランダム値>(親スタック)を立て、以下リソースを作る
    • 子スタック参照用S3バケットamplify-teamidcapp-main-<ランダム値>-deployment とそのポリシー
    • CloudFormationのデプロイに合わせて、Cognito IDプールの認証済み/未認証ロールの『信頼関係』を自動で書き換えるLambda関数(CFnからInvokeされる):amplify-teamidcapp-main-<ランダム値>-UpdateRolesWithIDPFuncti-<ランダム値>
      • cognitoがappsync:GraphQLアクションを使うための承認用IAMロール:amplify-teamidcapp-main-<ランダム値>-authRole
      • cognito用の何も権限を持たない未承認用IAMロール:amplify-teamidcapp-main-<ランダム値>-unauthRole
      • このLambda用のIAMロール:amplify-teamidcapp-main-<ランダム値>-authRole-idp
      • ※「CognitoのIDプールID」が決まらないと、IAMロールの「信頼関係」を完璧に書けず、IAMロールがないとIDプールを設定できない、という問題を解決するための仕組み。仮で作ったロールをもとにIDプールを作り、その後ロールのポリシーを実際のIDプールのIDに書き換える。
  • ネストされた子スタックごとにリソースが作成される。その時に、リソース用のIAMロールも順次できていく

手順

1. 管理アカウントで各種委任を行う

ローカル開発環境から実施する場合、init.shを実行することで各種委任が自動で行われます。
しかし今回の手順の場合、コンソール上で作業したほうがシンプルに早く終わるので、ここは手作業で行います。
(init.shを利用したい方は、後続の手順4を見ながら管理アカウント上でもCloudShell上での設定を行ってください)

1-1. デプロイアカウントにIAM Identity Centerを委任する

1.Organizations管理AWSアカウントのAWSコンソールへログイン・アクセスする

  1. AWS IAM Identity Centerコンソールの画面に遷移する

  2. 設定に移動

  3. 「管理」→「委任された管理者」→「アカウントを登録」をクリック

1-2. デプロイアカウントにCloudtrailを委任する

1.Organizations管理AWSアカウントのAWSコンソールへログイン・アクセスする

  1. CloudTrailコンソールの画面に遷移する

  2. 設定に移動

  3. 組織の委任された管理者 → 「管理者を登録」をクリック

https://cdn-ak.f.st-hatena.com/images/fotolife/s/swx-tamaki-kakimi/20250203/20250203042104.png

  1. IAM Identity Center委任アカウントの12桁のアカウントIDを入力し、「管理者を登録」をクリック

1-3. Account Managementの信頼されたアクセスを有効化する

TEAMデプロイアカウントからOrganizations全体のアカウント情報を取得したりするのに使います。
  1. Organizationコンソール → サービス → AWS Account Management へ移動

  2. 信頼されたアクセスを有効にする → 「有効化」を入力 →信頼されたアクセスを有効にする

2. IdC委任アカウントでCloudTrail Lake イベントデータストアを作成する

この手順では、監査ペルソナが見ることができる「セッションごとのCloudTrailログ」を利用するためのイベントデータストアを作成します。

ただし、イベントデータストアは通常のCloudTrailに加えて別で設定するもので、かつ2026年3月現在「組織全体」または「そのアカウントだけ」の2択しか選べないため、有効活用するための組織全体のオンにはかなりコストがかかります。(AアカウントやB OUのみ、という指定ができない)

こちらはデプロイ時にARNを指定する必要があるため、この機能を使いたくない・コストをかけたくないという場合は、「無効化の状態で作ってARNのみ取得する」ことを推奨します。
  1. IAM Identity Centerを委任したAWSアカウントのAWSコンソールへログイン・アクセスする

  2. CloudTrailコンソールの画面に遷移する

  3. Lake → イベントデータストア に移動 「イベントデータストアの作成」をクリック

  4. 以下の通り入力し、「次へ」をクリック ※以下の項目はすべて任意です。要件に合わせて設定してください。

  5. イベントデータストア名:team-log(任意の名前で良いです)

  6. 料金オプション:1 年間の延長可能な保持料金
  7. 保存期間:1 年 (追加料金なしで取り込み料金に含まれています)
  8. 暗号化:自分の AWS KMS キーを使用にチェックを入れない
  9. Lake クエリーフェデレーション:有効にしない
  10. タグ:任意

  11. 以下の通り入力し、「次へ」をクリック

  12. イベントタイプ

    • イベントタイプを選択:AWS イベント
      • AWS イベントのタイプを指定します:CloudTrail イベント
    • CloudTrail イベント
      • 「管理イベント」のみにチェックを入れる
    • オプション
      • 組織内のすべてのアカウントについて有効化:チェックを入れる(※取得したアカウントのみの監査ログをTEAM監査ペルソナが確認することが出来ます)
      • イベントデータストアに現在のリージョン (ap-northeast-1) のみを含める:チェックを入れない
      • イベントを取り込む:チェックを入れない(※ここでチェックを入れるとデータストア作成時点からCloudTrailログの取り込みが開始します。料金がかかりますのでに注意して下さい。
    • 管理イベント
      • Simple event collectionを選択
      • Choose events to log:Only write events
      • Event exclusions - オプション:
        • AWS KMS イベントの除外:チェックを入れない
        • Amazon RDS のデータ API イベントを除外:チェックを入れない
      • Enable Insights events capture:有効にしない
  13. 確認画面を見て、問題が無ければ「イベントデータストアの作成」をクリックする

  14. 作成したイベントデータストアのステータスが作成中から停止済み(または有効)になるまで画面を更新する

  15. 作成したイベントデータストアのARNをコピーしておく

3. IdCで、TEAM用のAdministrator・Auditorペルソナ用のグループを作る

承認ペルソナ、申請ペルソナは後からでも作れますが、この二つは最初から指定する必要があります。

監査ペルソナは以下のようなセッションごとの行動ログを見ることが出来ます。
管理者ペルソナはアカウントへの承認者、申請者の権限をユーザーに割り当てたり、TEAMアプリそのものの設定(通知など)を変更できます。

アプリ上での見える範囲も異なります。

※Microsoft Entra IDと統合・自動プロビジョニングしている場合はそちらから操作してください

  1. AWS IAM Identity Centerコンソール→ グループ →グループを作成 g

  2. グループ名を入力(例:TEAM Admins、TEAM Auditors)、各ペルソナにしたいユーザーを割り当てる

  3. 「グループを作成」

4. TEAMのデプロイ

4-1. デプロイ用ファイルの準備

CloudShellではフォルダのアップロードはできないので、予め、ローカルにzip状態のソースコードを用意します。
(CloudShell上でgit cloneも可能ですが、Tag付けされていない微妙なバージョンや一部書き換えしたバージョンを使っていたり、検証環境と本番環境で「変更されていないこと」を担保したりしたい場合などのために、一度使うソースコードをzipで保存しておくことをお勧めします)

なお、リリースノートから過去の主要アップデートを追うことができます。zipもここにあります。

OSSであるTEAMはブランチ管理がちょっと微妙で、mainに数日おきにマージが走っていったりするときがありました。ですので、このリリースノートにあるタグ付けされた最新バージョンを使うのが、後からも振り返りやすくいいのではないかと思います。
  1. Cloudshellを開く →アクション→ファイルのアップロード→ ローカルに保存したzipファイルを開く(今回は現時点での最新のiam-identity-center-team-1.4.2.zipとします。)
  2. 以下を順に実行する。(iam-identity-center-team-1.4.2.zipはzipファイル名に置き換えてください)
unzip iam-identity-center-team-1.4.2.zip
cd iam-identity-center-team-1.4.2
  1. 以下を順に実行する。
※デプロイ時にCodeCommitへのgit pushをするため、git を扱えるようにしておく必要があるため実行します。
git init
git branch -m main
git add .
git config --global user.email "<任意のメールアドレス>"
git config --global user.name "<任意の名前>"
git commit -m "initial commit"
cat ~/.gitconfig

cat実行後、以下のように出ていたら問題ないです。

[user]
        email = <任意のメールアドレス>
        name = <任意の名前>
  1. 以下を実行する。
※deploy.sh内で「git remote remove origin」のようにローカルリポジトリとリモートリポジトリの解除コマンドがあり、ダミーURLを登録しておかないとうまくいかないので実行します。解除されるので中身はダミーでよいです。
git remote add origin https://example.com/dummy.git

4-2. defaultクレデンシャル設定

TEAMのデプロイでは.awsのプロファイルを使うので、defaultプロファイルを設定しておきます。
  1. 以下を1行ずつ順に実行
mkdir -p ~/.aws
echo "[default]
region = ap-northeast-1" > ~/.aws/config
chmod 600 ~/.aws/config
cat ~/.aws/config

catの実行後、以下のようになればOK

$ cat ~/.aws/config
[default]
region = ap-northeast-1

4-3. parameter.shの用意

TEAMのデプロイではこのparameter.shを基準にデプロイ、アップデート、削除が行われる。
  1. 以下を順番に実行する。
cd deployment/
cp -n parameters-template.sh parameters.sh
vi parameters.sh

vimなどで、paremeter.shを自環境に合わせて編集します。

ここで要求される値はTEAMアプリ自体のアップデートによって変わることがあるので注意してください。基本はparameter-template.shからコピーした内容を見て、見慣れないものがあったらソースコードのアップデート履歴を確認してください。

必須:

  • IDC_LOGIN_URL - AWS IAM Identity Center ログインURL
  • REGION - デプロイするリージョン。AWS IAM Identity Centerのあるリージョンでもある。(※マルチリージョンIdCは使えない)
  • TEAM_ACCOUNT - TEAMデプロイアカウント。IdC委任アカウント。
  • ORG_MASTER_PROFILE - Organizationsの管理アカウントだが、これは手作業で先ほど実施したのでコメントアウトしても問題ない。
  • TEAM_ACCOUNT_PROFILE - プロファイル。今回は上で設定したdefaultを入力。
  • TEAM_ADMIN_GROUP - TEAM上で管理ペルソナとして動くグループ
  • TEAM_AUDITOR_GROUP - TEAM上で監査ペルソナとして動くグループ
  • CLOUDTRAIL_AUDIT_LOGS - 先ほど作ったCloudTrail Lake イベントデータストアのARN
  • SECRET_NAME - GitHubを使う場合はSecrets Managerの名前を入れるが、今回はコメントアウトでよい。これが設定されているとGitHubを使うやり方に移行してしまう。

オプション:

  • TAGS - 任意でタグを付けられる。コスト配分タグなどをつけるのがよさそう。
  • UI_DOMAIN - Amplify がホストするTEAMアプリにカスタムドメインを付けたい場合入力

こんな感じ:

IDC_LOGIN_URL=https://d-12345678.awsapps.com/start
REGION=us-east-1
TEAM_ACCOUNT=123456789101  
# ORG_MASTER_PROFILE=OrgMAsterProfileName
TEAM_ACCOUNT_PROFILE=default
TEAM_ADMIN_GROUP="TEAM Admins"
TEAM_AUDITOR_GROUP="TEAM Auditors"
TAGS="tag1=value1 tag2=value2"
CLOUDTRAIL_AUDIT_LOGS=arn:aws:cloudtrail:us-east-1:123456789101:eventdatastore/e646f20d-7959-4682-be84-6c5b8a37cf15
# UI_DOMAIN=portal.teamtest.online
# SECRET_NAME=TEAM-IDC-APP
  1. 以下のようなコマンドで確認しておく
cat parameters.sh

4-4. deploy.shの実行(= デプロイ)

  1. CloudShell上で、まだ自分がiam-identity-center-team-1.4.2/deploymentディレクトリにいることを確認する
  2. 以下を実行する。この実行により、parameter.shを参照した各種デプロイが始まる
./deploy.sh
  1. Cloudformationコンソールを開く
  2. スタック作成が進んでいることをコンソールで参照し、30分ほどのデプロイを待つ。 Amplify コンソールを開く。AmplifyコンソールでTEAM-IDC-APPアプリを選択し、mainブランチが「デプロイ済み」に完了表示になっていたら次に進んでOK
  3. Cloudformationコンソールでteamとつくスタック群のデプロイが成功していることを確認する

5. TEAMとIdC, Cognitoを連携する

5-1. 統合用情報取得

  1. CloudShell上で、まだ自分がiam-identity-center-team-1.4.2/deploymentディレクトリにいることを確認する
  2. 以下を実行する。
./integration.sh
  1. この実行により、以下3点データが返ってくるのでメモしておく。

    • applicationStartURL - AWS IAM Identity Center アプリケーションプロパティの構成設定
    • applicationACSURL - AWS IAM Identity Center アプリケーションメタデータ構成設定
    • applicationSAMLAudience - TEAM アプリケーションの AWS Cognito ユーザープール ID の URN

5-2. SAML2.0アプリケーションの作成

1.AWSのIAM Identity Centerコンソール→アプリケーションの割り当て→アプリケーション→アプリケーションの追加 に移動、以下のように設定する

  • 設定するアプリケーションがある → SAML 2.0を選択し、次へをクリック
  • 表示名:TEAM IDC APP
  • アプリケーションの構成セクション:TEAM アプリケーションの説明として「TEAM for IAM Identity Center (<GitHubのURL>)」等を追加

AWS IAM Identity Center SAML メタデータファイル URLの URL をコピーして保存しておいてください。

2.続けて以下のように入力する

  • アプリケーション プロパティセクションのアプリケーション開始 URL:先ほどメモしたapplicationStartURLパラメータの値を入力
  • アプリケーション メタデータセクション:「メタデータ値をマニュアルで入力する」を選択
  • アプリケーション ACS URL:先ほどメモしたapplicationACSURLパラメータの値を入力
  • アプリケーション SAML オーディエンス:先ほどメモしたapplicationSAMLAudienceパラメータの値を入力

[送信]をクリックして設定を保存してください。

5-3. 属性マッピングの編集

1.「アクション」のドロップダウンをクリックし、属性マッピングの編集を選択して、次の値を追加する

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

変更の保存をクリックしてください。

5-4. ユーザーとグループの割り当て

1.[割り当てられたユーザーとグループ]の下で、 [ユーザーとグループを割り当てる]をクリックしてユーザーを追加する**

これにより、割り当てられたユーザーとグループに TEAM アプリケーションにログインするアクセス権が付与されるので、以下を検索窓に入れて追加してください。

  • デプロイ時のparameter.shTEAM_ADMIN_GROUPに指定したグループ
  • デプロイ時のparameter.shTEAM_AUDITOR_GROUPに指定したグループ
  • その他TEAMの承認ペルソナ、申請ペルソナとして使いたいグループ・ユーザー

5-5. Cognito連携

1.CloudShellを開き、iam-identity-center-team-1.4.2/deploymentに移動する

2.TEAM Cognito ユーザープールの設定を更新する

# details-template.jsonファイルの内容をdetails.jsonという名前の新しいファイルにコピー
$ cp details-template.json ./details.json
  1. details.jsonファイル内のMetadataURL を、先ほどコピーしたAWS IAM Identity Center SAML メタデータファイル URLの値に置き換える
vi details.json
{ 
    "MetadataURL": "<AWS IAM Identity Center SAML メタデータファイル URL>"
}

4.自身が/deploymentにいることを確認し、以下のコマンドを実行する

# CognitoのMetadataURLの設定を反映
$ ./cognito.sh

6. ログイン確認

これでデプロイは完了です!おめでとうございます!

TEAM管理者としてログインできるか確認してみましょう。

自分のIAM Identity CenterユーザーをTEAM Admins(デプロイ時のparameter.shTEAM_ADMIN_GROUPに指定したグループ)に所属させ、IAM Identity Centerアクセスポータルにログインします。

「Application」をクリックするとTEAM IDC APPが追加されています。

クリックすると……ログインできました!おめでとうございます!

※Entra IDを使っていてここでエラーが出る場合は以下も参考にしてください blog.serverworks.co.jp

こちらのブログではこれ以降の設定も進めることができます。 blog.serverworks.co.jp

7. 【おまけ】CloudWatch Logsの保持期間設定

2026年3月時点、TEAMアプリは、一部を除きほとんどのLambdaやappsync用のCloudWatch Logsの保持期間設定がされていません。
むしろ、デプロイ時にはCloudWatch Logsを明示的に作っておらず、後からLambdaが動くことでその名前のLogsができる、といったものが多いようです。

しかし、TEAMを本格的に使うなら、CloudWatch Logsの保持期間を永続的にしていると、コストへの影響はそれなりに大きくなっていくでしょう。大きい組織ほどその影響は大きいです。

ですから、TEAM上でのセッティングなどを終え、一通りTEAMを動かした段階で、CloudWatch Logsの保持期間を組織の要件に従って変更することをお勧めします。

※この際、関係のないCloudWatch Logsの保持期間を変更しないように注意してください。大半は名前に「TEAM」が入っておりますが、appsync用のロググループなどはTEAMの名が入っていません。
  1. CloudWatchコンソール(東京リージョン)へ移動し、左ペインでログ →ログ管理 を選択
  2. 保持期間が「失効しない」になっているロググループが並んでいるので、下記のロググループに対して 該当ロググループを選択→ アクション→保持期間の設定→「任意の期間」を選択→ 保存を実施し、チェックを入れる
  3. 終わるまで繰り返す

なお、TEAMのアップデートを行うとLambdaが増えたりする可能性もあるので、アップデートのタイミングで追加されたロググループを確認いただくのがいいかもしれません。

おわりに

うまくできましたでしょうか?もし気づいた点等ございましたらお気軽にご連絡ください。

このブログが皆様のお役に立てば幸いです。

垣見(かきみ)(執筆記事の一覧)

2023年新卒入社 エンタープライズクラウド部所属 2025 Japan AWS Jr.Champions

図解するのが好き。「サバワク」のアイキャッチ作成も担当しています