[アップデート] IAM Identity Center のユーザーに既存の IAM ロールを直接割り当てられる Account Access Manager がリリースされたので試してみた
いわさです。
AWS IAM Identity Center を使ったマルチアカウント環境では、ユーザーやグループに AWS アカウントへのアクセス権を付与する際に「許可セット」を使うのが一般的です。
許可セットを使うと、Identity Center がアカウントごとに IAM ロールを自動プロビジョニングしてくれます。
ただ、許可セットは Identity Center が専用ロールを自動生成する仕組みなので、IaC で管理している既存の IAM ロールや、カスタム信頼ポリシーを設定したロールをそのまま使いたい場合には合いませんでした。
先日、IAM の新機能として「Account Access Manager」がリリースされました。
Identity Center のユーザーやグループを既存の IAM ロールに直接マッピングできる機能です。
ロールは自分で作成・管理し、「誰がどのロールを引き受けられるか」の紐付けだけを Account Access Manager で管理します。
追加コストなし、全ての AWS 商用リージョンで利用可能とのこと。
公式ドキュメントによると、許可セットと併用もできるようです。
You can also use account access manager — an IAM feature — to assign existing IAM roles to IAM Identity Center users and groups in your organization's accounts. You can use account access manager on its own, or together with permission sets. Account access manager gives you access to the full IAM role feature set, including custom trust policies, role tags for ABAC, and configurable role paths.
今回こちらを確認してみたので紹介します。
実際に確認してみる
IAM コンソールの左メニューに「マルチアカウントアクセス > アカウントアクセスマネージャー」が追加されています。

今回は IAM Identity Center の組織インスタンスがバージニア北部リージョンにある環境で検証しました。
有効化でハマった
「有効化」ボタンをポチっと押したところ、いきなりエラーになりました。

Required service principal account-access.amazonaws.com is not enabled for the organization.
Please enable trusted access for this service in AWS Organizations.
Organizations で trusted access を先に有効化しておく必要があるようです。
Organizations コンソールのサービス一覧を確認してみましたが、Account Access Manager はそこに表示されていませんでした。CLI で有効化します。
$ aws organizations enable-aws-service-access \
--service-principal account-access.amazonaws.com
再度「有効化」を押すと、今度は数秒の処理の後にセットアップが完了しました。


IAM ロールの準備
割り当て対象の IAM ロールを作成します。
信頼ポリシーに account-access.amazonaws.com を指定するのですが、ここにもハマりポイントがありました。
最初、信頼ポリシーの Action を sts:AssumeRole だけにしていたところ、後述するポータルからのアクセス時に「Federation failed - The specified role does not have sufficient STS permissions」と表示されてフェデレーションできませんでした。
CloudTrail を調べたところ、Account Access Manager はロールの引き受け時に sts:TagSession、sts:SetSourceIdentity、sts:SetContext も使っていることがわかりました。
最終的に以下の信頼ポリシーで動作しました。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "account-access.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:TagSession",
"sts:SetSourceIdentity",
"sts:SetContext"
]
}
]
}

アクセス権の割り当て
「ユーザー」タブからユーザーを選択し、「新しいアクセスを割り当てる」をクリックします。


アカウント ID とロール名を入力して「アクセス権の割り当て」を押すだけです。


ポータルからアクセスしてみる
「設定」タブにアプリケーション URL が表示されています。
通常の AWS access portal とは別の URL になっていますね。

この URL にシークレットウィンドウからアクセスし、割り当てたユーザーでサインインしてみます。

「AWS account access」という画面にアカウントとロールが表示されました。

許可セットのポータルとは見た目が違いますね。「Enable programmatic access」のリンクもあり、ここから CLI 用のクレデンシャルも取得できるようです。
ロール名のリンクをクリックすると...

マネジメントコンソールにフェデレーションできました。右上にロール名が表示されています。
さいごに
本日は IAM の新機能 Account Access Manager がリリースされたので確認してみました。
既存の IAM ロールをそのまま Identity Center ユーザーに紐付けられるのは、IaC でロールを管理している環境だと便利そうです。
許可セットと組み合わせて使えるとのことなので、ベースラインは許可セットで統一しつつ特殊な権限だけ Account Access Manager で割り当てる、みたいな運用パターンが考えられそうですね。
セットアップ時の注意点としては、Organizations のサービスメニューに Account Access の成魚が見当たらなくて、trusted access を CLI で事前に有効化する必要がありそうだったのでそうした点と、IAM ロールの信頼ポリシーには sts:AssumeRole だけでなく sts:TagSession、sts:SetSourceIdentity、sts:SetContext も含める必要がある点でした。
私がドキュメント見落としてなければもう少し手順の整理が必要そうです。








