DevelopersIO 2023 大阪 – 勉強会「AWS IAM Identity Centerを用いたAWSアクセス」 #devio2023

2023.07.19

DevelopersIO 2023 大阪の AWS 質問ブース の勉強会「AWS IAM Identity Centerを用いたAWSアクセス」のブログです。

AWS IAM Identity Center を利用して AWS アカウントにアクセスする方法についてご紹介します。

AWS IAM Identity Center の概要

AWS アカウントやクラウドアプリケーションへのアクセスを一元管理できる AWS IAM Identity Center の全体イメージを紹介します。

IAM Identity Center はユーザーの認証情報をローカル(IAM Identity Center 自信)で保持する他、外部 ID プロバイダーや Active Directory の認証情報を利用することもできます。ただし、認証情報を管理する場所はいずれか一箇所です。AWS アカウントやクラウドアプリケーションへのアクセスは AWS アクセスポータル経由で実施します。

今回のブログでは、次の内容を説明します。

  • AWS アカウントへのアクセス方法(下図の朱四角)
    • AWS Organizations 管理のアカウントへのアクセス
    • AWS Organizations 管理外のアカウントへのアクセス

IAM Identity Center は多くの場合、AWS Organizations 配下のアカウントに対するアクセスに利用しますが、IAM Identity Center を利用している AWS Organizations 組織外のアカウントへのアクセス設定も可能なため、両方の方法を紹介します。

Organizations 管理アカウントへのアクセス

AWS アカウントへのアクセス権を設定したユーザーは、AWS アクセスポータルで下図のように見えます。アカウント毎に権限を選択してマネジメントコンソールにアクセスします。

AWS CLI でアクセスするための一時的な認証情報を取得することもできます。

AWS アカウントへのアクセス設定には、大きく「AWS アカウント」「ユーザー・グループ」「アクセス許可セット(権限)」の 3 つの要素があります。アクセスさせたい AWS アカウントに対して、どのユーザー・グループにどのような権限を与えるか、の設定をします。


AWS アカウントへのアクセス設定

開発者用のユーザーグループDevelopersと運用者用のグループOperatorsが存在する前提で、AWS アカウント111122223333に権限を与える例で説明します。

まずは、Developersグループに対してAdministratorAccess権限とReedOnlyAccess権限の付与を設定します。

始めに、権限の設定であるアクセス許可セットを作成します。

IAM Identity Center の「許可セット」メニューから作成します。

AdministratorAccess権限は事前定義で用意されているため、今回は事前定義された許可セットを利用します。

アクセス許可セット名や説明、セッション時間、リレー状態を入力します。セッション時間はログオン状態を維持できる時間です。リレー状態とはアクセスした際に最初に表示するページを指定する設定です。例えば、最初に東京リージョンのホーム画面を表示させたい場合は次の URL を指定します。

https://ap-northeast-1.console.aws.amazon.com/console/home

最後に確認して作成すれば、アクセス許可セットの作成は完了です。

同じ要領でReadOnlyAccess権限を持つアクセス許可セットも作成します。


次に、AWS アカウントに対してグループとアクセス許可セットを関連付けます。

IAM Identity Center の AWS アカウントメニューからアクセスさせたいアカウントを選択して「ユーザーまたはグループを割り当て」を選択します。

アクセスさせるグループ(またはユーザー)を選択します。グループを選択しておくことで、グループにユーザーが追加された場合に自動でアクセス許可セットが関連付けできます。

関連付けるアクセス許可セットを選択します。一度に複数選択できます。

最後に確認して作成すれば、AWS アカウントへのグループとアクセス許可セットの関連付けが完了です。


アクセス許可を与えたユーザーで AWS アクセスポータルにサインインすると、AWS アカウントにアクセスできることが確認できます。

マネジメントコンソールへアクセスできる他、「Command line or programmatic access」から AWS CLI を利用できる一時的な認証情報を取得することもできます。

なお、AWS アクセスポータルの URL は「設定」から確認できます。一度きりですが、ID ストア ID(d-xxxxxxxx)の代わりにグローバルで一意な任意の文字列を割り当てることもできます。

AWS アカウントへの追加のアクセス設定

ここからさらに、Operatorsグループに対するアクセス許可セットの関連付けを設定します。アクセス許可セットは流用できるため、ReadOnlyAccessOperatorsグループに関連付けることもできます。

新しいアクセス許可セットOperationAccessを作成します。

今回は事前定義ではなく、ユーザーが自由に定義できるカスタム許可セットで作成してみます。

