すべてのプロダクト
Search
ドキュメントセンター

Resource Access Management:ShibbolethからAlibaba CloudへのロールベースSSOの実装

最終更新日:Oct 31, 2024

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

準備

  1. Shibboleth、Apache Tomcat、およびLightweight Directory Access Protocol (LDAP) 認証サーバーをインストールします。

  2. LDAP認証サーバーを設定します。

    後で使用するために2つのアカウントを作成します。 まず、LDAP認証サーバーに管理者アカウントを作成します。 管理者アカウントの識別名 (DN) はuid=admin,ou=systemで、パスワードはsecretです。

    次に、LDAP認証サーバーにテストアカウントを作成します。 テストアカウントのDNはcn=test User,ou=users,dc=wimpi,dc=netで、パスワードはsecretです。 次の図は、詳細情報を示しています。

    image.png

    次のセクションでは、ユーザー情報フィールドについて説明します。

    • mail: Resource Access Management (RAM) ユーザーのログイン名。

    • memberof: RAMロールの名前。

    • samaccountname: Shibbolethへのログインに使用されるアカウントのユーザー名。

    • userpassword: Shibbolethへのログインに使用されるアカウントのパスワード。

  3. LDAP認証サーバーに接続するようにShibbolethを設定します。

    /opt/shibboleth-idp/conf/ldap.propertiesファイルの次の内容を変更します。

    # The LDAP authentication mode.
    idp.authn.LDAP.authenticator = bindSearchAuthenticator
    
    # The address of the LDAP-authenticated server.
    idp.authn.LDAP.ldapURL=ldaps://[The address of the LDAP-authenticated server]:389
    
    # Disable Transport Layer Security (TSL) and Transport Layer Security (SSL).
    idp.authn.LDAP.useStartTLS = false
    idp.authn.LDAP.useSSL = false
    
    # The directory tree for search.
    idp.authn.LDAP.baseDN = dc=wimpi,dc=net
    idp.authn.LDAP.subtreeSearch = true
    # The logon matching rule. The user information field samaccountname is used to log on to the LDAP-authenticated server. 
    idp.authn.LDAP.userFilter= (samaccountname={user})
    
    # The username and password of the admin account that you created.
    idp.authn.LDAP.bindDN = uid=admin,ou=system
    idp.authn.LDAP.bindDNCredential = secret
    
    idp.attribute.resolver.LDAP.searchFilter =(samaccountname=$resolutionContext.principal)
説明

このトピックで説明するShibbolethの設定は提案であり、ShibbolethからAlibaba CloudへのエンドツーエンドSSOプロセスを理解するためにのみ使用されます。 Alibaba Cloudは、Shibbolethの設定に関するコンサルティングサービスを提供していません。

ステップ1: Alibaba CloudのSAML SPメタデータファイルをダウンロードする

  1. Alibaba CloudアカウントでRAMコンソールにログインします。

  2. 左側のナビゲーションウィンドウで、統合 > SSOを選択します。

  3. ロールベースSSOタブで、SAMLタブをクリックして、SAML (Security Assertion Markup Language) サービスプロバイダー (SP) メタデータファイルのURLをコピーします。

  4. ブラウザで新しいタブを開き、アドレスバーにURLを貼り付けます。 表示されるページで、ページを右クリックして [名前を付けて保存] を選択し、メタデータファイルをXML形式でダウンロードし、ファイルを /opt/shibboleth-idp/metadata/aliyun-ram-role-metadata.xmlとして保存します。

    説明

    XMLファイルには、Alibaba CloudをSAML (Security Assertion Markup Language) サービスプロバイダー (SP) として設定するために必要な情報が含まれています。 Shibbolethの後続の設定のために、EntityDescriptor要素にentityIDの値を記録します。

ステップ2: Alibaba CloudをShibbolethに登録する

手順1: Alibaba CloudのSAML SPメタデータファイルをダウンロードで取得したメタデータファイルを /opt/shibboleth-idp/conf/metadata-providers.xmlファイルに設定し、Alibaba CloudをShibbolethに登録します。

<!--
    <MetadataProvider id="LocalMetadata"  xsi:type="FilesystemMetadataProvider" metadataFile="PATH_TO_YOUR_METADATA"/>
-->

<!-- Find the code that is displayed in the preceding line in the file and replace the code with the code that is displayed in the following line. -->

<MetadataProvider id="AliyunMetadata"  xsi:type="FilesystemMetadataProvider" metadataFile="%{idp.home}/metadata/aliyun-ram-role-metadata.xml"/>

