このトピックでは、AD FS から Alibaba Cloud へのロールベースシングルサインオン (SSO) を実装する方法の例を示し、企業 ID プロバイダー (IdP) から Alibaba Cloud へのエンドツーエンドの ID SSO プロセスについて詳しく説明します。

シナリオ

Active Directory (AD) を使用してユーザーを管理し、AD FS を使用して Alibaba Cloud などの企業アプリケーションを設定します。 AD 管理者は、ユーザーの AD グループに従って、Alibaba Cloud アカウントのアクセス権限を管理します。 この例では、2 つの Alibaba Cloud アカウント (Account1 と Account2) があり、AD 管理者によって管理される権限は Admin と Reader です。 Alice という名前のユーザーがいます。 Alice の AD グループは、Aliyun-<account-id>-ADFS-Admin と Aliyun-<account-id>-ADFS-Reader です。 AD FS から Account1 と Account2 への SSO を実装します。
上記のグループで、<account-id> は Account1 または Account2 のアカウント ID です。 したがって、Alice は 4 つの AD グループに属しています。これらはそれぞれ Admin 権限と Reader 権限に対応しています。
次の図は、コンソールを介した基本的な SSO プロセスを示しています。

AD 管理者がロールベース SSO の設定を完了した後、前の図のステップに従って、Alice は Alibaba Cloud コンソールにログインできます。 詳細は、「ロールベースの SSO の概要」をご参照ください。

前述の SSO プロセスは、ログイン時に Alibaba Cloud のユーザー名とパスワードを入力しなくても、企業のユーザーを認証できることを示しています。

設定