カスタム許可ポリシーでは次のポリシーおよび許可の境界が設定できます。

  • AWS マネージドポリシー
  • カスタマーマネージドポリシー
  • インラインポリシー
  • 許可の境界(Permissions Boundary)

例として、EC2 の起動・停止ができるポリシーをインラインポリシーで設定してみます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "ec2:DescribeInstances",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeSecurityGroupReferences",
        "ec2:DescribeStaleSecurityGroups"
      ],
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Action": [
        "ec2:StartInstances",
        "ec2:StopInstances"
      ],
      "Resource": "*",
      "Effect": "Allow"
    }
  ]
}


IAM Identity Center の裏の仕組みとして、アクセス先の AWS アカウントに IAM ロールを作成し、アクセス時はそのロールの権限で操作します。そのため、上記 4 つの項目は IAM ロールにアタッチする IAM ポリシーと同義となります。

注意する点として、「カスタマーマネージドポリシー」を指定する場合は事前にアクセス先のアカウントに IAM ポリシーを作成しておくことが必要な点があります。AWS マネージドポリシーは各アカウントに最初から存在しているので作成する必要はありません。また、インラインポリシーは IAM Identity Center 側で設定したポリシーがアクセス先のアカウントで作成されるため、アクセス先アカウントでの事前作業は必要ありません。

アクセス許可セット名や説明、セッション時間、リレー状態を入力します。

https://ap-northeast-1.console.aws.amazon.com/console/home

最後に確認して作成すれば、アクセス許可セットの作成は完了です。


後は、Developersグループのとき同様にOperatorsグループに対しても AWS アカウントへのアクセス許可セットの関連付けを設定すれば完了です。


なお、今回の例では EC2 インスタンスの起動・停止ができる対象を全てのインスタンスとしていますが、特定のインスタンスのみを指定することもできます。次のユーザーガイドのページに例があります。

Amazon EC2: EC2 インスタンスの起動または停止、およびセキュリティグループの変更を、プログラムによりコンソールで許可する - AWS Identity and Access Management


最後に参考情報です。IAM Identity Center という名前になる前の AWS Single Sign-On 時代のブログですが、次のブログが AWS アカウントへのアクセス権の設定の説明として分かりやすいです。ブログ中のアクセス権限セットとは、アクセス許可セットの旧名です。

Organizations 管理外アカウントへのアクセス

AWS アカウントアクセスは AWS Organizations と AWS IAM Identity Center の機能が統合された機能の設定とは別に、個別にクラウドアプリケーションへのアクセスの設定もできます。そのクラウドアプリケーションの一つとして AWS アカウントを設定できるため、AWS Organizations 管理外のアカウントへのアクセス設定もできます。

次の手順で作成します。

  1. AWS IAM Identity Center でアプリケーションを作成
  2. アクセス先アカウントで IAM ID プロバイダ を作成
  3. アクセス先アカウントで IAM ロールを作成
  4. AWS IAM Identity Center で属性マッピングの編集
  5. AWS IAM Identity Center でアクセスするユーザー・グループを割り当て

手順は次のページでも紹介されています。

AWS IAM Identity Center (successor to AWS SSO) Integration Guide for External AWS Account


IAM Identity Center でアプリケーション作成

IAM Identity Center のアプリケーションメニューにおいて「アプリケーションを追加」を選択します。IAM Identity Center 経由でアクセスする外部のクラウドアプリケーションの設定をする機能です。

アプリケーションを検索して「External AWS Account」を選択して「次」を実行します。

表示名と説明を入力して「AWS IAM Identity Center SAML メタデータファイル」をダウンロードします。後でアクセス先アカウントの設定で使用します。

「送信」を実行して、AWS IAM Identity Center の設定は一旦終わりです。


アクセス先アカウントで ID プロバイダ を作成

IAM の ID プロバイダメニューから「プロバイダを追加」を選択します。 ID プロバイダとは、AWS の外部で管理しているユーザー ID に対して AWS リソースにアクセスするアクセス許可を与える機能です。IAM Identity Center を外部のユーザー ID をみなして設定します。また、アクセス許可の内容は IAM ロールを割り当てることで指定します。

プロバイダ名を入力して「ファイルを選択」から先ほど AWS IAM Identity Center でダウンロードした「AWS IAM Identity Center SAML メタデータファイル」をアップロードします。その後、「プロバイダを追加」を選択して作成します。下記の例では、プロバイダ名は「AWS_IAM_Identity_Center」としていますが、1 つのアカウントに対して複数の権限を与える予定の場合は、権限の識別子を付けておくと分かりやすいです。権限の数だけ ID プロバイダを作成する必要があるためです。