手順3: ShibbolethでSAML IdPのメタデータファイルを取得

  1. Apache Tomcatを再起動して、上記の設定を有効にします。

  2. https:// <LDAPサーバーのIPアドレス>/idp/shibbolethにアクセスし、メタデータファイルをコンピューターに保存します。

ステップ4: Alibaba CloudでSAML IdPを作成する

  1. Alibaba Cloud アカウントで RAM コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[統合] > [SSO] を選択します。

  3. [ロールベースSSO] タブで、[SAML] タブをクリックし、[IdPの追加] をクリックします。

  4. [IdPの作成] ページで、[IdP名] をshibboleth-providerに設定し、[備考] を設定します。

  5. [メタデータファイル] セクションで、[ファイルのアップロード] をクリックして、「手順3: ShibbolethでSAML IdPのメタデータファイルを取得する」で取得したメタデータファイルをアップロードします。

  6. [OK] をクリックします。

  7. 作成したIdPの詳細を表示し、後で使用できるようにIdPのAlibaba Cloudリソース名 (ARN) を記録します。

ステップ5: Alibaba CloudでRAMロールを作成する

  1. RAMコンソールの左側のナビゲーションウィンドウで、アイデンティティ > ロールを選択します。

  2. ロールページで、ロールの作成をクリックします。

  3. ロールの作成パネルで、[信頼できるエンティティ] にIdPを選択し、次へをクリックします。

  4. RAMロール名をワーカーに設定し、を指定します。

  5. IdP TypeパラメーターにSAMLを選択します。

  6. Select IdPパラメーターにステップ4: Alibaba CloudでSAML IdPを作成するで作成したshibboleth-providerを選択し、条件を読み取り、OKをクリックします。

  7. 閉じるをクリックします。

  8. 作成したRAMロールの詳細を表示し、後で使用するためにRAMロールのARNを記録します。

