マルチリージョンのIAM Identity CenterとOktaを連携してシングルサインオンしてみた
はじめに
皆様こんにちは、あかいけです。
先日、IAM Identity Centerがマルチリージョン構成に対応しましたね。
これにより、プライマリリージョンで障害が発生した場合でも、追加リージョン経由でAWSアカウントへのアクセスを継続できるようになりました。
というわけで今回は、
マルチリージョンのIAM Identity CenterとOktaを連携してシングルサインオンできるようにしてみました。
前提条件
この記事では以下が完了していることを前提としています。
- OktaとIAM Identity Centerの基本的な連携設定が完了している
- OktaへのAWS IAM Identity Centerアプリの追加
- SAML設定(ACS URL、Issuer URL)
- SCIMによるユーザー/グループの自動プロビジョニング
- 参考: OktaとAWS IAM Identity Centerを連携してシングルサインオンする手順をまとめてみた
- IAM Identity Centerのマルチリージョン有効化が完了している
- マルチリージョンKMSキーの作成
- レプリカキーの作成
- IAM Identity Centerへのリージョン追加
- 参考: [アップデート] AWS IAM Identity Center がマルチリージョンをサポートしました
補足:マルチリージョンKMSキーのKMSキーポリシーについて
マルチリージョンKMSキーのキーポリシーの設定がちょっと複雑だったので補足します。
設定済みの方は読み飛ばしてください。
最低限必要なキーポリシー
マルチリージョンのIAM Identity Centerにて使うにあたり、最低限必要そうなキーポリシーは以下の通りでした。
キーポリシー
| ステートメント | 用途 |
|---|---|
| EnableIAMUserPermissions | キーポリシーの管理権限 |
| AllowIAMIdentityCenterAdminToUseTheKMSKeyViaIdentityCenter | IAM Identity Center管理者用(暗号化操作) |
| AllowIAMIdentityCenterAdminToUseTheKMSKeyViaIdentityStore | Identity Store管理者用(暗号化操作) |
| AllowIAMIdentityCenterAdminToDescribeTheKMSKey | IAM Identity Center管理者用(DescribeKey) |
| AllowIAMIdentityCenterToUseTheKMSKey | IAM Identity Centerサービス用(暗号化操作) |
| AllowIdentityStoreToUseTheKMSKey | Identity Storeサービス用(暗号化操作) |
| AllowIAMIdentityCenterAndIdentityStoreToDescribeKMSKey | サービス用(DescribeKey) |
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EnableIAMUserPermissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<管理アカウントID>:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "AllowIAMIdentityCenterAdminToUseTheKMSKeyViaIdentityCenter",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<管理アカウントID>:root"
},
"Action": [
"kms:Decrypt",
"kms:Encrypt",
"kms:GenerateDataKeyWithoutPlaintext"
],
"Resource": "*",
"Condition": {
"ArnLike": {
"aws:PrincipalArn": "arn:aws:iam::<管理アカウントID>:role/aws-reserved/sso.amazonaws.com/*/AWSReservedSSO_*"
},
"StringLike": {
"kms:EncryptionContext:aws:sso:instance-arn": "*",
"kms:ViaService": "sso.*.amazonaws.com"
}
}
},
{
"Sid": "AllowIAMIdentityCenterAdminToUseTheKMSKeyViaIdentityStore",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<管理アカウントID>:root"
},
"Action": [
"kms:Decrypt",
"kms:Encrypt",
"kms:GenerateDataKeyWithoutPlaintext"
],
"Resource": "*",
"Condition": {
"ArnLike": {
"aws:PrincipalArn": "arn:aws:iam::<管理アカウントID>:role/aws-reserved/sso.amazonaws.com/*/AWSReservedSSO_*"
},
"StringLike": {
"kms:EncryptionContext:aws:identitystore:identitystore-arn": "*",
"kms:ViaService": "identitystore.*.amazonaws.com"
}
}
},
{
"Sid": "AllowIAMIdentityCenterAdminToDescribeTheKMSKey",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<管理アカウントID>:root"
},
"Action": "kms:DescribeKey",
"Resource": "*",
"Condition": {
"ArnLike": {
"aws:PrincipalArn": "arn:aws:iam::<管理アカウントID>:role/aws-reserved/sso.amazonaws.com/*/AWSReservedSSO_*"
}
}
},
{
"Sid": "AllowIAMIdentityCenterToUseTheKMSKey",
"Effect": "Allow",
"Principal": {
"Service": "sso.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:ReEncryptTo",
"kms:ReEncryptFrom",
"kms:GenerateDataKeyWithoutPlaintext"
],
"Resource": "*",
"Condition": {
"StringLike": {
"kms:EncryptionContext:aws:sso:instance-arn": "*"
},
"StringEquals": {
"aws:SourceAccount": "<管理アカウントID>"
}
}
},
{
"Sid": "AllowIdentityStoreToUseTheKMSKey",
"Effect": "Allow",
"Principal": {
"Service": "identitystore.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:ReEncryptTo",
"kms:ReEncryptFrom",
"kms:GenerateDataKeyWithoutPlaintext"
],
"Resource": "*",
"Condition": {
"StringLike": {
"kms:EncryptionContext:aws:identitystore:identitystore-arn": "*"
},
"StringEquals": {
"aws:SourceAccount": "<管理アカウントID>"
}
}
},
{
"Sid": "AllowIAMIdentityCenterAndIdentityStoreToDescribeKMSKey",
"Effect": "Allow",
"Principal": {
"Service": [
"identitystore.amazonaws.com",
"sso.amazonaws.com"
]
},
"Action": "kms:DescribeKey",
"Resource": "*"
}
]
}
なお上記は、「IAM Identity Centerの管理アカウントはAWS 組織管理アカウントのみ」記載していますが、
委任された管理アカウントがある場合はそちらも記載が必要です。
必要な作業について
IAM Identity Centerのマルチリージョン有効化後、追加リージョンでのSSOを機能させるには以下の設定が必要です。
基本的にはACS URLをOkta側の設定で追加するだけで、アクセスはできるようになりました。
| 設定項目 | 設定対象 | 作業内容 |
|---|---|---|
| ACS URLの取得 | IAM Identity Center | Oktaに登録するSAMLエンドポイントの取得 |
| ACS URLの追加 | Okta | 追加リージョンへの直接サインインを有効化 |
| ポータルURLの登録 (任意) |
ブラウザ | 追加リージョンのポータルへのショートカット |
公式ドキュメントだと、「Step 3: Update external IdP setup」が該当します。
設定前の状態
当たり前ですが、設定前はセカンダリリージョンのアクセスポータルURLにアクセスしても、
以下のエラーが出ます。