アクセス先アカウントで IAM ロールを作成

作成した ID プロバイダを選択します。外部のユーザー ID に与えるアクセス許可の内容は IAM ロールを割り当てることで指定します。

「ロールの割り当て」を選択します。

ここからは IAM ロールを作成します。IAM ロール の画面から作成画面に遷移することもできます。

SAML プロバイダーとして先ほど作成した ID プロバイダを指定します。

今回の例では AdministratorAccess ポリシーをアタッチします。

ロール名と説明を入力して作成します。

以上で IAM ロールの作成は完了です

後の IAM Identity Center の設定で利用するため、作成した ID プロバイダの ARN と IAM ロールの ARN を控えておきます。


IAM Identity Center で属性マッピングの編集

IAM Identity Center の設定に戻ります。

作成したアプリケーションにおいて「属性マッピングを編集」を選択します。属性マッピングの設定により、アクセス先アカウントで利用する ID プロバイダと IAM ロールを指定します。

次の属性マッピングを設定します。

アプリケーションのユーザー属性 この文字列値または IAM Identity Center のユーザー属性にマッピング 形式
https://aws.amazon.com/SAML/Attributes/Role arn:aws:iam::ACCOUNTID:saml-provider/SAMLPROVIDERNAME,arn:aws:iam::ACCOUNTID:role/ROLENAME unspecified

今回の例では下記です(アカウント ID は例示の値にしています)。ID プロバイダの ARN と IAM ロールの ARN をカンマ区切りで入力します。

arn:aws:iam::111122223333:saml-provider/AWS_IAM_Identity_Center,arn:aws:iam::111122223333:role/aws-idc-admin-role

設定画面です。


IAM Identity Center でユーザーを割り当て

作成したアプリケーションにアクセスできるユーザーを定義します。

「ユーザーを割り当て」を選択します。

今回の例ではDevelopersグループに割り当てます。「ユーザーを割り当て」を実行すれば完了です。

アプリケーションにアクセスできるユーザー・グループに追加されました。


AWS アクセスポータルから確認

Developersグループに所属しているユーザーで AWS アクセスポータルにアクセスしたところ、先ほど設定したアプリケーション(AWS アカウント)が追加されています。

AWS Organizations 管理下のアカウントの設定と異なり、権限を選択することなくアクセス先アカウントのマネジメントコンソールが表示されます。AWS CLI に利用できる一時的な認証情報もありません。

同じ要領で 2 つ目の ID プロバイダ・IAM ロールを作成することで同じアカウントに対するアクセス権限を追加できます。下記は ReadOnlyAccess 権限を追加した例です。

以上で、AWS Organizations 管理外のアカウントへのアクセス設定は終わりです。

参考情報

これまで紹介した機能以外にもよく利用する機能や最近公開された一時的なアクセス許可を与える仕組みを提供する OSS を紹介したいと思います。

外部 ID プロバイダーとの連携

AWS IAM Identity Center は SAML 2.0 に対応している ID 製品と認証連携できます。

その中でも次の製品はユーザー属性情報の SCIM による自動同期に対応しています。

  • Azure AD
  • CyberArk
  • Google Workspace
  • JumpCloud
  • Okta
  • OneLogin
  • Ping Identity

引用元:サポートされている ID プロバイダー - AWS IAM Identity Center (successor to AWS Single Sign-On)

例えば、Azure AD との連携設定は次のブログで紹介されています。

一時的な権限を付与するソリューション(OSS)

ID 管理をしていると、AdministratorAccess のような強い権限や更新権限をアタッチは承認制や時間制限付きで利用したい場合があります。一時的な権限を付与するソリューションとして OSS (Open Source Software) として、Temporary Elevated Access Management (TEAM) が公開されています。

例えば、下記のような運用ができます。

  1. 利用者が AdministratorAccess 権限の利用を申請
  2. 承認者が申請を承認 a. 利用者に対して一時的に AdministratorAccess 権限をアタッチ
  3. 利用者が作業

次のブログで TEAM が紹介されています。

さいごに

AWS IAM Identity Center を用いて AWS アカウントにアクセスする方法について紹介しました。

AWS IAM Identity Center は、AWS Organizations 環境を利用している場合は、是非利用したいサービスです。本ブログが AWS IAM Identity Center の利用を検討している方のご参考になれば幸いです。