手順6: Shibbolethによって返されるユーザー属性の設定

  1. /opt/shibboleth/conf/services.xmlファイルを変更します。

    元の構成ファイルにはattribute-resolver.xmlフィールドが含まれており、完全な構成情報は提供されません。 完全な構成情報を提供するには、フィールドをattribute-resolver-full.xmlフィールドに置き換える必要があります。

    <value>%{idp.home}/conf/attribute-resolver.xml</value>
    <!-- Find the code that is displayed in the preceding line in the file and replace the code with the code that is displayed in the following line. -->
    <value>%{idp.home}/conf/attribute-resolver-full.xml</value>
  2. /opt/shibboleth/conf/attribute-resolver-full.xmlファイルを変更します。

    1. Shibbolethによって返されるユーザー属性を /opt/shibboleth/conf/attribute-resolver-full.xmファイルで設定します。 この例では、mailフィールドとmemberofフィールドがユーザー属性として使用されます。

      memberof属性のidroleに設定します。これにより、ユーザーのRAMロールが指定されます。 ReturnValueタグの値を <ワーカーを除くRAMロールのARN + '$1' >,< SPのARN> に設定します。 [SPのARN][手順4: Alibaba CloudでSAML IdPを作成する] で、[RAMロールのARN][手順5: Alibaba CloudでRAMロールを作成する] で取得できます。

      説明

      RAMロール名は $1に置き換えられ、複数のRAMロールに対してSSOを設定できるようにします。 memberofフィールドの値を変更して、ユーザーのRAMロールを変更できます。

      memberof属性は、内部属性ではなくカスタムユーザー属性であることに注意してください。 属性を、ユーザーのRAMロールを示すことができる別の属性に置き換えることができます。

      <!-- ========================================== -->
      <!--      Attribute Definitions                 -->
      <!-- ========================================== -->
      
      <!-- Schema: Core schema attributes-->
      
      <!-- Find the code that is displayed in the preceding line in the file and append the code that is displayed in the following line. -->
      
      <AttributeDefinition xsi:type="Simple" id="mail">
          <InputDataConnector ref="myLDAP" attributeNames="mail" />
          <AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:mail" encodeType="false" />
          <AttributeEncoder xsi:type="SAML2String" name="https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName" friendlyName="mail" encodeType="false" />
      </AttributeDefinition>
      <AttributeDefinition xsi:type="Mapped" id="role">
          <InputDataConnector ref="myLDAP" attributeNames="memberof" />
          <AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:role" encodeType="false" />
          <AttributeEncoder xsi:type="SAML2String" name="https://www.aliyun.com/SAML-Role/Attributes/Role" friendlyName="role" encodeType="false" />
          <ValueMap>
              <ReturnValue>acs:ram::114*******71701:role/$1,acs:ram::114*******71701:saml-provider/shibboleth-provider</ReturnValue>
              <SourceValue>(.+)</SourceValue>
          </ValueMap>
      </AttributeDefinition>
    2. ldapサーバーへの接続を確立するために、ファイル内の /opt/shibboleth/conf /LDAP. propertiesに含まれる構成情報を読み取ります。

      <!-- Example LDAP Connector -->
      <!--
      	<DataConnector id="myLDAP" xsi:type="LDAPDirectory"
      		ldapURL="%{idp.attribute.resolver.LDAP.ldapURL}"
      		baseDN="%{idp.attribute.resolver.LDAP.baseDN}"
      		principal="%{idp.attribute.resolver.LDAP.bindDN}"
      		principalCredential="%{idp.attribute.resolver.LDAP.bindDNCredential}"
      		useStartTLS="%{idp.attribute.resolver.LDAP.useStartTLS:true}"
      		...
      	</DataConnector>
      -->
      
      <!-- Find the code that is displayed in the preceding line in the file and replace the code with the code that is displayed in the following line. -->
      
      <DataConnector id="myLDAP" xsi:type="LDAPDirectory"
      			   ldapURL="%{idp.attribute.resolver.LDAP.ldapURL}"
      			   baseDN="%{idp.attribute.resolver.LDAP.baseDN}"
      			   principal="%{idp.attribute.resolver.LDAP.bindDN}"
      			   principalCredential="%{idp.attribute.resolver.LDAP.bindDNCredential}"
      			   useStartTLS="%{idp.attribute.resolver.LDAP.useStartTLS}"
      			   connectTimeout="%{idp.attribute.resolver.LDAP.connectTimeout}"
      			   responseTimeout="%{idp.attribute.resolver.LDAP.responseTimeout}">
      	<FilterTemplate>
      		<![CDATA[
      				%{idp.attribute.resolver.LDAP.searchFilter}
      			]]>
      	</FilterTemplate>
      </DataConnector>
  3. /opt/shibboleth/conf/attribute-filter.xmlファイルに属性フィルターを追加します。

    PolicyRequirementRuleタグのvalue属性を、手順1: Alibaba CloudのSAML SPメタデータファイルをダウンロードで取得したEntity IDに置き換えます。

    <AttributeFilterPolicyGroup id="ShibbolethFilterPolicy"
    							xmlns="urn:mace:shibboleth:2.0:afp"
    							xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    							xsi:schemaLocation="urn:mace:shibboleth:2.0:afp http://shibboleth.net/schema/idp/shibboleth-afp.xsd">
    	
    <!-- Find the code that is displayed in the preceding line in the file and append the code that is displayed in the following line. -->
    	
    <AttributeFilterPolicy id="aliyun">
    	<PolicyRequirementRule xsi:type="Requester" value="[entityID]" />
    	<AttributeRule attributeID="mail">
    		<PermitValueRule xsi:type="ANY" />
    	</AttributeRule>
    	<AttributeRule attributeID="role">
    		<PermitValueRule xsi:type="ANY" />
    	</AttributeRule>
    </AttributeFilterPolicy>

ステップ7: SAML応答でNameID属性を設定する

  1. /opt/shibboleth/conf/relying-party.xmlファイルでNameID属性を設定します。

    beanタグのrelyingPartyIds属性を、手順1: Alibaba CloudのSAML SPメタデータファイルをダウンロードで取得したEntity IDに置き換えます。

    <!--
    	Override example that identifies a single RP by name and configures it
    	for SAML 2 SSO without encryption. This is a common "vendor" scenario.
    -->
    <!--
    <bean parent="RelyingPartyByName" c:relyingPartyIds="https://sp.example.org">
    	<property name="profileConfigurations">
    		<list>
    			<bean parent="SAML2.SSO" p:encryptAssertions="false" />
    		</list>
    	</property>
    </bean>
    -->
    
    <!-- Find the code that is displayed in the preceding line in the file and replace the code with the code that is displayed in the following line. -->
    
    <bean parent="RelyingPartyByName" c:relyingPartyIds="[entityID]">
        <property name="profileConfigurations">
            <list>
                <bean parent="SAML2.SSO" p:encryptAssertions="false" p:nameIDFormatPrecedence="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" />
            </list>
        </property>
    </bean>
  2. /opt/shibboleth/conf/saml-NameID. xmlファイルでnameid属性の生成方法を設定します。

    <!-- Find the following code. Uncomment the code to make the configuration take effect.-->
    
    <bean parent="shibboleth.SAML2AttributeSourcedGenerator"
        p:omitQualifiers="true"
        p:format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
        p:attributeSourceIds="#{ {'mail'} }" />
    
    <bean parent="shibboleth.SAML1AttributeSourcedGenerator"
        p:omitQualifiers="true"
        p:format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
        p:attributeSourceIds="#{ {'mail'} }" />
  3. NameID属性に関する情報を /opt/shibboleth/conf/saml-nameid.propertiesで設定します。

    idp.nameid.saml2.default = urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
    idp.persistentId.useUnfilteredAttributes = true
    idp.persistentId.encoding = BASE32

