인증 응답용 SAML 어서션 구성

인증 응답용 SAML 어서션 구성 (Configure SAML assertions for the authentication response)

조직에서 사용자의 아이덴티티를 확인한 뒤, 외부 아이덴티티 프로바이더(IdP)가 AWS 로그인 엔드포인트 URL에 인증 응답을 보내요. 이 응답은 SAML 2.0의 HTTP POST Binding 표준을 따르고 다음 요소 또는 클레임을 포함하는 SAML 토큰을 담은 POST 요청이에요. SAML 호환 IdP에서 이 클레임을 구성해요. 이 클레임을 입력하는 방법은 사용하는 IdP의 문서를 참고하세요.

출처: 문서

본문

IdP가 클레임을 포함한 응답을 AWS로 보낼 때, 들어오는 클레임의 대부분이 AWS 컨텍스트 키에 매핑돼요. 이 컨텍스트 키는 정책의 Condition 요소에서 확인할 수 있어요. 사용 가능한 매핑 목록은 "SAML 속성을 AWS 트러스트 정책 컨텍스트 키에 매핑" 섹션에 있어요.

Subject와 NameID

응답은 정확히 하나의 SubjectConfirmation 요소를 포함해야 하며, 그 안의 SubjectConfirmationData 요소에 NotOnOrAfter 속성과 Recipient 속성을 모두 포함해야 해요. Recipient 속성에는 AWS 로그인 엔드포인트 URL과 일치하는 값이 있어야 해요. IdP는 이 속성을 ACS, Recipient, 또는 Target이라는 용어로 부를 수 있어요.

SAML 암호화가 필요하면 로그인 URL에 AWS가 SAML 프로바이더에 할당한 고유 식별자를 포함해야 해요. 이 식별자는 Identity provider 세부 정보 페이지에서 찾을 수 있어요. 다음 예시는 선택적 region-code를 포함한 로그인 URL 형식이에요.

https://region-code.signin.aws.amazon.com/saml

다음 예시에서 로그인 URL은 고유 식별자를 포함하며 로그인 경로에 /acs/를 추가해야 해요.

https://region-code.signin.aws.amazon.com/saml/acs/IdP-ID

가능한 region-code 값 목록은 AWS Sign-In 엔드포인트의 Region 열을 참고하세요. AWS 값에는 전역 로그인 엔드포인트 https://signin.aws.amazon.com/saml을 사용할 수도 있어요.

NameID 요소의 값은 persistent, transient, 또는 IdP 솔루션이 제공하는 전체 Format URI일 수 있어요. persistent 값은 NameID의 값이 세션 사이에 사용자에 대해 동일하다는 뜻이에요. 값이 transient이면 사용자가 각 세션마다 다른 NameID 값을 가져요. 싱글 사인온 상호작용은 다음 유형의 식별자를 지원해요.

  • urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient
  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
  • urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
  • urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName
  • urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName
  • urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos
  • urn:oasis:names:tc:SAML:2.0:nameid-format:entity

다음 발췌는 예시를 보여줘요. 표시된 값은 우리 것으로 바꿔요.

<Subject>
  <NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">
    _cbb88bf52c2510eabe00c1642d4643f41430fe25e3
  </NameID>
  <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
    <SubjectConfirmationData NotOnOrAfter="2013-11-05T02:06:42.876Z" Recipient="https://region-code.signin.aws.amazon.com/saml/SAMLSP4SHN3UIS2D558H46"/>
  </SubjectConfirmation>
</Subject>
중요

saml:aud 컨텍스트 키는 SAML recipient 속성에서 나와요. accounts.google.com:aud 같은 OIDC 오디언스 필드의 SAML 동등물이기 때문이에요.

PrincipalTag SAML 속성

(선택) Name 속성이 https://aws.amazon.com/SAML/Attributes/PrincipalTag:{TagKey}로 설정된 Attribute 요소를 사용할 수 있어요. 이 요소는 SAML 어서션에서 속성을 세션 태그로 전달할 수 있게 해줘요. 세션 태그에 대한 자세한 내용은 AWS STS에서 세션 태그 전달을 참고하세요.

속성을 세션 태그로 전달하려면 태그 값을 지정하는 AttributeValue 요소를 포함해요. 예를 들어 태그 키-값 쌍 Project = Marketing과 CostCenter = 12345를 전달하려면 다음 속성을 사용해요. 각 태그마다 별도의 Attribute 요소를 포함해요.

