このトピックでは、ロールベースのシングルサインオン (SSO) における Security Assertion Markup Language (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」をご参照ください。
要素
説明
IssuerIssuer要素の値は、Alibaba Cloud 管理コンソールで [IdP] にアップロードするメタデータファイル内のEntityIDと一致する必要があります。SignatureSAML アサーションは署名する必要があります。
Signature要素には、署名値や署名アルゴリズムなどの情報が含まれている必要があります。 署名は、署名が生成された後に署名済みのSAML アサーションが変更されていないことを検証するために使用されます。SubjectSubject要素は、以下のサブ要素を含める必要があります:NameIDサブ要素は 1 つのみです。SAML 2.0 に基づいてNameIDの値を指定する必要があります。ただし、Alibaba Cloud は NameID の値に基づいてログイン ID を判断しません。「
SubjectConfirmation」サブ要素は1つだけ許可され、その中に「SubjectConfirmationData」サブ要素が含まれている必要があります。この「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>
ConditionsConditions要素は、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 リソース名 (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 です。ロール属性:
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 属性:
Attributeのサブ要素で、Name属性がhttps://www.aliyun.com/SAML-Role/Attributes/SessionDurationに設定されています。この要素はオプションであり、各セッションの最大期間を指定する
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 も指定されていない場合は、ロールの [最大セッション期間] パラメーターと [ログオン セッションの有効期間] パラメーターのうち小さい方の値が最大セッション期間になります。詳細については、「RAM ユーザーのセキュリティ設定の管理」および「RAM ロールの最大セッション期間の指定」をご参照ください。「
DurationSeconds」パラメーターをAssumeRoleWithSAML操作の呼び出し時に指定し、かつ「AuthnStatement」要素内で「SessionNotOnOrAfter」属性を定義した場合、最大セッション期間は「DurationSeconds」と「SessionNotOnOrAfter」のうち小さい方の値になります。詳細については、「AssumeRoleWithSAML」をご参照ください。「SessionDuration」も「SessionNotOnOrAfter」も指定されていない場合、最大セッション期間はデフォルトで 3,600 秒になります。