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

Resource Access Management:Shibboleth を使用したユーザーベース SSO の設定

最終更新日:Jul 17, 2026

このトピックでは、Shibboleth と Alibaba Cloud 間のユーザーベースシングルサインオン (SSO) を設定する、エンドツーエンドのプロセスを説明します。

事前準備

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

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

    この例では、識別名 (DN) が uid=admin,ou=system で、パスワードが secret の管理者アカウントを LDAP に追加します。

    DN が cn=Test User,ou=users,dc=wimpi,dc=net で、パスワードが secret のテストアカウントを LDAP に追加します。アカウントの詳細は、次の図のとおりです。

    image.png

    ユーザー情報フィールドは次のとおりです。

    • mail: Alibaba Cloud の RAM ユーザーのログイン名に対応します。

    • memberof: ユーザーが所属する LDAP グループを示します。

    • samaccountname: Shibboleth へのログインに使用されるユーザー名です。

    • userpassword: ログインパスワードです。

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

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

    # LDAP 認証モード
    idp.authn.LDAP.authenticator = bindSearchAuthenticator
    
    # LDAP サーバーアドレス
    idp.authn.LDAP.ldapURL = ldaps://[LDAP-server-address]:389
    
    # TLS と 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 の設定は、Alibaba Cloud での SSO 設定のエンドツーエンドプロセスを説明するためのデモンストレーションです。Alibaba Cloud は、Shibboleth の設定に関するコンサルティングサービスを提供していません。

ステップ 1:Alibaba Cloud から SAML SP メタデータを取得

  1. RAM 管理者として RAM コンソールにログインします。

  2. 左側のナビゲーションペインで、統合管理 > SSO 管理 を選択します。

  3. ユーザーベースの SSO ログイン方式 タブをクリックします。SAML サービスプロバイダーメタデータ URL セクションで、Alibaba Cloud アカウントのメタデータ URL をコピーします。

  4. コピーした URL を新しいブラウザウィンドウで開きます。ページを XML ファイルとして /opt/shibboleth-idp/metadata/aliyun-ram-user-metadata.xml に保存します。

    説明

    EntityDescriptor 要素から entityID 属性値を記録してください。この値は、後続の Shibboleth 設定で必要になります。

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

<!-- 上記のコメントアウトされたコードブロックを見つけて、次のコードに置き換えます。 -->

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

ステップ 3:Shibboleth が返すユーザー属性の設定

  1. /opt/shibboleth-idp/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-idp/conf/attribute-resolver-full.xml ファイルを変更します。

    1. ユーザー情報で返す属性を定義します。この例では、mail 属性を返します。

      <!-- ========================================== -->
      <!--      属性定義                 -->
      <!-- ========================================== -->
      
      <!-- スキーマ:コアスキーマ属性-->
      
      <!-- 上記のコメントアウトされたコードブロックを見つけて、その後に次のコードを追加します。 -->
      
      <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="urn:oid:0.9.2342.19200300.100.1.3" friendlyName="mail" encodeType="false" />
      </AttributeDefinition>
    2. 同じファイルで、/opt/shibboleth-idp/conf/ldap.properties の設定を使用して LDAP 接続を設定します。

      <!-- 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}"
      		...omitted...
      	</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-idp/conf/attribute-filter.xml ファイルを変更して、属性フィルターを追加します。

    「ステップ 1:Alibaba Cloud から SAML SP メタデータを取得」で取得した Alibaba Cloud の entityID で、PolicyRequirementRule タグの value 属性を置き換えます。

    <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>
    </AttributeFilterPolicy>

ステップ 4:SAML NameID の設定

  1. /opt/shibboleth-idp/conf/relying-party.xml ファイルを変更して、Alibaba Cloud の NameID を設定します。

    「ステップ 1:Alibaba Cloud から SAML SP メタデータを取得」で取得した Alibaba Cloud の entityID で、bean タグの relyingPartyIds 属性を置き換えます。

    <!--
    	単一の 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-idp/conf/saml-nameid.xml ファイルを変更して、NameID の生成方法を設定します。

    <!-- 以下の 2 つのコードブロックを見つけてコメントを解除し、設定を適用します。 -->
    
    <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-idp/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

ステップ 5:Shibboleth から SAML IdP メタデータを取得

  1. Tomcat を再起動して設定を適用します。

  2. https://<your-server-address>/idp/shibboleth にアクセスし、メタデータファイルをローカルコンピューターに保存します。

