このトピックでは、ShibbolethからAlibaba Cloudへのロールベースのシングルサインオン (SSO) の実装方法の例を示します。 この例では、クラウドIDプロバイダー (IdP) からAlibaba cloudへのエンドツーエンドのロールベースのSSOプロセスについて説明します。
準備
Shibboleth、Apache Tomcat、およびLightweight Directory Access Protocol (LDAP) 認証サーバーをインストールします。
LDAP認証サーバーを設定します。
後で使用するために2つのアカウントを作成します。 まず、LDAP認証サーバーに管理者アカウントを作成します。 管理者アカウントの識別名 (DN) は
uid=admin,ou=system
で、パスワードはsecret
です。次に、LDAP認証サーバーにテストアカウントを作成します。 テストアカウントのDNは
cn=test User,ou=users,dc=wimpi,dc=net
で、パスワードはsecret
です。 次の図は、詳細情報を示しています。次のセクションでは、ユーザー情報フィールドについて説明します。
mail: Resource Access Management (RAM) ユーザーのログイン名。
memberof: RAMロールの名前。
samaccountname: Shibbolethへのログインに使用されるアカウントのユーザー名。
userpassword: Shibbolethへのログインに使用されるアカウントのパスワード。
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メタデータファイルをダウンロードする
Alibaba CloudアカウントでRAMコンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
ロールベースSSOタブで、SAMLタブをクリックして、SAML (Security Assertion Markup Language) サービスプロバイダー (SP) メタデータファイルのURLをコピーします。
ブラウザで新しいタブを開き、アドレスバーに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のメタデータファイルを取得
Apache Tomcatを再起動して、上記の設定を有効にします。
https:// <LDAPサーバーのIPアドレス>/idp/shibboleth
にアクセスし、メタデータファイルをコンピューターに保存します。
ステップ4: Alibaba CloudでSAML IdPを作成する
Alibaba Cloud アカウントで RAM コンソールにログインします。
左側のナビゲーションウィンドウで、[統合] > [SSO] を選択します。
[ロールベースSSO] タブで、[SAML] タブをクリックし、[IdPの追加] をクリックします。
[IdPの作成] ページで、[IdP名] をshibboleth-providerに設定し、[備考] を設定します。
[メタデータファイル] セクションで、[ファイルのアップロード] をクリックして、「手順3: ShibbolethでSAML IdPのメタデータファイルを取得する」で取得したメタデータファイルをアップロードします。
[OK] をクリックします。
作成したIdPの詳細を表示し、後で使用できるようにIdPのAlibaba Cloudリソース名 (ARN) を記録します。
ステップ5: Alibaba CloudでRAMロールを作成する
RAMコンソールの左側のナビゲーションウィンドウで、 を選択します。
ロールページで、ロールの作成をクリックします。
ロールの作成パネルで、[信頼できるエンティティ] にIdPを選択し、次へをクリックします。
RAMロール名をワーカーに設定し、注を指定します。
IdP TypeパラメーターにSAMLを選択します。
Select IdPパラメーターにステップ4: Alibaba CloudでSAML IdPを作成するで作成したshibboleth-providerを選択し、条件を読み取り、OKをクリックします。
閉じるをクリックします。
作成したRAMロールの詳細を表示し、後で使用するためにRAMロールのARNを記録します。
手順6: Shibbolethによって返されるユーザー属性の設定
/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>
/opt/shibboleth/conf/attribute-resolver-full.xml
ファイルを変更します。Shibbolethによって返されるユーザー属性を /opt/shibboleth/conf/attribute-resolver-full.xmファイルで設定します。 この例では、
mail
フィールドとmemberof
フィールドがユーザー属性として使用されます。memberof
属性のid
をrole
に設定します。これにより、ユーザーの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>
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>
/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属性を設定する
/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>
/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'} }" />
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を開始できます。
https:// <LDAPサーバーのIPアドレス>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID>
にアクセスします。<entityID>
を、手順1: Alibaba CloudのSAML SPメタデータファイルをダウンロードで取得したエンティティID
に置き換えます。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 Shibbolethでmail
フィールドが属性として正しくマップされているかどうかを確認します。Step 7: Configure the NameID attribute in the SAML responseでNameID
属性が正しく設定されているかどうかを確認してください。
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 Shibbolethのmail
属性のname
が https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName
かどうかを確認します。 一部のユーザーは、ロールベースSSOを実装するためにユーザーベースSSOの設定を変更するときに、name
フィールドの値の変更を忘れることがあります。
Alibaba Cloudにリダイレクトされると応答署名が無効
エラーメッセージが表示される場合はどうすればよいですか?
ShibbolethのメタデータファイルをAlibaba Cloudに再アップロードします。