組織のAWS環境が成長すると、複数のAWSアカウントを管理する必要が生じます。本記事では、AWS IAM Identity Center(旧AWS SSO)を使用して、複数のAWSアカウントへのシングルサインオン(SSO)を実現する方法を解説します。IAMユーザーを各アカウントに個別に作成する煩雑さから解放され、一元的なID管理を実現しましょう。

IAM Identity Centerとは

IAM Identity Centerは、AWSアカウントおよびクラウドアプリケーションへのシングルサインオン(SSO)アクセスを一元管理するサービスです。2022年7月にAWS Single Sign-On(AWS SSO)から名称が変更されました。

IAM Identity Centerの主要機能

IAM Identity Centerは、以下の機能を提供します。

mindmap
  root((IAM Identity Center))
    IDソース管理
      組み込みディレクトリ
      Active Directory連携
      外部IdP連携(SAML/SCIM)
    AWSアカウントへのアクセス
      Organizations連携
      権限セット管理
      一時的な認証情報
    アプリケーションアクセス
      SAML 2.0アプリ
      OAuth 2.0アプリ
      カスタムアプリケーション
    開発者ツール連携
      AWS CLI v2
      AWS SDK
      AWS Console Mobile App
機能カテゴリ 説明
IDソース管理 ユーザーとグループの作成・管理、外部IdPとの連携
AWSアカウントアクセス AWS Organizations内のアカウントへのアクセス権限管理
アプリケーションアクセス SAML 2.0/OAuth 2.0対応のビジネスアプリへのSSO
開発者ツール連携 AWS CLI v2やSDKでの一時認証情報の取得

従来のIAMユーザー管理との違い

複数アカウント環境において、従来のIAMユーザー管理とIAM Identity Centerでは、運用負荷とセキュリティに大きな違いがあります。

flowchart TB
    subgraph "従来のIAMユーザー管理"
        U1[ユーザーA]
        A1[アカウント1<br/>IAMユーザー]
        A2[アカウント2<br/>IAMユーザー]
        A3[アカウント3<br/>IAMユーザー]
        U1 --> A1
        U1 --> A2
        U1 --> A3
    end
    
    subgraph "IAM Identity Center"
        U2[ユーザーA]
        IC[IAM Identity Center<br/>一元管理]
        B1[アカウント1]
        B2[アカウント2]
        B3[アカウント3]
        U2 --> IC
        IC --> B1
        IC --> B2
        IC --> B3
    end
比較項目 従来のIAMユーザー IAM Identity Center
ユーザー管理 アカウントごとに個別作成 一元的に管理
認証情報 長期的(アクセスキー、パスワード) 一時的(セッション認証情報)
パスワード管理 アカウントごとに異なる 単一のパスワードでSSO
MFA設定 アカウントごとに設定 一度の設定で全アカウントに適用
アクセス権限変更 アカウントごとに操作 一括で変更可能
退職時の対応 全アカウントから削除 一箇所で無効化
料金 無料 無料

IAM Identity Centerを使用するメリット

IAM Identity Centerを導入することで、以下のメリットが得られます。

セキュリティの向上

ユーザーは一時的な認証情報を使用してAWSアカウントにアクセスします。長期的なアクセスキーを各アカウントに保存する必要がないため、認証情報漏洩のリスクが大幅に低減します。また、MFAを一元的に管理でき、すべてのアカウントアクセスに適用できます。

運用効率の改善

ユーザーの追加・削除・権限変更を一箇所で行えます。従業員の入社・退職時の対応が迅速になり、アカウント数が増えても管理コストは増加しません。

ユーザー体験の向上

ユーザーは単一のポータルサイトにログインするだけで、割り当てられたすべてのAWSアカウントにアクセスできます。アカウントごとに異なる認証情報を記憶する必要がありません。

コンプライアンス対応

アクセス履歴がCloudTrailに一元的に記録されます。誰がいつどのアカウントにアクセスしたかを容易に追跡でき、監査対応が効率化します。

IAM Identity Centerの前提条件

IAM Identity Centerを使用するには、以下の前提条件を満たす必要があります。

AWS Organizationsの有効化

IAM Identity Centerは、AWS Organizationsと連携して動作します。組織の管理アカウントでOrganizationsを有効化し、「すべての機能」を有効にする必要があります。

