この例では、Shibboleth と Alibaba Cloud 間でユーザーベース シングルサインオン (SSO) をエンドツーエンドで構成する手順を説明します。
前提条件
-
Shibboleth、Tomcat、および Lightweight Directory Access Protocol (LDAP) サーバーをインストールします。
-
LDAP サーバーを構成します。
この例では、DN
uid=admin,ou=systemおよびパスワードsecretを持つ管理者アカウントを LDAP に追加します。また、DN
cn=Test User,ou=users,dc=wimpi,dc=netおよびパスワードsecretを持つテストアカウントを LDAP に追加します。次の図はアカウントの詳細を示しています。
ユーザー情報フィールドは以下のとおりです。
-
mail:Alibaba Cloud の RAM ユーザーのログイン名に対応します。
-
memberof:Alibaba Cloud の RAM ロール名に対応します。
-
samaccountname:Shibboleth へのログインに使用するユーザー名です。
-
userpassword:ログインパスワードです。
-
-
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 メタデータを取得する
-
RAM 管理者として RAM コンソール にログインします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
ユーザーベースの SSO ログイン方式 タブをクリックします。SAML サービスプロバイダーメタデータ URL セクションで、ご利用の Alibaba Cloud アカウントのメタデータ URL をコピーします。
-
コピーした URL を新しいブラウザウィンドウで開き、ページを XML ファイルとして
/opt/shibboleth-idp/metadata/aliyun-ram-user-metadata.xmlに保存します。説明EntityDescriptor要素のentityID属性値を記録してください。この値は、後続の Shibboleth 構成で必要になります。
ステップ 2: Shibboleth に Alibaba Cloud を登録する
ステップ 1:Alibaba Cloud から SAML SP メタデータを取得する で取得したメタデータファイルを指すように、/opt/shibboleth-idp/conf/metadata-providers.xml ファイルを構成します。これにより、Alibaba Cloud が Shibboleth のサービスプロバイダ (SP) として登録されます。
<!--
<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 が返すユーザー属性を構成する
-
/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> -
/opt/shibboleth/conf/attribute-resolver-full.xmlファイルを変更します。-
ユーザー情報で返す属性を定義します。この例では、
mail属性を返します。<!-- ========================================== --> <!-- Attribute Definitions --> <!-- ========================================== --> <!-- Schema: Core schema attributes--> <!-- 上記のコメントアウトされたコードブロックを見つけ、その直後に以下のコードを追加します。 --> <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> -
同じファイル内で、
/opt/shibboleth/conf/ldap.propertiesの設定を使用して LDAP 接続を構成します。<!-- 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}" ...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>
-
-
/opt/shibboleth/conf/attribute-filter.xmlファイルを変更して、属性フィルターを追加します。PolicyRequirementRule要素のvalue属性を、ステップ 1:Alibaba Cloud から SAML SP メタデータを取得する で取得した 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> </AttributeFilterPolicy>
ステップ 4: SAML NameID を構成する
-
/opt/shibboleth/conf/relying-party.xmlファイルを変更して、Alibaba Cloud の NameID を構成します。bean要素のrelyingPartyIds属性を、ステップ 1:Alibaba Cloud から SAML SP メタデータを取得する で取得した Alibaba Cloud のentityIDに置き換えます。<!-- 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> --> <!-- 上記のコメントアウトされたコードブロックを見つけ、以下のコードに置き換えます。 --> <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 の生成方法を構成します。<!-- 下記の 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'} }" /> -
/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
ステップ 5: Shibboleth から SAML IdP メタデータを取得する
-
構成を適用するために Tomcat を再起動します。
-
https://<your-server-address>/idp/shibbolethにアクセスし、メタデータファイルをローカルコンピューターに保存します。
ステップ 6:Alibaba Cloud でユーザーベース SSO を有効化する
-
RAM コンソールの左側のナビゲーションウィンドウで、 を選択します。
-
ユーザーベースの SSO ログイン方式 タブをクリックします。SSO 機能ステータス セクションで、有効 をクリックします。
説明ユーザーベース SSO はグローバル機能です。有効化すると、すべての RAM ユーザーが SSO を使用してログインする必要があります。SSO を RAM ユーザーとして構成している場合は、必要な RAM ユーザーを作成するまでこの機能を無効にしておいてください。これにより、誤った構成によるロックアウトを防ぐことができます。または、Alibaba Cloud アカウントを使用して SSO を構成してください。
-
メタデータファイル セクションで、メタデータドキュメントをアップロード をクリックし、ステップ 5:Shibboleth から SAML IdP メタデータを取得する で取得した IdP メタデータファイルをアップロードします。
-
補助ドメイン名 セクションで、編集する をクリックし、補助ドメイン名を有効にして、Shibboleth のユーザーのメールアドレスのサフィックスに設定します。
この例では、値は
testdomain.alicloud.comです。
ステップ 7:Alibaba Cloud に RAM ユーザーを作成する
-
RAM コンソールの左側のナビゲーションウィンドウで、 を選択します。
-
ユーザー ページで、ユーザーの作成 をクリックします。
-
ユーザーの作成 ページで、ログイン名 および 表示名 を入力します。
説明RAM ユーザーのログイン名プレフィックスが、Shibboleth のユーザーのメールアドレスプレフィックスと一致することを確認してください。この例では、プレフィックスは testUser です。
-
アクセスモード セクションで、コンソールへのアクセス を選択し、ログインパスワードおよびその他のパラメーターを設定します。
-
OK をクリックします。
結果の確認
構成が完了したら、Alibaba Cloud または Shibboleth のいずれからでも SSO ログインを開始できます。
Alibaba Cloud から SSO を開始する
-
RAM コンソール の 概要 ページで、RAM ユーザーのログイン URL をコピーします。
-
右上隅のプロフィール画像にカーソルを合わせて Log Out をクリックするか、コピーした RAM ユーザーのログイン URL を新しいブラウザウィンドウで開きます。
-
Log on with an enterprise IdP account をクリックします。Shibboleth のログインページにリダイレクトされます。
-
Shibboleth のログインページで、ユーザー名 (testUser) とパスワードを入力し、Log On をクリックします。
SSO を通じて自動的にログインされ、Alibaba Cloud コンソールのホームページにリダイレクトされます。
Shibboleth から SSO を開始する
-
https://<your-server-address>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID>にアクセスします。URL 内の
<entityID>は、ステップ 1:Alibaba Cloud から SAML SP メタデータを取得する で取得した Alibaba Cloud のentityIDです。 -
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.properties および attribute-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。
Alibaba Cloud で Shibboleth のメタデータファイルを再度アップロードしてください。