<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:Project">
  <AttributeValue>Marketing</AttributeValue>
</Attribute>
<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:CostCenter">
  <AttributeValue>12345</AttributeValue>
</Attribute>

위 태그를 전이적으로 설정하려면 Name 속성이 https://aws.amazon.com/SAML/Attributes/TransitiveTagKeys로 설정된 또 다른 Attribute 요소를 포함해요. 이는 세션 태그를 전이적으로 설정하는 선택적 다중 값 속성이에요. 전이적 태그는 SAML 세션을 사용해 AWS에서 다른 역할을 수임할 때(역할 체이닝) 유지돼요. 예를 들어 Principal과 CostCenter 태그를 모두 전이적으로 설정하려면 다음 속성으로 키를 지정해요.

<Attribute Name="https://aws.amazon.com/SAML/Attributes/TransitiveTagKeys">
  <AttributeValue>Project</AttributeValue>
  <AttributeValue>CostCenter</AttributeValue>
</Attribute>

Role SAML 속성

Name 속성이 https://aws.amazon.com/SAML/Attributes/Role로 설정된 Attribute 요소를 사용할 수 있어요. 이 요소는 IdP가 사용자를 매핑한 IAM 아이덴티티 프로바이더와 역할을 나열하는 하나 이상의 AttributeValue 요소를 담아요. IAM 역할과 IAM 아이덴티티 프로바이더는 AssumeRoleWithSAML에 전달되는 RoleArn과 PrincipalArn 파라미터와 같은 형식의 쉼표로 구분된 ARN 쌍으로 지정돼요. 이 요소는 최소 하나의 역할-프로바이더 쌍(AttributeValue 요소)을 포함해야 하고 여러 쌍을 포함할 수 있어요. 여러 쌍이 포함되면 사용자는 WebSSO로 AWS Management Console에 로그인할 때 어떤 역할을 수임할지 선택하라는 요청을 받아요.

중요

Attribute 태그의 Name 속성 값은 대소문자를 구분해요. 정확히 https://aws.amazon.com/SAML/Attributes/Role로 설정해야 해요.

<Attribute Name="https://aws.amazon.com/SAML/Attributes/Role">
  <AttributeValue>arn:aws:iam::account-number:role/role-name1,arn:aws:iam::account-number:saml-provider/provider-name</AttributeValue>
  <AttributeValue>arn:aws:iam::account-number:role/role-name2,arn:aws:iam::account-number:saml-provider/provider-name</AttributeValue>
  <AttributeValue>arn:aws:iam::account-number:role/role-name3,arn:aws:iam::account-number:saml-provider/provider-name</AttributeValue>
</Attribute>

RoleSessionName SAML 속성

Name 속성이 https://aws.amazon.com/SAML/Attributes/RoleSessionName로 설정된 Attribute 요소를 사용할 수 있어요. 이 요소는 역할이 수임될 때 발급되는 임시 자격 증명의 식별자를 제공하는 하나의 AttributeValue 요소를 담아요. 이를 사용해 임시 자격 증명을 애플리케이션을 사용하는 사용자와 연결할 수 있어요. 이 요소는 AWS Management Console에 사용자 정보를 표시하는 데 사용돼요. AttributeValue 요소의 값은 2~64자여야 하며, 영숫자 문자, 밑줄, 그리고 . , + = @ -(하이픈) 문자만 포함할 수 있어요. 공백을 포함할 수 없어요. 값은 보통 사용자 ID(john)나 이메일 주소([email protected])예요. 공백을 포함하는 값(사용자 표시 이름 John Doe 같은)이어서는 안 돼요.

중요

Attribute 태그의 Name 속성 값은 대소문자를 구분해요. 정확히 https://aws.amazon.com/SAML/Attributes/RoleSessionName으로 설정해야 해요.

<Attribute Name="https://aws.amazon.com/SAML/Attributes/RoleSessionName">
  <AttributeValue>user-id-name</AttributeValue>
</Attribute>

SessionDuration SAML 속성

(선택) Name 속성이 https://aws.amazon.com/SAML/Attributes/SessionDuration로 설정된 Attribute 요소를 사용할 수 있어요. 이 요소는 사용자가 새 임시 자격 증명을 요청해야 하기 전에 AWS Management Console에 접근할 수 있는 시간을 지정하는 하나의 AttributeValue 요소를 담아요. 값은 세션의 초 수를 나타내는 정수예요. 값의 범위는 900초(15분)부터 43200초(12시간)까지예요. 이 속성이 없으면 자격 증명은 1시간 동안 지속돼요(AssumeRoleWithSAML API의 DurationSeconds 파라미터의 기본값).