flowchart LR
    subgraph "AWS Organizations"
        MA[管理アカウント<br/>IAM Identity Center有効化]
        
        subgraph "組織単位(OU)"
            M1[メンバーアカウント1]
            M2[メンバーアカウント2]
            M3[メンバーアカウント3]
        end
    end
    
    MA --> M1
    MA --> M2
    MA --> M3

リージョンの選択

IAM Identity Centerは、有効化時に選択したリージョンにデータを保存します。一度選択したリージョンは変更できないため、慎重に選択してください。日本国内での利用が中心の場合は、東京リージョン(ap-northeast-1)を選択することを推奨します。

委任管理者の設定(オプション)

デフォルトでは、IAM Identity Centerは管理アカウントで管理します。ただし、管理アカウントの使用を最小限に抑えるベストプラクティスに従い、メンバーアカウントを委任管理者として指定することも可能です。

IAM Identity Centerのセットアップ

IAM Identity Centerをセットアップする手順を解説します。

ステップ1: IAM Identity Centerの有効化

管理アカウントのAWSマネジメントコンソールから、IAM Identity Centerを有効化します。

  1. AWSマネジメントコンソールにサインイン
  2. サービス検索で「IAM Identity Center」を検索して選択
  3. 「IAM Identity Centerを有効にする」をクリック
  4. リージョンを確認し、「有効化」をクリック

有効化が完了すると、IAM Identity Centerのダッシュボードが表示されます。

ステップ2: IDソースの設定

IAM Identity Centerでは、ユーザーとグループの管理方法として3つのオプションから選択できます。

IDソース 説明 推奨ユースケース
Identity Centerディレクトリ IAM Identity Center組み込みのディレクトリ 小規模組織、検証環境
Active Directory AWS Directory Service経由でのAD連携 オンプレミスAD利用組織
外部IDプロバイダー Okta、Azure AD等とのSAML/SCIM連携 既存IdP利用組織

本記事では、最もシンプルな「Identity Centerディレクトリ」を使用した手順を解説します。Identity Centerディレクトリはデフォルトで設定されているため、追加の設定は不要です。

ステップ3: ユーザーの作成

IAM Identity Centerでユーザーを作成します。

  1. 左メニューから「ユーザー」を選択
  2. 「ユーザーを追加」をクリック
  3. ユーザー情報を入力

入力項目は以下の通りです。

項目 説明 必須
ユーザー名 サインインに使用する一意の識別子 必須
パスワード 初期パスワードの設定方法を選択 必須
Eメールアドレス パスワードリセット等に使用 必須
ユーザーの名 必須
ユーザーの姓 必須
表示名 コンソールに表示される名前 任意
  1. 「次へ」をクリックしてグループへの追加を設定(後でも可能)
  2. 「ユーザーを追加」をクリック

ユーザーが作成されると、指定したEメールアドレスに招待メールが送信されます。ユーザーはメール内のリンクからパスワードを設定し、ポータルにアクセスできるようになります。

ステップ4: グループの作成

効率的な権限管理のために、グループを作成してユーザーを整理します。

  1. 左メニューから「グループ」を選択
  2. 「グループを作成」をクリック
  3. グループ名と説明を入力
  4. グループに追加するユーザーを選択(後でも可能)
  5. 「グループを作成」をクリック

推奨されるグループ構成の例を示します。

graph TB
    subgraph "グループ構成例"
        Admins[Administrators<br/>管理者グループ]
        Devs[Developers<br/>開発者グループ]
        Ops[Operations<br/>運用者グループ]
        RO[ReadOnly<br/>閲覧専用グループ]
    end
グループ名 用途 想定メンバー
Administrators 全アカウントの管理者権限 クラウド管理者
Developers 開発アカウントの開発者権限 開発チーム
Operations 本番アカウントの運用権限 運用チーム
ReadOnly 全アカウントの閲覧権限 監査担当者

権限セットの設定

権限セットは、AWSアカウントにアクセスする際にユーザーに付与される権限を定義します。

権限セットとは

権限セットは、1つ以上のIAMポリシーのコレクションです。ユーザーまたはグループをAWSアカウントに割り当てる際に、権限セットを指定します。IAM Identity Centerは、権限セットに基づいてIAMロールを各アカウントに自動作成します。