ロールベース SSO を実装するには、管理者は次の手順に従って Alibaba Cloud と AD FS を設定する必要があります。

  • Alibaba Cloud で AD FS を信頼できる SAML IdP として設定します。
    1. RAM コンソールで、Account1 配下に ADFS という名前の IdP を作成し、メタデータファイルを設定します。 AD FS のメタデータファイルは、 https://<ADFS-server>/federationmetadata/2007-06/federationmetadata.xml から入手できます。
      上記の URL 内の <ADFS-server> は、AD FS のサーバードメイン名または IP アドレスです。

      詳細は、「ロールベース SSO の SAML の設定」をご参照ください。

    2. Account1 配下に ADFS-Admin とADFS-Reader という名前の 2 つの RAM ロールを作成し、信頼できるエンティティとして作成済みの ADFS を選択し、AdministratorAccess ポリシーと ReadOnlyAccess ポリシーをそれぞれ 2 つの RAM ロールに割り当てます。 詳細は、「信頼できる Alibaba Cloud アカウント用 RAM ロールの作成」をご参照ください。
    3. 前の手順で説明したように、Account2 配下に IdP と 2 つの RAM ロールを作成し、ポリシーを割り当てます。
    設定が完了すると、Alibaba Cloud アカウント (Account1 と Account2) は、AD FS から送信された SAML リクエスト内のユーザー ID とロール情報を信頼します。
  • AD FS で Alibaba Cloud を信頼できる SAML SP として設定します。

    AD FS では、SAML SP を証明書利用者とも呼びます。 AD FSで Alibaba Cloud を信頼できるSAML SP として設定するには、次の手順に従います。

    1. [サーバー マネージャー] ページで、[ツール] > [AD FS の管理] を選択します。
    2. [証明書利用者信頼の追加] を選択します。
    3. Alibaba Cloud の SAML SP メタデータを証明書利用者に設定します。 メタデータの URL は、https://signin.alibabacloud.com/saml-role/sp-metadata.xml です。
    4. プロンプトに従って設定を完了します。
  • Alibaba Cloud SP の SAML アサーション属性を設定します。

    AD FS によって発行された SAML アサーションには、 NameIDRoleRoleSessionName などの属性が含まれている必要があります。 AD FS は、変換ルールを発行してこれらの属性を指定できます。

    • NameID

      AD の Windows アカウント名が SAML アサーションの NameID になるように設定するには、次の手順に従います。

      1. 証明書利用者の表示名を右クリックし、[要求規則の編集] を選択します。
      2. [発行変換規則] をクリックします。
        [発行変換規則] は、既知のユーザー属性を変換し、SAML アサーションの属性として発行する方法を示します。 AD 内のユーザーの Windows アカウント名を NameID として発行する必要があります。 つまり、新しい規則が必要です。
      3. [要求規則テンプレート]ドロップダウンリスト から [入力方向の要求を変換] を選択します。
      4. 次のように要求規則を設定し、[完了] をクリックします。
        • 要求規則名:NameID
        • 入力方向の要求の種類:Windows アカウント名
        • 出力方向の要求の種類:Name ID
        • 出力方向の名前 ID の形式:永続 ID
        • すべての要求値をパス スルーする:選択
        設定が完了すると、AD FS は 必要な NameID 形式を Alibaba Cloud に送信します。 以下に例を示します。
        
        <NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">
            YourDomain\rolessouser
        </NameID>
        										
    • RoleSessionName

      AD の UPN を SAMLアサーションの RoleSessionName に設定するには、次の手順に従います。

      1. [変換要求規則の追加] をクリックします。
      2. [要求規則テンプレート] ドロップダウンリストから [LDAP 属性を要求として送信] を選択します。
      3. 次のように要求規則を設定し、[完了] をクリックします。
        • 要求規則名:RoleSessionName
        • 属性ストア:Active Directory
        • LDAP 属性:User-Principal-Name (必要に応じて、Email などの他の属性を選択可)
        • 出力方向の要求の種類https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName
      設定が完了すると、AD FS は必要な RoleSessionName 形式を Alibaba Cloud に送信します。 以下に例を示します。
      
      <Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName">
          <AttributeValue>rolessouser@example.com<AttributeValue>
      </Attribute>
      								
    • Role

      カスタムルールを使用して、ユーザーの AD グループメンバーシップを Alibaba Cloud のロール名に変換するには、次の手順に従います。

      1. [変換要求規則の追加] をクリックします。
      2. [要求規則テンプレート] ドロップダウンリストから [カスタム規則を使用して要求を送信] を選択し、[次へ] をクリックします。
      3. 次のように要求規則を設定し、[完了] をクリックします。
        • 要求規則名:Get AD Groups
        • カスタム規則
          
          c:[Type ==
          "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccount
          name", Issuer == "AD AUTHORITY"] => add(store = "Active Directory",
          types = ("http://temp/variable"), query = ";tokenGroups;{0}", param =
          c.Value);
        このルールでは、ユーザーの AD グループメンバーシップを取得し、http://temp/variable に保存します。
      4. [変換要求規則の追加] をクリックします
      5. 上記の手順を繰り返し、[完了] をクリックします。
        • 要求規則名:Role
        • カスタム規則
          
          c:[Type == "http://temp/variable", Value =~ "(?i)^Aliyun-([\d]+)"]
           => issue(Type = "https://www.aliyun.com/SAML-Role/Attributes/Role",
          Value = RegExReplace(c.Value, "Aliyun-([\d]+)-(.+)", "acs:ram::
          $1:role/$2,acs:ram::$1:saml-provider/ADFS"));
        このルールでは、ユーザーの AD グループにAliyun-<account-id>-ADFS-Admin か Aliyun-<account-id>-ADFS-Reader が含まれている場合、SAML 属性が生成され、RAM ロール ADFS-Admin または ADFS-Reader と照合するために Alibaba Cloud に送信されます。
      設定が完了すると、IdP は必要な SAML アサーションを Alibaba Cloud に返します。 以下に例を示します。
      
      <Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/Role">
          <AttributeValue>acs:ram::<account-id>:role/ADFS-Admin,acs:ram::<account-id>:saml-provider/ADFS</AttributeValue>
      </Attribute>
      								

検証

    1. AD FS SSO ポータル (URL: https://<ADFS-server>/adfs/ls/IdpInitiatedSignOn.aspx) にログインし、Alibaba Cloud アプリケーションを選択し、ユーザー名とパスワードを入力します。
      上記の URL 内の <ADFS-server> は、AD FS のサーバードメイン名または IP アドレスです。 URL が機能しない場合は、PowerShell Set-AdfsProperties –EnableIdpInitiatedSignonPage $Trueを実行します。
    2. Alibaba Cloud の [ロールベースの SSO ログイン方式] ページで、対象のロールを選択し、[サインイン] をクリックします。
      ユーザーが 1 つの AD グループにのみ属している場合、ロールを選択しなくても Alibaba Cloud にログインできます。