ステップ8: Shibbolethを開始する

Apache Tomcatを再起動して、上記の設定を有効にします。

設定結果の確認

上記の設定を完了すると、ShibbolethからSSOを開始できます。

  1. https:// <LDAPサーバーのIPアドレス>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID> にアクセスします。

    <entityID> を、手順1: Alibaba CloudのSAML SPメタデータファイルをダウンロードで取得したエンティティIDに置き換えます。

  2. Shibbolethのログインページで、ユーザー名とパスワードを入力し、[ログイン] をクリックします。

    ログインが成功すると、RAMロールワーカーとしてAlibaba Cloud管理コンソールのホームページにリダイレクトされます。

よくある質問

設定結果の確認時に問題が発生した場合は、/opt/shibboleth-idp/logs/idp-process.logファイルを使用して問題を特定できます。 次のセクションでは、ShibbolethからAlibaba CloudへのロールベースSSOに関するよくある質問に対する回答を示します。

有効なユーザー名とパスワードを使用してShibbolethにログオンしたときに例外が発生した場合はどうすればよいですか?

/opt/shibboleth-idp/logs/idp-process.logファイルにエラーメッセージを表示します。 ValidateUsernamePasswordエラーメッセージが表示された場合は、LDAPサーバーの接続設定とデプロイを表示します。 コメントを解除する必要があるコードがコメントを解除され、余分なスペースが存在しないことを確認します。

Shibbolethにログオンしてもシステムが応答せず、unable to connect to the ldapエラーメッセージが表示された場合はどうすればよいですか?

LDAP. propertiesおよびattribute-resolver-full.xmlファイルのldapサーバーの接続設定が正しいかどうかを確認します。

Alibaba CloudにリダイレクトされたときにNameIDが見つかりませんエラーメッセージが表示されますか?

Step 6: Configure the user attributes that are returned by Shibbolethmailフィールドが属性として正しくマップされているかどうかを確認します。Step 7: Configure the NameID attribute in the SAML responseNameID属性が正しく設定されているかどうかを確認してください。

https:// <LDAPサーバーのIPアドレス>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID>にアクセス時にサポートされていないリクエストエラーメッセージが表示されたらどうすればよいですか?

entityIdフィールドが正しく指定されているかどうかを確認します。 metadataファイル、attribute-filter.xmlファイル、およびrelying-party.xmlファイルのentityIdフィールドの値が同じであることを確認します。

Alibaba Cloudにリダイレクトされたときに必要なSAMLロール属性が見つからないエラーメッセージが表示される場合はどうすればよいですか?

手順6: Shibbolethによって返されるユーザー属性の設定memberofフィールドがroleとして正しくマップされているかどうかを確認します 。 ReturnValueタグの値が正しいことを確認してください。

Alibaba Cloudにリダイレクトされると必須のSAMLロールセッション名属性が見つからないエラーメッセージが表示される場合はどうすればよいですか?

Step 6: Configure the user attributes that are returned by Shibbolethmail属性のnamehttps://www.aliyun.com/SAML-Role/Attributes/RoleSessionName かどうかを確認します。 一部のユーザーは、ロールベースSSOを実装するためにユーザーベースSSOの設定を変更するときに、nameフィールドの値の変更を忘れることがあります。

Alibaba Cloudにリダイレクトされると応答署名が無効エラーメッセージが表示される場合はどうすればよいですか?

ShibbolethのメタデータファイルをAlibaba Cloudに再アップロードします。