flowchart LR
    PS[権限セット<br/>Permission Set]
    
    subgraph "アカウント1"
        R1[IAMロール<br/>自動作成]
    end
    
    subgraph "アカウント2"
        R2[IAMロール<br/>自動作成]
    end
    
    subgraph "アカウント3"
        R3[IAMロール<br/>自動作成]
    end
    
    PS --> R1
    PS --> R2
    PS --> R3

権限セットの作成

権限セットを作成する手順を解説します。

  1. 左メニューから「権限セット」を選択
  2. 「権限セットを作成」をクリック
  3. 権限セットのタイプを選択

事前定義された権限セット

AWSが提供する事前定義された権限セットを使用できます。代表的なものを以下に示します。

権限セット名 説明
AdministratorAccess AWS全サービスへのフルアクセス
PowerUserAccess IAM以外のサービスへのフルアクセス
ViewOnlyAccess すべてのリソースの読み取り専用アクセス
ReadOnlyAccess ほとんどのサービスの読み取り専用アクセス
Billing 請求情報へのアクセス

カスタム権限セット

組織固有の要件に合わせて、カスタム権限セットを作成することも可能です。

  1. 「カスタム権限セット」を選択
  2. 権限セット名と説明を入力
  3. ポリシーのアタッチ方法を選択

ポリシーのアタッチ方法は以下の3つから選択できます。

方法 説明
AWS管理ポリシー AWSが提供する管理ポリシーをアタッチ
カスタマー管理ポリシー 各アカウントで事前に作成したポリシーを参照
インラインポリシー 権限セット内にJSONポリシーを直接記述

インラインポリシーの例を示します。開発者向けにEC2とS3の操作を許可し、本番環境のタグが付いたリソースへのアクセスを制限するポリシーです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowEC2AndS3",
            "Effect": "Allow",
            "Action": [
                "ec2:*",
                "s3:*"
            ],
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "aws:ResourceTag/Environment": "production"
                }
            }
        },
        {
            "Sid": "AllowDescribeActions",
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*",
                "s3:List*",
                "s3:GetBucket*"
            ],
            "Resource": "*"
        }
    ]
}
  1. セッション期間を設定(デフォルト1時間、最大12時間)
  2. 「作成」をクリック

セッション期間の考慮事項

セッション期間は、ユーザーがAWSアカウントにアクセスできる時間を定義します。セキュリティと利便性のバランスを考慮して設定してください。

期間 推奨ユースケース
1時間 高セキュリティ環境、特権アクセス
4時間 一般的な開発作業
8時間 長時間の運用作業
12時間 長期間のジョブ実行(最大値)

AWSアカウントへのアクセス割り当て

ユーザー(またはグループ)、AWSアカウント、権限セットの3つを組み合わせて、アクセス権限を割り当てます。

アクセス割り当ての仕組み

flowchart LR
    subgraph "割り当て"
        UG[ユーザー/グループ]
        PS[権限セット]
        ACC[AWSアカウント]
    end
    
    UG --> ASSIGN[アクセス割り当て]
    PS --> ASSIGN
    ACC --> ASSIGN
    
    ASSIGN --> ROLE[IAMロール自動作成]

アクセスの割り当て手順

  1. 左メニューから「AWSアカウント」を選択
  2. アクセスを割り当てるアカウントを選択(複数選択可能)
  3. 「ユーザーまたはグループを割り当て」をクリック
  4. 割り当てるユーザーまたはグループを選択
  5. 「次へ」をクリック
  6. 適用する権限セットを選択
  7. 「送信」をクリック

割り当てが完了すると、IAM Identity Centerは選択したアカウントにIAMロールを自動作成します。ロール名は AWSReservedSSO_{権限セット名}_{ランダムID} の形式になります。

割り当ての例

以下は、組織における典型的なアクセス割り当ての例です。

グループ アカウント 権限セット
Administrators 管理アカウント AdministratorAccess
Administrators 本番アカウント AdministratorAccess
Administrators 開発アカウント AdministratorAccess
Developers 開発アカウント PowerUserAccess
Developers 本番アカウント ViewOnlyAccess
Operations 本番アカウント PowerUserAccess
Operations 開発アカウント ViewOnlyAccess

アクセスポータルの利用