이 속성을 사용하려면 콘솔 로그인 웹 엔드포인트 https://region-code.signin.aws.amazon.com/saml을 통해 SAML 프로바이더가 AWS Management Console에 싱글 사인온 접근을 제공하도록 구성해야 해요. 가능한 region-code 값 목록은 AWS Sign-In 엔드포인트의 Region 열을 참고하세요. 선택적으로 https://signin.aws.amazon.com/static/saml URL을 사용할 수 있어요. 이 속성은 세션을 AWS Management Console로만 연장하며 다른 자격 증명의 수명은 연장할 수 없어요. 하지만 AssumeRoleWithSAML API 호출에 존재하면 세션의 지속 시간을 줄이는 데 사용될 수 있어요. 호출이 반환하는 자격 증명의 기본 수명은 60분이에요.

또한 SessionNotOnOrAfter 속성도 정의되어 있다면, SessionDuration 또는 SessionNotOnOrAfter 두 속성 중 더 작은 값이 콘솔 세션의 최대 지속 시간을 만든다는 점에 주의하세요.

연장된 지속 시간으로 콘솔 세션을 활성화하면 자격 증명의 손상 위험이 높아져요. 이 위험을 완화하는 데 도움이 되도록 IAM 콘솔의 Role Summary 페이지에서 Revoke Sessions를 선택해 어떤 역할의 활성 콘솔 세션이든 즉시 비활성화할 수 있어요. 자세한 내용은 IAM 역할 임시 보안 자격 증명 철회를 참고하세요.

중요

Attribute 태그의 Name 속성 값은 대소문자를 구분해요. 정확히 https://aws.amazon.com/SAML/Attributes/SessionDuration으로 설정해야 해요.

<Attribute Name="https://aws.amazon.com/SAML/Attributes/SessionDuration">
  <AttributeValue>1800</AttributeValue>
</Attribute>

SourceIdentity SAML 속성

(선택) Name 속성이 https://aws.amazon.com/SAML/Attributes/SourceIdentity로 설정된 Attribute 요소를 사용할 수 있어요. 이 요소는 IAM 역할을 사용하는 사람이나 애플리케이션의 식별자를 제공하는 하나의 AttributeValue 요소를 담아요. 소스 아이덴티티 값은 SAML 세션을 사용해 AWS에서 다른 역할을 수임할 때(역할 체이닝) 유지돼요. 소스 아이덴티티 값은 역할 세션 동안 수행되는 모든 작업의 요청에 존재해요. 설정된 값은 역할 세션 동안 변경할 수 없어요. 관리자는 AWS CloudTrail 로그로 소스 아이덴티티 정보를 모니터링·감사해 공유 역할로 누가 작업을 수행했는지 확인할 수 있어요.

AttributeValue 요소의 값은 2~256자여야 하며, 영숫자 문자, 밑줄, 그리고 . , + = @ -(하이픈) 문자만 포함할 수 있어요. 공백을 포함할 수 없어요. 값은 보통 사용자와 연관된 속성으로, 사용자 ID(john)나 이메일 주소([email protected])예요. 공백을 포함하는 값(사용자 표시 이름 John Doe 같은)이어서는 안 돼요. 소스 아이덴티티 사용에 대한 자세한 내용은 수임된 역할로 수행한 작업 모니터링·제어를 참고하세요.

중요

SAML 어서션이 SourceIdentity 속성을 사용하도록 구성됐다면 역할 트러스트 정책에도 sts:SetSourceIdentity 작업이 포함되어야 해요. 그렇지 않으면 역할 수임 작업이 실패해요. 소스 아이덴티티 사용에 대한 자세한 내용은 수임된 역할로 수행한 작업 모니터링·제어를 참고하세요.

소스 아이덴티티 속성을 전달하려면 소스 아이덴티티의 값을 지정하는 AttributeValue 요소를 포함해요. 예를 들어 소스 아이덴티티 Diego를 전달하려면 다음 속성을 사용해요.

<Attribute Name="https://aws.amazon.com/SAML/Attributes/SourceIdentity">
  <AttributeValue>Diego</AttributeValue>
