Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Auth0をIdPに使うAmazon WorkSpacesのSAML認証設定

By Manak WadhwaNov 23, 20236 min read

このページはEnglishDeutschEspañolFrançaisItalianoPortuguêsでもご覧いただけます。

企業では、より安全な認証方法と優れたユーザー体験を両立する手段が求められています。同時に、別のIdentity Provider(IDP)にユーザー資格情報や認可情報を複製することなく、認証・認可を一元管理する仕組みも欠かせません。

本記事では、既存の社内Active Directoryと連携したSAML 2.0プロバイダーとしてAuth0を構成し、シングルサインオン(SSO)でAmazon WorkSpacesをストリーミング配信する方法をご紹介します。

Auth0のID管理プラットフォームは、きめ細かい制御性と高度なセキュリティ、そして使いやすさを兼ね備えています。エンタープライズフェデレーション、ソーシャルサインイン、従来のユーザー名・パスワード認証など、さまざまな方式でSSOを実現できるため、ユーザーは一度サインインするだけで利用可能なすべてのアプリケーションにアクセスできます。

全体アーキテクチャ

今回構築する環境の概要は以下のとおりです。構成をシンプルにするため、すべてを1つのVPC内にまとめています。

  • プライベートサブネット内のドメインコントローラー
  • AD Connectorを使ったAWS Directory Serviceの構成
  • ドメインコントローラーがAuth0と通信できるよう、パブリックサブネットにNATゲートウェイを配置
  • プライベートサブネット内にAmazon WorkSpacesを配置

手順の概要

構成は以下の6ステップで完了します。

  1. Auth0でアプリを作成し、メタデータマニフェストを生成する
  2. AWS Identity and Access Management(IAM)でSAML IDプロバイダーを作成する
  3. SAML 2.0フェデレーション用のIAMロールとIAMポリシーを作成する
  4. Auth0とSAMLアサーションを設定する
  5. WorkSpacesディレクトリでSAML 2.0連携を有効化する
  6. 構成をテストする

前提条件

  • Active Directoryコネクタを設定済みのAuth0アカウント
  • AWS Directory Service向けのActive Directory Connectorが設定済みであること
  • 同じディレクトリ内にプロビジョニング済みのAmazon WorkSpace

ステップ1:Auth0でアプリを作成し、メタデータマニフェストを生成する

  • Auth0のManagement Dashboardにサインインし、新しいApplicationを作成します。
  • Addonsタブで、SAML2 Web Appアドオンを有効にします。

  • SAML2 Web Appを有効にすると表示されるポップアップから、このアドオンを設定します。SettingsタブのApplication Callback URLにhttps://signin.aws.amazon.com/samlを入力し、Settings欄に以下のSAML設定コード(JSON形式)を貼り付けます。
{
 "audience": "https://signin.aws.amazon.com/saml",
 "mappings": {
   "email": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/sAMAccountName",
   "name": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"
 },
 "createUpnClaim": false,
 "passthroughClaimsWithNoMapping": false,
 "mapUnknownClaimsAsIs": false,
 "mapIdentities": false,
 "nameIdentifierFormat": "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent",
 "nameIdentifierProbes": [\
   "http://schemas.auth0.com/sAMAccountName"\
 ]
}

  • 画面下部までスクロールし、Enableをクリックします。
  • Usageタブを開いて、メタデータマニフェストファイルをダウンロードします。このファイルは次のステップで使用します。

  • SAML2 Web Appのウィンドウを閉じてConnectionsをクリックし、Enterpriseの中から該当するActive Directory/LDAPコネクタを選択します。

ステップ2:AWS Identity and Access Management(IAM)でSAML IDプロバイダーを作成する

  • AWSアカウントにサインインし、IAMコンソールを開きます。
  • ナビゲーションペインでIdentity Providersをクリックし、続いてAdd Providerをクリックします。

  • Provider TypeでSAMLを選択し、わかりやすい名前を入力したうえで、必要に応じてタグを追加します。Metadata DocumentでChoose Fileをクリックし、前のステップでダウンロードしたSAMLメタデータドキュメントを指定してOpenをクリックします。完了したら、画面下部のAdd Providerをクリックします。

  • 入力した内容を確認し、Createをクリックします。
  • このプロバイダーのARNはステップ4で必要になるため、控えておいてください。