ユーザーは、IAM Identity Centerが提供するアクセスポータルを通じて、割り当てられたAWSアカウントにアクセスします。

アクセスポータルURL

アクセスポータルのURLは、IAM Identity Center有効化時に自動生成されます。形式は以下の通りです。

https://{instance-id}.awsapps.com/start

このURLはカスタマイズ可能です。「設定」>「IDソース」タブから、アクセスポータルURLをカスタマイズできます。

アクセスポータルからのサインイン

  1. アクセスポータルURLにアクセス
  2. ユーザー名とパスワードを入力
  3. MFAが設定されている場合は、認証コードを入力
  4. 割り当てられたAWSアカウントの一覧が表示される
  5. アクセスしたいアカウントを選択
  6. 権限セットを選択して「Management Console」をクリック
sequenceDiagram
    participant User as ユーザー
    participant Portal as アクセスポータル
    participant IdC as IAM Identity Center
    participant Console as AWSコンソール
    
    User->>Portal: ポータルURLにアクセス
    Portal->>User: ログイン画面表示
    User->>Portal: 認証情報入力
    Portal->>IdC: 認証リクエスト
    IdC->>Portal: 認証成功
    Portal->>User: アカウント一覧表示
    User->>Portal: アカウント/権限セット選択
    Portal->>IdC: 一時認証情報リクエスト
    IdC->>Portal: 一時認証情報発行
    Portal->>Console: 認証情報でリダイレクト
    Console->>User: マネジメントコンソール表示

AWS CLIでのSSO利用

IAM Identity Centerを使用すると、AWS CLI v2でも一時認証情報を簡単に取得できます。

AWS CLI v2の設定

AWS CLI v2には、IAM Identity Centerとの統合機能が組み込まれています。aws configure ssoコマンドを使用して設定します。

1
aws configure sso

対話形式で以下の情報を入力します。

SSO session name (Recommended): my-sso
SSO start URL [None]: https://d-1234567890.awsapps.com/start
SSO region [None]: ap-northeast-1
SSO registration scopes [sso:account:access]:

ブラウザが自動的に開き、認証を求められます。認証が完了すると、CLIに戻り続きの設定を行います。

Attempting to automatically open the SSO authorization page in your default browser.
If the browser does not open or you wish to use a different device to authorize this request, open the following URL:

https://device.sso.ap-northeast-1.amazonaws.com/

Then enter the code: ABCD-EFGH

認証後、利用可能なアカウントと権限セットが表示されます。

There are 3 AWS accounts available to you.
> Production, production@example.com (123456789012)
  Development, development@example.com (234567890123)
  Staging, staging@example.com (345678901234)

アカウントと権限セットを選択すると、プロファイルの設定が完了します。

CLI default client Region [None]: ap-northeast-1
CLI default output format [None]: json
CLI profile name [PowerUserAccess-123456789012]: production

To use this profile, specify the profile name using --profile, as shown:

aws s3 ls --profile production

設定ファイルの確認

設定は ~/.aws/config ファイルに保存されます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[profile production]
sso_session = my-sso
sso_account_id = 123456789012
sso_role_name = PowerUserAccess
region = ap-northeast-1
output = json

[sso-session my-sso]
sso_start_url = https://d-1234567890.awsapps.com/start
sso_region = ap-northeast-1
sso_registration_scopes = sso:account:access

SSOでのログイン

設定済みのプロファイルを使用してAWS CLIを実行する際は、最初にログインが必要です。

1
aws sso login --profile production

ブラウザが開き、認証を行います。認証が完了すると、CLIコマンドが実行可能になります。

1
aws s3 ls --profile production

セッションの確認と更新

現在のセッション状態を確認するには、以下のコマンドを使用します。

1
aws sts get-caller-identity --profile production

出力例は以下の通りです。

1
2
3
4
5
{
    "UserId": "AROA1234567890EXAMPLE:user@example.com",
    "Account": "123456789012",
    "Arn": "arn:aws:sts::123456789012:assumed-role/AWSReservedSSO_PowerUserAccess_a1b2c3d4e5f6g7h8/user@example.com"
}

セッションが期限切れの場合は、再度 aws sso login を実行します。

複数プロファイルの管理

複数のアカウントや権限セットを使い分ける場合は、複数のプロファイルを設定します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[profile production]
sso_session = my-sso
sso_account_id = 123456789012
sso_role_name = PowerUserAccess
region = ap-northeast-1

