このトピックでは、ロールベースのシングルサインオン (SSO) のセキュリティアサーションマークアップ言語 (SAML) 応答の構文について説明します。 このトピックでは、SAMLレスポンスのSAMLアサーションの要素についても説明します。
背景情報
SAML 2.0ベースのSSOでは、ユーザーのIDが検証された後、IDプロバイダー (IdP) が認証応答を生成し、ブラウザーまたはプログラムを使用してこの応答をAlibaba Cloudに送信します。 このレスポンスには、SAML 2.0のHTTP POSTバインディングの仕様に準拠したSAMLアサーションが含まれています。 Alibaba Cloud は、SAML アサーションを使用して、ユーザーのログインステータスと ID を判断します。 したがって、SAMLアサーションには、Alibaba Cloudが必要とする要素が含まれている必要があります。 SAMLアサーションに必要な要素が含まれていない場合、SSOは失敗します。
SAMLレスポンス
IdPからAlibaba Cloudに送信される各SAML応答に次の要素が含まれていることを確認します。 そうでない場合、SSOは失敗します。
<saml2p:Response>
<saml2:Issuer>...</saml2:Issuer>
<saml2p:Status>
...
</saml2p:Status>
<saml2:Assertion>
<saml2:Issuer>...</saml2:Issuer>
<ds:Signature>
...
</ds:Signature>
<saml2:Subject>
<saml2:NameID>${NameID}</saml2:NameID>
<saml2:SubjectConfirmation>
...
</saml2:SubjectConfirmation>
</saml2:Subject>
<saml2:Conditions>
<saml2:AudienceRestriction>
<saml2:Audience>${Audience}</saml2:Audience>
</saml2:AudienceRestriction>
</saml2:Conditions>
<saml2:AuthnStatement>
...
</saml2:AuthnStatement>
<saml2:AttributeStatement>
<saml2:Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName">
...
</saml2:Attribute>
<saml2:Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/Role">
...
</saml2:Attribute>
</saml2:AttributeStatement>
</saml2:Assertion>
</saml2p:Response>
SAMLアサーションの要素
SAMLの共通要素2.0
SAML 2.0の詳細については、「SAML 2.0」をご参照ください。
要素
説明
発行者
Issuer
要素の値は、Alibaba Cloud管理コンソールでIdPにアップロードしたメタデータファイルのEntityID
と一致する必要があります。署名
SAMLアサーションに署名する必要があります。
Signature
要素には、署名値や署名アルゴリズムなどの情報が含まれている必要があります。 署名は、署名されたSAMLアサーションが署名の生成後に変更されないことを検証するために使用されます。件名
Subject
要素には、次のサブ要素を含める必要があります。NameID
サブエレメントは1つだけです。 SAML 2.0に基づいてNameID
の値を指定する必要があります。 ただし、Alibaba CloudはNameIDの値に基づいてログオンIDを決定しません。SubjectConfirmationData
サブ要素を含むSubjectConfirmation
サブ要素は1つだけです。SubjectConfirmationData
サブ要素には、次の属性が含まれている必要があります。NotOnOrAfter
: SAMLアサーションの有効期間。受信者
: SAMLアサーションの受信者。 Alibaba Cloudは、この属性の値に基づいてSAMLアサーションの受信者をチェックします。 したがって、この属性をhttps://signin.alibabacloud.com/saml-role/sso
.
次のスクリプトは、
Subject
要素の例を示しています。<Subject> <NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">administrator</NameID> <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"> <SubjectConfirmationData NotOnOrAfter="2019-01-01T00:01:00.000Z" Recipient="https://signin.alibabacloud.com/saml-role/sso"/> </SubjectConfirmation> </Subject>
条件
Conditions
要素には、AudienceRestriction
サブ要素を含める必要があります。 AudienceRestrictionサブ要素には、1つ以上のAudience
サブ要素を含めることができます。Audience
サブ要素の値は、urn:alibaba:cloudcomputing:international
次のスクリプトは、
Conditions
要素の例を示しています。<Conditions> <AudienceRestriction> <Audience>urn:alibaba:cloudcomputing:international</Audience> </AudienceRestriction> </Conditions>
Alibaba Cloudに必要なカスタム要素
Alibaba Cloudでは、SAMLアサーションの
AttributeStatement
要素に次のAttribute
サブ要素が含まれている必要があります。Role属性:
Name
属性がhttps://www.aliyun.com/SAML-Role/Attributes/Role
に設定されたattribute
要素。このサブ要素は必須であり、1つ以上の
AttributeValue
サブ要素を含みます。 AttributeValueは、IdPのユーザーが引き受けることができるロールをリストします。 AttributeValueサブ要素の値は、ロールのAlibaba Cloud Resource Name (ARN) とIdPのARNのコンマ区切りのペアです。 ロールのARNとIdPのARNはRAMコンソールで確認できます。ロールのARNを表示するには、[ロール] ページに移動し、RAMロールの名前をクリックします。 表示されるページで、[基本情報] セクションでロールのARNを表示できます。
IdPのARNを表示するには、SSOページに移動します。 [ロールベースSSO] タブで、IdPの名前をクリックします。 [IdP情報] セクションで、IdPのARNを確認できます。
説明ロール属性に複数のAttributeValueサブ要素が含まれている場合、ユーザーはAlibaba Cloud管理コンソールにログインするときに引き受けるロールを選択する必要があります。
次のスクリプトは、Role
属性
の例を示しています。<Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/Role"> <AttributeValue>acs:ram::$account_id:role/role1,acs:ram::$account_id:saml-provider/provider1</AttributeValue> <AttributeValue>acs:ram::$account_id:role/role2,acs:ram::$account_id:saml-provider/provider1</AttributeValue> </Attribute>
説明$account_id
の値は、RAMロールとIdPを定義するAlibaba Cloudアカウントのidです。Role属性:
Name
属性がhttps://www.aliyun.com/SAML-Role/Attributes/RoleSessionName
に設定されたattribute
要素。このサブ要素は必須であり、RAMコンソールおよびActionTrailログに表示するユーザー情報を指定する
AttributeValue
サブ要素が1つだけ含まれています。 複数のユーザーが同じロールを引き受けるようにする場合は、ユーザーのRoleSessionName
属性に異なる値を指定します。 各値は、ユーザを一意に識別します。 たとえば、値を従業員IDまたはメールアドレスに設定できます。AttributeValue
サブ要素の値は、長さが2 ~ 64文字である必要があり、英数字、および次の特殊文字 (- _) のみを使用できます。 @ =
次のスクリプトは、RoleSessionName
属性
の例を示しています。<Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName"> <AttributeValue>user_id</AttributeValue> </Attribute>
SessionDuration属性:
Name
属性がhttps://www.aliyun.com/SAML-Role/Attributes/SessionDuration
に設定されたattribute
サブ要素。この要素はオプションで、各セッションの最大期間を指定する
AttributeValue
サブ要素が1つだけ含まれています。 このサブ要素の値は秒単位の整数です。 この値は、Role属性に指定された最大セッション期間を超えることはできません。 最小値は900秒です。次のスクリプトは、SessionDuration
属性
の例を示しています。<Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/SessionDuration"> <AttributeValue>1800</AttributeValue> </Attribute>
ロールセッションの最大期間
コンソールを使用してロールを引き受ける場合、ロールの最大セッション期間は、SAMLアサーションで指定されている
SessionDuration
属性の値になります。AuthnStatement
要素のSessionNotOnOrAfter
属性も指定されている場合、最大セッション期間はSessionDuration
とSessionNotOnOrAfter
の間の小さい値になります。 SessionDurationもSessionNotOnOrAfterも指定されていない場合、最大セッション期間は、ロールのmaximum session durationパラメーターとLogon Session Valid Forパラメーターの間の小さい値になります。 詳細については、「RAMユーザーのセキュリティ設定の管理」および「RAMロールの最大セッション期間の指定」をご参照ください。AssumeRoleWithSAML操作を呼び出し、
AuthnStatement
要素にSessionNotOnOrAfter
属性を定義したときにDurationSeconds
パラメーターを指定した場合、最大セッション期間はDurationSeconds
とSessionNotOnOrAfter
の間の小さい値になります。 詳細については、「AssumeRoleWithSAML」をご参照ください。 SessionDurationもSessionNotOnOrAfterも指定されていない場合、最大セッション期間はデフォルトで3,600秒です。