TEAM for AWS IAM Identity Center でデプロイされたものと、権限昇格ワークフローを実現している仕組みを調べてみた
いわさです。
先日 Temporary elevated access management (TEAM) for AWS IAM Identity Center というソリューションをデプロイしました。
一時的な権限昇格をリクエストし管理者が承認すると一定期間 AWS アカウントへの権限が付与されるものです。
デプロイして動いているのですが、ドキュメントに従ってデプロイスクリプトを実行しただけなので何がデプロイされ、さらにどういう仕組で権限昇格がされているのかよくわかっていませんでした。
こちらを少し掘り下げてみたので調べた内容を紹介します。
デプロイスクリプトとスタック
デプロイ手順は以下に記載されています。
GitHub からリポジトリをクローンし、パラメータファイルに必要な情報を設定した上で、Organizations 管理アカウントでinit.shスクリプトを実行し、TEAM for IDC デプロイ対象のメンバーアカウントでdeploy.shスクリプトを実行します。
init.shは以下です。内容としてはドキュメントにも記載のアカウント上の前提条件のチェックと無効なときの有効化を実行してくれます。
TEAM デプロイメンバーアカウントは Organizations/CloudTrail/IAM Identity Center の委任管理者である必要があり、それらが有効化されます。
私がデプロイする時はそれらを手動で有効化していたのですがしなくてよかったみたいですね。このスクリプトで自動でやってくれたみたいだ。
deploy.shは以下です。
このスクリプトは CodeCommit にリポジトリをプッシュし、次の CloudFormation テンプレートをデプロイします。
テンプレートの中身は Amplify ですね。その Amplify が CodeCommit リポジトリを参照している感じみたいです。
Amplify などのフルスタックアプリケーションのサービスにインフラやソフトウェア全部まかせてしまうのはこういったソリューションのデプロイ方法のひとつとして参考になりますね。

ちなみにデプロイされた Amplify は Gen1 でした。CodeCommit は最近復活しましたけど、ちょっと将来性怪しい構成だったか...

そして Amplify Gen1 でデプロイされるカスタムアプリケーションのアーキテクチャは以下です。
Cognito と AppSync + Lambda、DynamoDB を使ったよくある構成ですが、コアの部分は Step Functions を使っているのがポイントですね。
どのサービスも利用がなければ料金が発生しないものなのでデプロイだけしておいてもコストは気にしなくて良さそうですね。
権限昇格の仕組み
では続いて権限昇格の仕組みを見てみましょう。
弊社でも権限昇格を行う内部ソリューションを普段使っていて、このあたりの実装方法が気になります。
TEAM for IDC で権限昇格リクエストが承認されると、次のように一定時間だけ対象アカウントに対しての許可セットが割り当てられます。
そして一定時間経過すると許可セットの割当が解除される感じですね。

上記アーキテクチャページにも記載されていますが、ポリシーやリクエストについては DynamoDB で管理されており、リクエストの処理や時間の処理については Step Functions で処理されています。
いくつかのステートマシンが用意されているのですが、ほぼ以下のTEAM-Grant-SM-mainがメインのステートマシンになります。

CreateAccountAssignmentを使って IAM Identity Center のユーザーに許可セットを割当しています。
そしてリクエスト時に申請した期間までステートマシンが待機しTEAM-Revoke-SM-mainステートマシンを実行することで権限の解除を行っています。
TEAM-Revoke-SM-mainは以下のようになっており、DeleteAccountAssignmentAPIで権限の削除を行っています。

Step Functions で申請時間や期限を考慮したワークフローを実現し、API としては IAM Identity Center API を使って権限の割当と削除を行っていることが確認出来ました。
Step Function で時間の管理を行うところ参考になります。
さいごに
本日は TEAM for AWS IAM Identity Center でデプロイされたものと、権限昇格ワークフローを実現している仕組みを調べてみました。
実現方法自体はシンプルでしたね。これを応用すると非 Organizations 環境でも一時的な権限昇格を行う仕組み実装できる気がしてきました。
ワークフローは Step Functions で管理しつつ、権限付与を IAM API に変えてやれば良さそうですね。







