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

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

最終更新日:Mar 26, 2025

このトピックでは、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

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

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

    • memberof: RAM ロールの名前。

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

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

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

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

    # LDAP 認証モード。
    idp.authn.LDAP.authenticator = bindSearchAuthenticator
    
    # LDAP 認証サーバーのアドレス。
    idp.authn.LDAP.ldapURL=ldaps://[LDAP 認証サーバーのアドレス]:389
    
    # Transport Layer Security (TSL) および Transport Layer Security (SSL) を無効にします。
    idp.authn.LDAP.useStartTLS = false
    idp.authn.LDAP.useSSL = false
    
    # 検索するディレクトリツリー。
    idp.authn.LDAP.baseDN = dc=wimpi,dc=net
    idp.authn.LDAP.subtreeSearch = true
    # ログイン一致ルール。ユーザー情報フィールド samaccountname は、LDAP 認証サーバーへのログインに使用されます。
    idp.authn.LDAP.userFilter= (samaccountname={user})
    
    # 作成した管理者アカウントのユーザー名とパスワード。
    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 プロセスを理解するのに役立つための提案であり、Shibboleth の構成に関するコンサルティングサービスは提供していません。

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

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

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

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

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

    説明

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

手順 2: Shibboleth に Alibaba Cloud を登録する

ステップ 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"/>
-->

<!-- ファイル内の前の行に表示されているコードを見つけ、次の行に表示されているコードに置き換えます。 -->

<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] をクリックします。

作成された IdP の詳細を表示し、後で使用するために IdP の Alibaba Cloud リソースネーム (ARN) を記録します。

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

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

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

  3. [ロールの作成] ページの右上隅にある [ポリシーエディターに切り替え] をクリックします。

  4. エディターで SAML IdP を指定します。

    エディターは、ビジュアルエディターと JSON モードをサポートしています。この例では、ビジュアルエディターモードを使用します。[プリンシパル] 要素を構成するには、[ID プロバイダータイプ][SAML] を選択し、ステップ 4: Alibaba Cloud で SAML IdP を作成する で作成した shibboleth-provider を ID プロバイダーに指定する必要があります。

  5. エディターで、saml:recipient 条件を https://signin.alibabacloud.com/saml-role/sso に設定します。

  6. [ロールの作成] ダイアログボックスで、[ロール名] パラメーターを worker に設定し、[OK] をクリックします。

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

ステップ 6: Shibboleth によって返されるユーザー属性を構成するステップ 6: Shibboleth によって返されるユーザー属性を構成する

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

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

    <value>%{idp.home}/conf/attribute-resolver.xml</value>
    <!-- ファイル内の前の行に表示されているコードを見つけ、次の行に表示されているコードに置き換えます。 -->
    <value>%{idp.home}/conf/attribute-resolver-full.xml</value>
  2. /opt/shibboleth/conf/attribute-resolver-full.xml ファイルを変更します。

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

      memberof 属性の idrole に設定します。これは、ユーザーの RAM ロールを指定します。ReturnValue タグの値を <worker を除く RAM ロールの ARN + '$1'>,<SP の ARN> に設定します。SP の ARNステップ 4: Alibaba Cloud で SAML IdP を作成する で、RAM ロールの ARNステップ 5: Alibaba Cloud で RAM ロールを作成する で取得できます。

      説明

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

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

      <!-- ========================================== -->
      <!--      属性定義                 -->
      <!-- ========================================== -->
      
      <!-- スキーマ: コアスキーマ属性-->
      
      <!-- ファイル内の前の行に表示されているコードを見つけ、次の行に表示されているコードを追加します。 -->
      
      <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 の構成情報を読み取ります。

      <!-- LDAP コネクタの例 -->
      <!--
      	<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>
      -->
      
      <!-- ファイル内の前の行に表示されているコードを見つけ、次の行に表示されているコードに置き換えます。 -->
      
      <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 メタデータファイルをダウンロードする で取得した エンティティ 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">
    	
    <!-- ファイル内の前の行に表示されているコードを見つけ、次の行に表示されているコードを追加します。 -->
    	
    <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 メタデータファイルをダウンロードする で取得した エンティティ ID に置き換えます。

    <!--
    	名前で単一の RP を識別し、暗号化なしで SAML 2 SSO 用に構成するオーバーライド例。これは一般的な「ベンダー」シナリオです。
    -->
    <!--
    <bean parent="RelyingPartyByName" c:relyingPartyIds="https://sp.example.org">
    	<property name="profileConfigurations">
    		<list>
    			<bean parent="SAML2.SSO" p:encryptAssertions="false" />
    		</list>
    	</property>
    </bean>
    -->
    
    <!-- ファイル内の前の行に表示されているコードを見つけ、次の行に表示されているコードに置き換えます。 -->
    
    <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 属性の生成方法を構成します。

    <!-- 次のコードを見つけます。構成を有効にするには、コードのコメントを解除します。-->
    
    <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. /opt/shibboleth/conf/saml-nameid.properties で NameID 属性に関する情報を構成します。

    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 を再起動します。

ロールベース SSO をテストする

上記の構成を完了したら、Shibboleth から SSO を開始できます。

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

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

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

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

FAQ

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

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

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

Shibboleth にログインしようとするとシステムが応答せず、「ldap に接続できません」というエラーメッセージが表示された場合はどうすればよいですか?Shibboleth にログインしたときにシステムが応答しない場合はどうすればよいですか?LDAP に接続できません エラーメッセージが表示されますか?

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

Alibaba Cloud にリダイレクトされるときに「NameID がありません」というエラーメッセージが表示された場合はどうすればよいですか?どうすればよいですか? NameID がありませんAlibaba Cloud にリダイレクトされたときにエラーメッセージが表示されるのはなぜですか?

ステップ 6: Shibboleth によって返されるユーザー属性を構成する で、mail フィールドが属性として正しくマッピングされているかどうかを確認します。ステップ 7: SAML レスポンスの NameID 属性を構成する で、NameID 属性が正しく構成されているかどうかを確認します。

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

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

どうすればよいですか?必須の SAML ロール属性が見つかりませんAlibaba Cloud にリダイレクトされたときにエラーメッセージが表示されますか?

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

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

手順 6: Shibboleth によって返されるユーザー属性を構成する で、mail 属性の namehttps://www.aliyun.com/SAML-Role/Attributes/RoleSessionName になっているかどうかを確認します。ユーザーベース SSO の構成をロールベース SSO を実装するように変更するときに、name フィールドの値の変更を忘れるユーザーもいます。

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

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