IAM Identity Center側
ACS URLの取得
マルチリージョン有効化後、各リージョンのACS(Assertion Consumer Service)URLを確認できるようになります。
IAM Identity Centerコンソールのアイデンティティソースのアクションから「認証の管理」を開きます。

「サービスプロバイダーのメタデータ」の「ACSのURLを表示」から確認します。

利用できるACS URLには以下の形式があります。
なおAlternative IPv4形式は2026年2月以降の新規インスタンスでは使用されておらず、非推奨のようです。
| タイプ | プライマリリージョン | 追加リージョン | URL形式 |
|---|---|---|---|
| IPv4 only | ○ | ○ | https://[Region].signin.aws/platform/saml/acs/[Tenant ID] |
| Alternative IPv4 only | ○ | × | https://[Region].signin.aws.amazon.com/platform/saml/acs/[Tenant ID] |
| Dual-stack | ○ | ○ | https://[Region].sso.signin.aws/platform/saml/acs/[Tenant ID] |
ポータルURLの確認
追加リージョンのポータルURLも確認しておきます。
前述の「サービスプロバイダーのメタデータ」の「ポータルURLを表示」から見れます。
またポータルURLの形式もリージョンによって異なり、
追加リージョンではAlternative IPv4またはDual-stack形式のポータルURLのみ使用可能です。
| タイプ | プライマリリージョン | 追加リージョン | URL例 |
|---|---|---|---|
| Classic IPv4 | ○ | × | https://d-12345678.awsapps.com/start |
| Custom alias | ○ | × | https://mycompany.awsapps.com/start |
| Alternative IPv4 | ○ | ○ | https://ssoins-111111h2222j33pp.ap-northeast-1.portal.amazonaws.com |
| Dual-stack | ○ | ○ | https://ssoins-111111h2222j33pp.portal.ap-northeast-1.app.aws |
Okta側
ACS URLの追加
取得したACS URLをOktaに登録します。
Okta管理コンソールからAWS IAM Identity CenterのOktaアプリを開いて、
「Authentication」>「Sign-on settings」>「Sign-on methods」を編集します。
「AWS SSO ACS URL」にはプライマリを登録するので、それ以降の「AWS SSO ACS URL1 ~」にセカンダリを登録すればOKです。
(このタイミングで気づいたんですが、登録できるAWS SSO ACS URLが17まであって驚きました)

動作確認
では実際に動作確認してみます。
セカンダリリージョン(ap-northeast-3)のアクセスポータルURLを開くとまずOktaの認証が挟まり、それが終わるとちゃんとセカンダリ(ap-northeast-3)のアクセスポータルへアクセスできています。

やったぜ。
なお通常アクセスする際の動線であるユーザーアクセスポータルからのログインの場合、

そのままプライマリ(ap-northeast-1)のアクセスポータルにつながります。
どのリージョンにアクセスするか、みたいな選択肢は出てこないようです。

これはOktaで設定するSAML認証の仕組みが関係しているようです。
まずOktaからAWSへのサインイン時、OktaはデフォルトのACS URL(AWS SSO ACS URL)にSAMLアサーションを送信します。
そのため追加リージョンのACS URL(AWS SSO ACS URL1 ~)は、あくまでリクエスト可能なURLであり、デフォルトではありません。
結果として、ユーザーにリージョン選択肢は表示されず、常にプライマリリージョンのポータルに接続されるみたいです。
ポータルURLのブックマーク登録(任意)
前述の通りOktaのAWS IAM Identity Centerアプリでは、ポータルURLを複数設定することはできません。
そのため、追加リージョンのポータルに直接アクセスしたい場合のURLについて、利用者に事前に情報連携しておき、ブックマークに登録しておくのが良さそうです。
これにより、利用者は直接追加リージョンのポータルにアクセスできます。
実際の運用を考えると、どこかの利用者向けのガイドラインやドキュメントに書いておく、とかもでいいかなと思います。
考慮事項:IdP側の障害について
今回のマルチリージョン設定により、IAM Identity Center側のリージョン障害に対する耐障害性は向上しました。
一方で、IdP側(今回であればOkta)の障害については引き続き考慮が必要です。
Oktaの場合は稼働率99.99%を保証しているため、IdP障害のリスクは低いと判断することもできます。
ただし、IdP障害時にもAWSへアクセスできるようにしたい場合は、Break Glass(緊急アクセス)の仕組みを別途検討する必要があります。
さいごに
以上、マルチリージョンのAWS IAM Identity CenterとOktaを連携してシングルサインオンする設定についてまとめました。
Okta側で実施した作業はACS URLを追加しただけだったので、思いの外簡単に作業できました。
また私が検証した限りは既存のシングルサインオンに影響を与えずに設定できたので、導入時も作業調整がしやすそうです。
この記事が誰かのお役に立てば幸いです。