</Attribute>

SAML 속성을 AWS 트러스트 정책 컨텍스트 키에 매핑

이 섹션의 표는 흔히 사용되는 SAML 속성과 그것들이 AWS의 트러스트 정책 조건 컨텍스트 키에 어떻게 매핑되는지 나열해요. 이 키를 사용해 역할에 대한 접근을 제어할 수 있어요. 그러려면 SAML 접근 요청에 수반되는 어서션에 포함된 값과 키를 비교해요.

중요

이 키는 IAM 트러스트 정책(누가 역할을 수임할 수 있는지 결정하는 정책)에서만 사용할 수 있으며 권한 정책에는 적용되지 않아요.

eduPerson 및 eduOrg 속성 표에서 값은 문자열 또는 문자열 목록으로 입력돼요. 문자열 값은 IAM 트러스트 정책에서 StringEquals 또는 StringLike 조건으로 테스트할 수 있어요. 문자열 목록을 포함하는 값은 ForAnyValue와 ForAllValues 정책 집합 연산자로 트러스트 정책에서 값을 테스트할 수 있어요.

참고

AWS 컨텍스트 키 하나당 클레임 하나만 포함해야 해요. 둘 이상을 포함하면 하나의 클레임만 매핑돼요.

다음 표는 eduPerson과 eduOrg 속성을 보여줘요.

eduPerson 또는 eduOrg 속성 (Name 키) 매핑되는 AWS 컨텍스트 키 (FriendlyName 키) 유형
urn:oid:1.3.6.1.4.1.5923.1.1.1.1 eduPersonAffiliation 문자열 목록
urn:oid:1.3.6.1.4.1.5923.1.1.1.2 eduPersonNickname 문자열 목록
urn:oid:1.3.6.1.4.1.5923.1.1.1.3 eduPersonOrgDN 문자열
urn:oid:1.3.6.1.4.1.5923.1.1.1.4 eduPersonOrgUnitDN 문자열 목록
urn:oid:1.3.6.1.4.1.5923.1.1.1.5 eduPersonPrimaryAffiliation 문자열
urn:oid:1.3.6.1.4.1.5923.1.1.1.6 eduPersonPrincipalName 문자열
urn:oid:1.3.6.1.4.1.5923.1.1.1.7 eduPersonEntitlement 문자열 목록
urn:oid:1.3.6.1.4.1.5923.1.1.1.8 eduPersonPrimaryOrgUnitDN 문자열
urn:oid:1.3.6.1.4.1.5923.1.1.1.9 eduPersonScopedAffiliation 문자열 목록
urn:oid:1.3.6.1.4.1.5923.1.1.1.10 eduPersonTargetedID 문자열 목록
urn:oid:1.3.6.1.4.1.5923.1.1.1.11 eduPersonAssurance 문자열 목록
urn:oid:1.3.6.1.4.1.5923.1.2.1.2 eduOrgHomePageURI 문자열 목록
urn:oid:1.3.6.1.4.1.5923.1.2.1.3 eduOrgIdentityAuthNPolicyURI 문자열 목록
urn:oid:1.3.6.1.4.1.5923.1.2.1.4 eduOrgLegalName 문자열 목록
urn:oid:1.3.6.1.4.1.5923.1.2.1.5 eduOrgSuperiorURI 문자열 목록
urn:oid:1.3.6.1.4.1.5923.1.2.1.6 eduOrgWhitePagesURI 문자열 목록
urn:oid:2.5.4.3 cn 문자열 목록

다음 표는 Active Directory 속성을 보여줘요.

AD 속성 매핑되는 AWS 컨텍스트 키 유형
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name name 문자열
http://schemas.xmlsoap.org/claims/CommonName commonName 문자열
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname givenName 문자열
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname surname 문자열
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress mail 문자열
http://schemas.microsoft.com/ws/2008/06/identity/claims/primarygroupsid uid 문자열

다음 표는 X.500 속성을 보여줘요.

X.500 속성 매핑되는 AWS 컨텍스트 키 유형
2.5.4.3 commonName 문자열
2.5.4.4 surname 문자열
2.4.5.42 givenName 문자열
2.5.4.45 x500UniqueIdentifier 문자열
0.9.2342.19200300100.1.1 uid 문자열
0.9.2342.19200300100.1.3 mail 문자열
0.9.2342.19200300.100.1.45 organizationStatus 문자열

더 알아보기 (Learn more)