ステップ 6:Alibaba Cloud でユーザーベース SSO を有効化

  1. RAM コンソールの左側のナビゲーションペインで、統合管理 > SSO 管理 を選択します。

  2. ユーザーベースの SSO ログイン方式 タブをクリックします。SSO 機能ステータス セクションで、有効 をクリックします。

    説明

    ユーザーベース SSO はグローバルな機能です。有効にすると、すべての RAM ユーザーは SSO を使用してログインする必要があります。RAM ユーザーとして SSO を設定している場合は、この機能を当面無効にしておいてください。設定ミスによるロックアウトを避けるために、まず必要な RAM ユーザーを作成する必要があります。あるいは、Alibaba Cloud アカウントを使用して SSO を設定することで、この問題を回避できます。

  3. メタデータファイル セクションで、メタデータドキュメントをアップロード をクリックし、「ステップ 5:Shibboleth から SAML IdP メタデータを取得」で取得した IdP メタデータファイルをアップロードします。

  4. 補助ドメイン名 セクションで、編集する をクリックし、補助ドメイン名を有効にして、Shibboleth のユーザーのメールのサフィックスに設定します。

    この例では、値は testdomain.alicloud.com です。

ステップ 7:Alibaba Cloud で RAM ユーザーを作成

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

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

  3. ユーザーの作成 ページで、ログイン名表示名 を入力します。

    説明

    RAM ユーザーのログイン名のプレフィックスが、Shibboleth のユーザーのメールのプレフィックスと一致していることを確認してください。この例では、プレフィックスは testUser です。

  4. アクセスモード セクションで コンソールへのアクセス を選択し、ログインパスワードとその他のパラメーターを設定します。

  5. OK をクリックします。

結果の検証

設定が完了したら、Alibaba Cloud または Shibboleth のいずれかから SSO ログインを開始できます。

Alibaba Cloud からの SSO の開始

  1. RAM コンソール概要 ページで、RAM ユーザーのログイン URL をコピーします。

  2. 右上隅のプロフィール画像にカーソルを合わせ、[ログアウト] をクリックするか、コピーした RAM ユーザーのログイン URL を新しいブラウザウィンドウで開きます。

  3. [エンタープライズ IdP アカウントでログイン] をクリックします。Shibboleth のログインページにリダイレクトされます。企业账户登录

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

    SSO を介して自動的にログインし、Alibaba Cloud コンソールのホームページにリダイレクトされます。

Shibboleth からの SSO の開始

  1. https://<your-server-address>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID> にアクセスします。

    URL 内の <entityID> は、「ステップ 1:Alibaba Cloud から SAML SP メタデータを取得」で取得した Alibaba Cloud の entityID です。

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

    SSO を介して自動的にログインし、Alibaba Cloud コンソールのホームページにリダイレクトされます。

よくある質問

検証中に問題が発生した場合は、/opt/shibboleth-idp/logs/idp-process.log で原因を確認してください。一般的な問題は次のとおりです。

正しい認証情報でのログインエラー

/opt/shibboleth-idp/logs/idp-process.log のエラーメッセージを確認します。エラーが ValidateUsernamePassword に関連している場合は、LDAP 接続の設定とデプロイを確認してください。必要なすべてのコードがコメント解除されており、余分なスペースがないことを確認してください。

ログイン後にレスポンスがなく、unable to connect to the ldap というエラーが表示される

ldap.propertiesattribute-resolver-full.xml の LDAP 接続設定を確認します。

ログイン後に Alibaba Cloud へリダイレクトされる際のエラー: The NameID is missing.

「ステップ 3:Shibboleth が返すユーザー属性の設定」mail フィールドが属性として正しくマッピングされていること、および「ステップ 4:SAML NameID の設定」NameID が正しく設定されていることを確認してください。

https://<your server address>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID> へのアクセス時に Unsupported Request が表示される

entityId が正しく設定されていることを確認してください。entityId は、metadata フォルダー内のメタデータ、attribute-filter.xml、および relying-party.xml で一貫している必要があります。

ログイン後に Alibaba Cloud へリダイレクトされる際のエラー: The response signature is invalid.

Shibboleth のメタデータファイルを Alibaba Cloud に再アップロードしてください。