ステップ3:SAML 2.0フェデレーション用のIAMロールとIAMポリシーを作成する

  • ナビゲーションペインでRolesをクリックし、続いてCreate Roleをクリックします。

  • Role typeでSAML 2.0 federationを選択します。
  • 前のステップで作成したSAMLプロバイダーを選択します。
  • AttributeにSAML:sub_typeを選び、Valueにpersistentと入力します。これにより、値がpersistentのSAMLサブジェクトタイプアサーションを含むSAMLユーザーストリーミングリクエストにのみ、ロールへのアクセスが制限されます。
  • SAML 2.0の信頼情報を確認し、信頼するエンティティと条件が正しいことをチェックしたうえで、Next: Permissionsを選択します。
  • Attach permissions policiesページではNext: Tagsを選択します。
  • 完了したらNext: Reviewを選択します。インラインポリシーは後ほど作成して、このロールに埋め込みます。
  • Role nameには、ロールの目的が一目でわかる名前を入力します。複数のエンティティから参照される可能性があるため、ロール名は作成後に変更できません。
  • (任意)Role descriptionに、新しいロールの説明を入力します。
  • ロールの内容を確認し、Create roleを選択します。
  • 作成したロールを選択し、Trust relationshipsを開いてEdit trust relationshipをクリックします。
  • Actionを更新して、sts:TagSessionを許可します。

ポリシーは以下のようになります。

{
   "Version": "2012-10-17",
   "Statement": [\
      {\
         "Effect": "Allow",\
         "Principal": {\
            "Federated": "arn:aws:iam:::saml-provider/name"\
         },\
         "Action": [\
            "sts:AssumeRoleWithSAML",\
            "sts:TagSession"\
         ],\
         "Condition": {\
            "StringEquals": {\
               "SAML:sub_type": "persistent"\
            }\
         }\
      }\
   ]
}

続いて、作成したロールにインラインポリシーを埋め込みます。

  • 作成したIAMロールを選択し、PermissionsタブでAdd Permissions→Create Inline Policyをクリックします。

  • JSONタブを選び、以下のポリシーを貼り付けます。regionAccount IDdirectory IDはご自身の環境に合わせて書き換えてください。
{
   "Version": "2012-10-17",
   "Statement": [\
       {\
           "Effect": "Allow",\
           "Action": "workspaces:Stream",\
           "Resource": "arn:aws:workspaces:<region>:<account-id>:directory/<directory-id>",\
           "Condition": {\
               "StringEquals": {\
                   "workspaces:userId": "${saml:sub}"\
               }\
           }\
       }\
   ]
}

region、account ID、directory IDの書き換えを忘れないようにしてください。

  • 完了したらNextをクリックし、ポリシー名を入力してCreate Policyをクリックします。

ステップ4:Auth0とSAMLアサーションを設定する

  • Auth0のManagement Dashboardにサインインし、Actions→Library→Build Customに進みます。
  • 名前を入力し、TriggerはLogin/Post Login、RuntimeはNode 18のままにしてCreateをクリックします。

  • 次の画面で以下のコードをコピー&ペーストし、Deployをクリックします。
exports.onExecutePostLogin = async (event, api) => {
  if (event.client.name === "APP_NAME") {
    const awsRole = 'IAM_arn,saml_provider_arn';
    const awsRoleSession = event.user.sAMAccountName;
    const email = event.user.emails[0];
    api.samlResponse.setDestination('https://signin.aws.amazon.com/saml');
    api.samlResponse.setAttribute('https://aws.amazon.com/SAML/Attributes/Role', awsRole)
    api.samlResponse.setAttribute('https://aws.amazon.com/SAML/Attributes/RoleSessionName', awsRoleSession)
    api.samlResponse.setAttribute('https://aws.amazon.com/SAML/Attributes/PrincipalTag:Email', email)
}
return;
};

App_Nameは、ステップ1で作成したAuth0アプリの名前に置き換えてください。さらに、IAM_arnをステップ3で作成したIAMロールのARNに、saml_provider_arnをステップ2で作成したSAMLプロバイダーのARNに置き換えます。

  • 完了したらActions→Library→Flowsに進み、Loginをクリックします。
  • 右側のペインのAdd Actionの下にあるCustomをクリックし、作成したアクションをStartとCompleteの間に配置します。

  • Applyをクリックします。

ステップ5:WorkSpacesディレクトリでSAML 2.0連携を有効化する

構成を仕上げる最後のステップです。

  • AWSマネジメントコンソールにサインインし、WorkSpaces→Directoriesに進みます。
  • WorkSpacesで使用しているディレクトリをクリックします。
  • Edit Authenticationをクリックします。

  • 認証編集画面でEdit SAML 2.0 Identity Providerをクリックします。

  • Enable SAML 2.0 Authenticationをクリックし、User Access URLにIDプロバイダーのログインURLを入力します。IdP deep link parameter nameは「RelayState」のままで構いません。

ステップ6:構成をテストする

  • Amazon WorkSpacesクライアントを起動し、登録コードを入力して構成をテストします。以下のような画面が表示されるはずです。

  • ContinueをクリックしてWorkSpacesにサインインすると、以下のようなIDPのサインインページにリダイレクトされます。

  • ADのユーザー名とパスワードでサインインします。認証に成功すると、以下のような画面が表示されます。

  • Open Workspacesをクリックすると、ユーザー名が入力済みのサインイン画面が表示されます。

  • パスワードを入力すると、WorkSpaceの起動が始まります。

  • WorkSpaceが起動すると、デスクトップが読み込まれます。