[profile development]
sso_session = my-sso
sso_account_id = 234567890123
sso_role_name = AdministratorAccess
region = ap-northeast-1

[sso-session my-sso]
sso_start_url = https://d-1234567890.awsapps.com/start
sso_region = ap-northeast-1
sso_registration_scopes = sso:account:access

同一のSSOセッションを共有することで、一度のログインで複数のプロファイルが使用可能になります。

MFAの設定

IAM Identity Centerでは、すべてのユーザーにMFAを強制することを推奨します。

MFAの設定手順

  1. 左メニューから「設定」を選択
  2. 「認証」タブを選択
  3. 「MFA」セクションで「設定」をクリック

MFAの設定オプション

設定項目 説明
MFAのプロンプト サインイン時のMFA要求タイミング
ユーザーが登録できるMFAタイプ 許可するMFAデバイスの種類
MFAデバイスが登録されていない場合 未登録時の動作

MFAのプロンプト設定として、以下のオプションがあります。

オプション 説明
サインインごと 毎回MFAを要求(最も安全)
コンテキストを考慮 リスクベース認証

MFAデバイスが登録されていない場合の設定として、以下のオプションがあります。

オプション 説明
サインイン時にMFAデバイスの登録を要求 初回サインイン時に登録を強制
MFAなしでサインインをブロック MFA未登録ユーザーはサインイン不可
MFAなしでサインインを許可 セキュリティリスクがあるため非推奨

推奨設定

本番環境では、以下の設定を推奨します。

  • MFAのプロンプト: サインインごと
  • ユーザーが登録できるMFAタイプ: すべて許可
  • MFAデバイスが登録されていない場合: サインイン時にMFAデバイスの登録を要求

IAM Identity Centerの監視とログ

IAM Identity Centerの操作は、CloudTrailに記録されます。

CloudTrailでの監視

IAM Identity Centerに関連するイベントは、以下のイベント名でCloudTrailに記録されます。

イベント名 説明
Authenticate ユーザー認証
Federate AWSアカウントへのフェデレーション
CreateUser ユーザー作成
DeleteUser ユーザー削除
CreatePermissionSet 権限セット作成
CreateAccountAssignment アクセス割り当て作成

監査用のCloudWatch Logs Insightsクエリ

特定ユーザーのサインイン履歴を検索するクエリ例を示します。

fields @timestamp, eventName, userIdentity.userName, sourceIPAddress
| filter eventSource = 'sso.amazonaws.com'
| filter eventName = 'Authenticate'
| filter userIdentity.userName = 'target-user@example.com'
| sort @timestamp desc
| limit 100

トラブルシューティング

IAM Identity Centerの利用時によくある問題と解決方法を紹介します。

アクセスポータルにサインインできない

原因 解決方法
パスワードが間違っている パスワードリセットを実行
ユーザーが無効化されている 管理者がユーザーを有効化
MFAデバイスの問題 MFAデバイスをリセット

AWSアカウントが表示されない

原因 解決方法
アクセス割り当てがない 管理者がアクセスを割り当て
アカウントがOrganizationsに参加していない アカウントを招待して参加
権限セットのプロビジョニング失敗 権限セットを再プロビジョニング

AWS CLIでエラーが発生する

エラー 原因 解決方法
Token has expired セッション期限切れ aws sso login を再実行
InvalidGrant 認証情報の問題 ~/.aws/sso/cache を削除して再ログイン
Profile not found プロファイル設定なし aws configure sso で設定

まとめ

本記事では、AWS IAM Identity Centerを使用して複数AWSアカウントへのシングルサインオンを実現する方法を解説しました。

  • IAM Identity Centerは、複数AWSアカウントへのアクセスを一元管理するサービスです
  • 従来のIAMユーザー管理と比較して、セキュリティと運用効率が大幅に向上します
  • 権限セットによって、ユーザーに付与する権限を柔軟に定義できます
  • アクセスポータルとAWS CLI v2の両方でSSOが利用可能です
  • MFAを全ユーザーに適用することで、セキュリティをさらに強化できます

次回の記事では、IAM Identity Centerの権限セット設計とベストプラクティスについて、より詳細に解説します。

参考リンク