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

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

最終更新日:Jun 05, 2026

本記事では、SAML メタデータの交換、属性マッピング、NameID の設定など、Shibboleth から Alibaba Cloud へのロールベースシングルサインオン (SSO) のエンドツーエンドの設定について説明します。

準備

  1. Shibboleth、Tomcat、および LDAP サーバーをインストールします。

  2. LDAP サーバーを構成します。

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

    テストアカウントを LDAP に追加します。DN を cn=Test User,ou=users,dc=wimpi,dc=net に、パスワードを secret に設定します。詳細は、次の図をご参照ください。

    image.png

    ユーザー情報フィールド:

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

    • memberof: RAM ロールの名前に対応します。

    • samaccountname: Shibboleth にログインするためのユーザー名です。

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

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

    /opt/shibboleth-idp/conf/ldap.properties ファイルで次のデータを変更します:

    # LDAP 認証モード
    idp.authn.LDAP.authenticator = bindSearchAuthenticator
    
    # LDAP アドレス
    idp.authn.LDAP.ldapURL = ldaps://[LDAP server address]:389
    
    # TSL と 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 構成は提案です。これらは、エンドツーエンドの SSO ログインプロセスを理解するのに役立つ目的でのみ提供されています。Alibaba Cloud は、Shibboleth 構成に関するコンサルティングサービスを提供していません。

ステップ 1:SAML サービスプロバイダーのメタデータの取得

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

  2. ナビゲーションウィンドウで、Integrations > SSO を選択します。

  3. [ロールベースの SSO ログイン方式] タブで、SAML タブをクリックし、Alibaba Cloud SAML サービスプロバイダーのメタデータ URL をコピーします。

  4. コピーしたリンクを新しいブラウザウィンドウで開き、メタデータファイルを /opt/shibboleth-idp/metadata/aliyun-ram-role-metadata.xml として保存します。

    説明

    メタデータ XML ファイルには、SAML サービスプロバイダー (SP) としての Alibaba Cloud のアクセス情報が含まれています。EntityDescriptor 要素の entityID 属性の値を記録します。この値は、後で Shibboleth を構成するときに必要になります。

ステップ 2:Shibboleth への Alibaba Cloud の登録

/opt/shibboleth-idp/conf/metadata-providers.xml で、「ステップ 1:SAML サービスプロバイダーのメタデータの取得」のメタデータファイルを指定して、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:SAML IdP メタデータの取得

  1. Tomcat を再起動して変更を適用します。

  2. https://<your server address>/idp/shibboleth にアクセスし、メタデータファイルをお使いのローカルマシンに保存します。

ステップ 4:SAML ID プロバイダーの作成

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

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

  3. [ロールベースの SSO ログイン方式] タブで、SAML タブをクリックし、[IdP の作成] をクリックします。

  4. [IdP の作成] ページで、[IdP 名] (shibboleth-provider) と [] を入力します。

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

  6. [IdP の作成] をクリックします。

後の手順のために、新しい ID プロバイダーの ARN を控えておいてください。

ステップ 5:RAM ロールの作成

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

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

  3. [ロール作成] ページの右上隅にある [Switch to Policy Editor] をクリックします。

  4. エディターで SAML ID プロバイダーを指定します。

    ビジュアルエディターで、[Principal] を「ステップ 4:SAML ID プロバイダーの作成」で作成した ID プロバイダー (shibboleth-provider) に設定します。[IdP タイプ] には SAML を選択します。

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

  6. [ロール作成] ダイアログボックスで、[ロール名] (worker) を入力し、[OK] をクリックします。

後の手順のために、新しい RAM ロールの ARN を控えておいてください。

ステップ 6: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. Shibboleth が mail および memberof ユーザー属性を返すように設定します。

      memberof 属性の idrole で、これはユーザーのロールを表します。ReturnValueロール ARN からロール名 (worker) を除いた部分+'$1',<サービスプロバイダー ARN> です。<サービスプロバイダー ARN> は「ステップ 4:SAML ID プロバイダーの作成」から、role ARN は「ステップ 5:RAM ロールの作成」から取得します。

      説明

      複数のロールをサポートするため、ロール名は $1 に置き換えられます。ユーザーのロールは、ユーザー情報内の memberof フィールドを調整することで変更できます。

      memberof はカスタム属性です。ユーザーのロールを示す任意の属性に置き換えることができます。

      <!-- ========================================== -->
      <!--      属性定義                 -->
      <!-- ========================================== -->
      
      <!-- スキーマ:コアスキーマ属性-->
      
      <!-- 上記のコメントを見つけ、その後に次のコードを追加します。 -->
      
      <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-idp/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}"
      		...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 に属性フィルターを追加します。

    PolicyRequirementRule タグの value を、「ステップ 1:SAML サービスプロバイダーのメタデータの取得」で取得した Alibaba Cloud の entityID に設定します。

    <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:NameID の設定

  1. /opt/shibboleth-idp/conf/relying-party.xml で Alibaba Cloud の NameID を設定します。

    bean タグの relyingPartyIds を、「ステップ 1:SAML サービスプロバイダーのメタデータの取得」で取得した Alibaba Cloud の entityID に設定します。

    <!--
    	単一の 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

ステップ 8:Tomcat の再起動

Tomcat を再起動して変更を適用します。

ロールベース SSO のテスト

設定が完了したら、SSO 統合をテストします。

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

    URL の <entityID> 部分は、「ステップ 1:SAML サービスプロバイダーのメタデータの取得」で取得した Alibaba Cloud の entityID に置き換えます。

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

    SSO が実行され、指定されたロール (worker) で 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.properties および attribute-resolver-full.xml ファイルの LDAP 接続設定を確認してください。

リダイレクトエラー:The NameID is missing

ステップ 6:Shibboleth でのユーザー属性の設定」での mail 属性マッピングと、「ステップ 7:NameID の設定」での NameID 設定を確認してください。

https://<your server address>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID> にアクセスすると Unsupported Request エラーが返される場合

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

リダイレクトエラー:Cannot find SAML role attribute which is required

ステップ 6:Shibboleth でのユーザー属性の設定」で、memberof 属性から role へのマッピングと ReturnValue の値を確認してください。

リダイレクトエラー:Cannot find SAML role session name attribute which is required

ステップ 6:Shibboleth でのユーザー属性の設定」で、mail 属性の namehttps://www.aliyun.com/SAML-Role/Attributes/RoleSessionName であることを確認してください。これは、ユーザーベース SSO 設定をロールベース SSO に変換する際に name の値を更新しなかった場合によく発生します。

リダイレクトエラー:The response signature is invalid

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