AWS STS에서 세션 태그 전달

AWS STS에서 세션 태그 전달 (Pass session tags in AWS STS)

세션 태그(session tags)는 IAM 역할을 수임하거나 AWS STS에서 사용자를 페더레이션할 때 전달하는 키-값 쌍 속성이에요. AWS CLI 또는 AWS API 요청을 AWS STS를 통해(또는 아이덴티티 프로바이더(IdP)를 통해) 보내는 방식으로 전달해요. AWS STS로 임시 보안 자격 증명을 요청하면 **세션(session)**이 생성돼요. 세션은 만료되며 접근 키 쌍과 세션 토큰 같은 자격 증명을 갖고 있어요. 세션 자격 증명으로 후속 요청을 보내면 그 요청 컨텍스트에 aws:PrincipalTag 컨텍스트 키가 포함돼요. 정책의 Condition 요소에서 aws:PrincipalTag 키를 사용해 그 태그를 기준으로 접근을 허용하거나 거부할 수 있어요.

출처: 문서

본문

임시 자격 증명으로 요청을 보내면, 우리 프린시펄에 태그 집합이 포함될 수 있어요. 이 태그는 다음 소스에서 온 거예요.

  • 세션 태그 — AWS CLI 또는 AWS API를 사용해 역할을 수임하거나 사용자를 페더레이션할 때 전달한 태그. 이 작업들에 대한 자세한 내용은 이 문서의 세션 태그 전달 작업을 참고하세요.
  • 들어오는 전이적 세션 태그(Incoming transitive session tags) — 역할 체인에서 이전 세션에서 상속받은 태그. 자세한 내용은 이 문서의 세션 태그로 역할 체이닝을 참고하세요.
  • IAM 태그 — 우리 IAM 수임 역할에 붙은 태그.

다루는 주제

  • 세션 태그 전달 작업
  • 세션 태그에 대해 알아야 할 사항
  • 세션 태그 추가에 필요한 권한
  • AssumeRole로 세션 태그 전달
  • AssumeRoleWithSAML로 세션 태그 전달
  • AssumeRoleWithWebIdentity로 세션 태그 전달
  • GetFederationToken으로 세션 태그 전달
  • 세션 태그로 역할 체이닝
  • ABAC에 세션 태그 사용
  • CloudTrail에서 세션 태그 보기

세션 태그 전달 작업

AWS STS의 다음 AWS CLI 또는 AWS API 작업으로 세션 태그를 전달할 수 있어요. AWS Management Console의 역할 전환(Switch Role) 기능은 세션 태그를 전달할 수 없어요.

세션 태그를 **전이적(transitive)**으로 설정할 수도 있어요. 전이적 태그는 역할 체이닝(role chaining) 동안 유지돼요. 자세한 내용은 세션 태그로 역할 체이닝을 참고하세요.

다음 표는 세션 태그를 전달하는 방법을 비교해요.

작업 역할을 수임할 수 있는 주체 태그 전달 방법 전이적 태그 설정 방법
assume-role CLI 또는 AssumeRole API 작업 IAM 사용자 또는 세션 Tags API 파라미터 또는 --tags CLI 옵션 TransitiveTagKeys API 파라미터 또는 --transitive-tag-keys CLI 옵션
assume-role-with-saml CLI 또는 AssumeRoleWithSAML API 작업 SAML 아이덴티티 프로바이더로 인증된 모든 사용자 PrincipalTag SAML 속성 TransitiveTagKeys SAML 속성
assume-role-with-web-identity CLI 또는 AssumeRoleWithWebIdentity API 작업 OIDC 프로바이더로 인증된 모든 사용자 PrincipalTag OIDC 토큰 TransitiveTagKeys OIDC 토큰
get-federation-token CLI 또는 GetFederationToken API 작업 IAM 사용자 또는 루트 사용자 Tags API 파라미터 또는 --tags CLI 옵션 지원 안 함

세션 태그를 지원하는 작업은 다음 조건에서 실패할 수 있어요.

  • 50개가 넘는 세션 태그를 전달하면
  • 세션 태그 키의 평문이 128자를 초과하면
  • 세션 태그 값의 평문이 256자를 초과하면
  • 세션 정책 평문의 전체 크기가 2048자를 초과하면

세션 정책과 세션 태그는 세션 토큰 크기에 더해져요. 토큰이 크기 제한을 초과하면 작업이 실패해요. 오류 메시지는 세션 토큰 크기와 최대 허용 크기를 바이트 단위로 알려줘요. AWS STS API 응답의 SessionTokenUtilization을 모니터링해 사용량을 추적해요.

세션 태그에 대해 알아야 할 사항

세션 태그를 사용하기 전에 세션과 태그에 대한 다음 세부 사항을 검토해요.

  • 세션 태그를 사용할 때, 태그를 전달하는 IdP에 연결된 모든 역할의 트러스트 정책에 sts:TagSession 권한이 있어야 해요. 트러스트 정책에 이 권한이 없는 역할은 AssumeRole 작업이 실패해요.
  • 세션을 요청할 때 프린시펄 태그를 세션 태그로 지정할 수 있어요. 그 태그는 세션의 자격 증명으로 보내는 요청에 적용돼요.
  • 세션 태그는 키-값 쌍을 사용해요. 예를 들어 세션에 연락처 정보를 추가하려면 세션 태그 키 email과 값 [email protected]을 넣으면 돼요.
  • 세션 태그는 IAM과 AWS STS의 태그 명명 규칙을 따라야 해요. 이 문서는 세션 태그에 적용되는 대소문자 구분과 제한된 접두사에 대한 정보를 포함해요.
  • 새 세션 태그는 문자 대소문자와 관계없이 같은 태그 키를 가진 기존 수임 역할·페더레이션 사용자 세션 태그를 덮어써요.
  • AWS Management Console로는 세션 태그를 전달할 수 없어요.
  • 세션 태그는 현재 세션에서만 유효해요.
  • 세션 태그는 역할 체이닝을 지원해요. 기본적으로 AWS STS는 후속 역할 세션에 태그를 전달하지 않아요. 하지만 세션 태그를 전이적으로 설정할 수 있어요. 전이적 태그는 역할 체이닝 동안 유지되고, 역할 트러스트 정책 평가 후 일치하는 ResourceTag 값을 대체해요. 자세한 내용은 세션 태그로 역할 체이닝을 참고하세요.
  • 세션 태그로 리소스 접근을 제어하거나, 후속 세션에 전달할 수 있는 태그를 제어할 수 있어요. 자세한 내용은 IAM 튜토리얼: ABAC에 SAML 세션 태그 사용을 참고하세요.
  • AWS CloudTrail 로그에서 세션 태그를 포함한 세션의 프린시펄 태그를 볼 수 있어요. 자세한 내용은 CloudTrail에서 세션 태그 보기를 참고하세요.
  • 각 세션 태그에 단일 값을 전달해야 해요. AWS STS는 다중 값 세션 태그를 지원하지 않아요.
  • 최대 50개의 세션 태그를 전달할 수 있어요. AWS 계정의 IAM 리소스 수와 크기는 제한돼 있어요. 자세한 내용은 IAM과 AWS STS 할당량을 참고하세요.
  • 세션 정책과 세션 태그는 세션 토큰 크기에 더해져요. 토큰이 크기 제한을 초과하면 AWS CLI 또는 AWS API가 오류를 반환해요. 오류 메시지는 세션 토큰 크기와 최대 허용 크기를 바이트 단위로 알려줘요. SessionTokenUtilization 응답 요소는 토큰이 크기 제한의 몇 퍼센트를 쓰는지 보여줘요. PackedPolicySize 응답 요소는 폐기됐어요. 대신 SessionTokenUtilization을 사용하세요.

세션 태그 추가에 필요한 권한

API 작업과 일치하는 작업(action) 외에도 정책에 다음 권한 전용 작업이 있어야 해요.

sts:TagSession
중요

세션 태그를 사용할 때, IdP에 연결된 모든 역할의 트러스트 정책에 sts:TagSession 권한이 있어야 해요. 이 권한 없이 세션 태그를 전달하는 IdP에 연결된 역할은 AssumeRole 작업이 실패해요. 각 역할의 트러스트 정책을 갱신하고 싶지 않다면, 세션 태그 전달 전용으로 별도의 IdP 인스턴스를 사용할 수 있어요. 그리고 sts:TagSession 권한을 그 별도 IdP에 연결된 역할에만 추가하면 돼요.

sts:TagSession 작업을 다음 조건 키와 함께 사용할 수 있어요.

  • aws:PrincipalTag — 요청을 하는 프린시펄에 붙은 태그를 정책에서 지정한 태그와 비교해요. 예를 들어 요청하는 프린시펄이 지정된 태그를 가진 경우에만 세션 태그를 전달하도록 허용할 수 있어요.
  • aws:RequestTag — 요청에서 전달된 태그 키-값 쌍을 정책에서 지정한 태그 쌍과 비교해요. 예를 들어 프린시펄이 지정된 세션 태그를, 지정된 값으로만 전달하도록 허용할 수 있어요.
  • aws:ResourceTag — 정책에서 지정한 태그 키-값 쌍을 리소스에 붙은 키-값 쌍과 비교해요. 예를 들어 프린시펄이 수임하는 역할에 지정된 태그가 포함된 경우에만 세션 태그를 전달하도록 허용할 수 있어요.
  • aws:TagKeys — 요청의 태그 키를 정책에서 지정한 키와 비교해요. 예를 들어 프린시펄이 지정된 태그 키를 가진 세션 태그만 전달하도록 허용할 수 있어요. 이 조건 키는 전달할 수 있는 세션 태그의 최대 집합을 제한해요.
  • sts:TransitiveTagKeys — 요청의 전이적 세션 태그 키를 정책에서 지정한 키와 비교해요. 예를 들어 프린시펄이 특정 태그만 전이적으로 설정하도록 허용하는 정책을 쓸 수 있어요. 전이적 태그는 역할 체이닝 동안 유지돼요. 자세한 내용은 세션 태그로 역할 체이닝을 참고하세요.

예를 들어 다음 역할 트러스트 정책은 test-session-tags 사용자가 연결된 정책으로 역할을 수임하도록 허용해요. 그 사용자가 역할을 수임할 때 AWS CLI 또는 AWS API로 세 개의 필수 세션 태그와 필수 외부 ID를 전달해야 해요. 또한 사용자는 Project와 Department 태그를 전이적으로 설정할 수도 있어요.

세션 태그용 역할 트러스트 정책 예시
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowIamUserAssumeRole",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Principal": {"AWS": "arn:aws:iam::123456789012:user/test-session-tags"},
            "Condition": {
                "StringLike": {
                    "aws:RequestTag/Project": "*",
                    "aws:RequestTag/CostCenter": "*",
                    "aws:RequestTag/Department": "*"
                },
                "StringEquals": {
                    "sts:ExternalId": "Example987"
                }
            }
        },
        {
            "Sid": "AllowPassSessionTagsAndTransitive",
            "Effect": "Allow",
            "Action": "sts:TagSession",
            "Principal": {"AWS": "arn:aws:iam::123456789012:user/test-session-tags"},
            "Condition": {
                "StringLike": {
                    "aws:RequestTag/Project": "*",
                    "aws:RequestTag/CostCenter": "*"
                },
                "StringEquals": {
                    "aws:RequestTag/Department": ["Engineering", "Marketing"]
                },
                "ForAllValues:StringEquals": {
                    "sts:TransitiveTagKeys": ["Project", "Department"]
                }
            }
        }
    ]
}

이 정책이 하는 일은 무엇일까요?

  • AllowIamUserAssumeRole 스테이트먼트는 test-session-tags 사용자가 연결된 정책으로 역할을 수임하도록 허용해요. 그 사용자가 역할을 수임할 때 필수 세션 태그와 외부 ID를 전달해야 해요.
    • 이 스테이트먼트의 첫 번째 조건 블록은 사용자가 Project, CostCenter, Department 세션 태그를 전달하도록 요구해요. 이 스테이트먼트에서는 태그 값이 중요하지 않으므로 태그 값에 와일드카드(*)를 쓸 수 있어요. 이 블록은 사용자가 최소한 세 개의 세션 태그를 전달하도록 보장해요. 그렇지 않으면 작업이 실패해요. 사용자는 추가 태그를 전달할 수도 있어요.
    • 두 번째 조건 블록은 사용자가 값이 Example987인 외부 ID를 전달하도록 요구해요.
  • AllowPassSessionTagsAndTransitive 스테이트먼트는 sts:TagSession 권한 전용 작업을 허용해요. 사용자가 세션 태그를 전달하려면 이 작업이 허용돼야 해요. 첫 번째 스테이트먼트만 포함하고 두 번째 스테이트먼트를 빼면 사용자는 역할을 수임할 수 없어요.
    • 이 스테이트먼트의 첫 번째 조건 블록은 사용자가 CostCenter와 Project 세션 태그에 어떤 값이든 전달하도록 허용해요. 정책에서 태그 값에 와일드카드(*)를 써서 이렇게 하며, 이 경우 StringLike 조건 연산자를 사용해야 해요.
    • 두 번째 조건 블록은 사용자가 Department 세션 태그에 Engineering 또는 Marketing 값만 전달하도록 허용해요.
    • 세 번째 조건 블록은 전이적으로 설정할 수 있는 태그의 최대 집합을 나열해요. 사용자는 전이적 태그의 부분 집합을 설정하거나 아무것도 설정하지 않을 수 있어요. 추가 태그를 전이적으로 설정할 수는 없어요. "Null":{"sts:TransitiveTagKeys":"false"}을 포함하는 조건 블록을 추가해 최소 하나 이상의 태그를 전이적으로 설정하도록 요구할 수도 있어요.

AssumeRole로 세션 태그 전달

AssumeRole 작업은 AWS 리소스에 접근하는 데 쓸 수 있는 임시 자격 증명 집합을 반환해요. IAM 사용자 또는 역할 자격 증명으로 AssumeRole을 호출할 수 있어요. 역할을 수임하면서 세션 태그를 전달하려면 --tags AWS CLI 옵션 또는 Tags AWS API 파라미터를 사용해요.

태그를 전이적으로 설정하려면 --transitive-tag-keys AWS CLI 옵션 또는 TransitiveTagKeys AWS API 파라미터를 사용해요. 전이적 태그는 역할 체이닝 동안 유지돼요. 자세한 내용은 세션 태그로 역할 체이닝을 참고하세요.

다음 예시는 AssumeRole을 사용하는 샘플 요청이에요. 이 예시에서 my-role-example 역할을 수임하면 my-session이라는 세션이 생성돼요. 세션 태그 키-값 쌍 Project = Automation, CostCenter = 12345, Department = Engineering을 추가해요. 또한 키를 지정해 Project와 Department 태그를 전이적으로 설정해요. 각 세션 태그에 단일 값을 전달해야 해요. AWS STS는 다중 값 세션 태그를 지원하지 않아요.

AssumeRole CLI 요청 예시
aws sts assume-role \
--role-arn arn:aws:iam::123456789012:role/my-role-example \
--role-session-name my-session \
--tags Key=Project,Value=Automation Key=CostCenter,Value=12345 Key=Department,Value=Engineering \
--transitive-tag-keys Project Department \
--external-id Example987

AssumeRoleWithSAML로 세션 태그 전달

AssumeRoleWithSAML 작업은 SAML 기반 페더레이션으로 인증해요. 이 작업은 AWS 리소스에 접근하는 데 쓸 수 있는 임시 자격 증명 집합을 반환해요. AWS Management Console 접근에 SAML 기반 페더레이션을 사용하는 방법은 SAML 2.0 페더레이션 프린시펄의 AWS Management Console 접근 활성화를, AWS CLI 또는 AWS API 접근에 대한 세부 사항은 SAML 2.0 페더레이션을 참고하세요. Active Directory 사용자를 위한 SAML 페더레이션 구성 튜토리얼은 AWS Security Blog의 Active Directory Federation Services(ADFS)를 통한 AWS 페더레이션 인증을 참고하세요.

관리자로서 회사 디렉터리 구성원이 AWS STS AssumeRoleWithSAML 작업으로 AWS에 페더레이션하도록 허용할 수 있어요. 그러려면 다음 작업을 완료해야 해요.

  1. 네트워크를 AWS용 SAML 프로바이더로 구성
  2. IAM에 SAML 프로바이더 생성
  3. SAML 2.0 페더레이션용 역할 생성(콘솔)
  4. SAML IdP 구성 마무리 및 SAML 인증 응답용 어서션 생성

AWS에는 세션 태그에 대해 인증된 엔드투엔드 경험이 있는 아이덴티티 프로바이더가 포함돼 있어요. 이 아이덴티티 프로바이더로 세션 태그를 구성하는 방법은 타사 SAML 솔루션 프로바이더를 AWS와 통합을 참고하세요.

SAML 속성을 세션 태그로 전달하려면 Name 속성이 https://aws.amazon.com/SAML/Attributes/PrincipalTag:{TagKey}로 설정된 Attribute 요소를 포함해요. 태그 값을 지정하려면 AttributeValue 요소를 사용해요. 각 세션 태그마다 별도의 Attribute 요소를 포함해요.

예를 들어 다음 아이덴티티 속성을 세션 태그로 전달한다고 해 보죠.

  • Project:Automation
  • CostCenter:12345
  • Department:Engineering

이 속성들을 전달하려면 SAML 어서션에 다음 요소를 포함해요.

SAML 어서션 스니펫 예시
<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:Project">
  <AttributeValue>Automation</AttributeValue>
</Attribute>
<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:CostCenter">
  <AttributeValue>12345</AttributeValue>
</Attribute>
<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:Department">
  <AttributeValue>Engineering</AttributeValue>
</Attribute>

앞선 태그들을 전이적으로 설정하려면 Name 속성이 https://aws.amazon.com/SAML/Attributes/TransitiveTagKeys인 또 다른 Attribute 요소를 포함해요. 전이적 태그는 역할 체이닝 동안 유지돼요. 자세한 내용은 세션 태그로 역할 체이닝을 참고하세요.

Project와 Department 태그를 전이적으로 설정하려면 다음 다중 값 속성을 사용해요.

SAML 어서션 스니펫 예시
<Attribute Name="https://aws.amazon.com/SAML/Attributes/TransitiveTagKeys">
  <AttributeValue>Project</AttributeValue>
  <AttributeValue>Department</AttributeValue>
</Attribute>

AssumeRoleWithWebIdentity로 세션 태그 전달

OpenID Connect(OIDC) 호환 페더레이션으로 AssumeRoleWithWebIdentity 작업을 인증해요. 이 작업은 AWS 리소스에 접근하는 데 쓸 수 있는 임시 자격 증명 집합을 반환해요. AWS Management Console 접근에 웹 아이덴티티 페더레이션을 사용하는 방법은 OIDC 페더레이션을 참고하세요.

OpenID Connect(OIDC)에서 세션 태그를 전달하려면 AssumeRoleWithWebIdentity 요청을 보낼 때 JSON 웹 토큰(JWT)에 세션 태그를 포함해야 해요. OIDC 토큰과 클레임에 대해 더 알아보려면 Amazon Cognito 개발자 가이드의 User Pools와 토큰 사용을 참고하세요.

AWS는 JWT에 세션 태그를 포함하는 두 가지 클레임 형식을 지원해요.

  • 중첩 클레임 형식(Nested claim format)
  • 평면화 클레임 형식(Flattened claim format)

중첩 클레임 형식

중첩 클레임 형식은 JWT의 https://aws.amazon.com/tags 네임스페이스 안에 구조를 사용해요. 이 형식에서:

  • 프린시펄 태그는 principal_tags 키 아래의 중첩 객체로 표현돼요.
  • 각 프린시펄 태그는 단일 문자열 값이에요.
  • 전이적 태그 키는 transitive_tag_keys 키 아래의 배열로 표현돼요.
  • principal_tags와 transitive_tag_keys 모두 https://aws.amazon.com/tags 네임스페이스 아래에 중첩돼요.

중첩 객체 형식을 사용하는 디코딩된 JWT 예시:

중첩 클레임 형식을 사용한 디코딩된 JSON 웹 토큰 예시
{
    "sub": "johndoe",
    "aud": "ac_oic_client",
    "jti": "ZYUCeRMQVtqHypVPWAN3VB",
    "iss": "https://xyz.com",
    "iat": 1566583294,
    "exp": 1566583354,
    "auth_time": 1566583292,
    "https://aws.amazon.com/tags": {
        "principal_tags": {
            "Project": ["Automation"],
            "CostCenter": ["987654"],
            "Department": ["Engineering"]
        },
        "transitive_tag_keys": [
            "Project",
            "CostCenter"
        ]
    }
}

평면화 클레임 형식

평면화 클레임 형식은 Microsoft Entra ID처럼 JWT 클레임의 중첩 객체를 지원하지 않는 아이덴티티 프로바이더와 호환돼요. 이 형식에서:

  • 프린시펄 태그는 https://aws.amazon.com/tags/principal_tags/ 접두사의 별도 클레임으로 표현돼요.
  • 각 프린시펄 태그는 단일 문자열 값이에요.
  • 전이적 태그 키는 https://aws.amazon.com/tags/transitive_tag_keys 접두사의 문자열 배열 하나로 표현돼요.

이제 같은 정보가 평면화 클레임 형식으로 어떻게 표현되는지 볼게요.

평면화 클레임 형식을 사용한 디코딩된 JSON 웹 토큰 예시
{
    "sub": "johndoe",
    "aud": "ac_oic_client",
    "jti": "ZYUCeRMQVtqHypVPWAN3VB",
    "iss": "https://xyz.com",
    "iat": 1566583294,
    "exp": 1566583354,
    "auth_time": 1566583292,
    "https://aws.amazon.com/tags/principal_tags/Project": "Automation",
    "https://aws.amazon.com/tags/principal_tags/CostCenter": "987654",
    "https://aws.amazon.com/tags/principal_tags/Department": "Engineering",
    "https://aws.amazon.com/tags/transitive_tag_keys": [
        "Project",
        "CostCenter"
    ]
}

두 디코딩된 JWT 예시 모두 Project, CostCenter, Department 세션 태그로 AssumeRoleWithWebIdentity를 호출하는 것을 보여줘요. 두 토큰 모두 Project와 CostCenter 태그를 전이적으로 설정해요. 전이적 태그는 역할 체이닝 동안 유지돼요. 자세한 내용은 세션 태그로 역할 체이닝을 참고하세요.

평면화 클레임 형식은 중첩 클레임 형식과 같은 결과를 내지만 태그에 평면화 구조를 사용해요. JWT 클레임에 중첩 JSON 객체를 지원하지 않는 환경에서도 세션 태그를 포함할 수 있게 해줘요. 어떤 형식을 쓰든 아이덴티티 프로바이더가 적절한 클레임 구조의 토큰을 발급하도록 구성돼 있는지 확인해요. AWS는 두 클레임 형식을 모두 지원하므로, 아이덴티티 프로바이더의 요구 사항에 가장 잘 맞는 것을 고르면 돼요.

GetFederationToken으로 세션 태그 전달

GetFederationToken은 사용자를 페더레이션할 수 있게 해줘요. 이 작업은 AWS 리소스에 접근하는 데 쓸 수 있는 임시 자격 증명 집합을 반환해요. 페더레이션 사용자 세션에 태그를 추가하려면 --tags AWS CLI 옵션 또는 Tags AWS API 파라미터를 사용해요. GetFederationToken을 쓸 때는 세션 태그를 전이적으로 설정할 수 없어요 — 임시 자격 증명으로 역할을 수임할 수 없기 때문이에요. 이 경우 역할 체이닝을 사용할 수 없어요.

다음 예시는 GetFederationToken을 사용하는 샘플 요청이에요. 이 예시에서 토큰을 요청하면 my-fed-user라는 세션이 생성돼요. 세션 태그 키-값 쌍 Project = Automation과 Department = Engineering을 추가해요.

GetFederationToken CLI 요청 예시
aws sts get-federation-token \
--name my-fed-user \
--tags key=Project,value=Automation key=Department,value=Engineering

GetFederationToken 작업이 반환한 임시 자격 증명을 사용할 때, 세션의 프린시펄 태그에는 사용자 태그와 전달된 세션 태그가 모두 포함돼요.

세션 태그로 역할 체이닝

하나의 역할을 수임한 뒤 그 임시 자격 증명으로 또 다른 역할을 수임할 수 있어요. 세션에서 세션으로 이어갈 수 있는데, 이를 **역할 체이닝(role chaining)**이라고 해요. 역할을 수임하면서 세션 태그를 전달할 때 키를 전이적으로 설정할 수 있어요. 이렇게 하면 그 세션 태그가 역할 체인의 후속 세션으로 전달돼요. 역할 태그는 전이적으로 설정할 수 없어요. 후속 세션에 태그를 전달하려면 태그를 세션 태그로 지정해야 해요.

참고

전이적 태그는 역할 체이닝 동안 유지되고, 역할 트러스트 정책 평가 후 일치하는 ResourceTag 값을 대체해요.

다음 예시는 AWS STS가 세션 태그, 전이적 태그, 역할 태그를 역할 체인의 후속 세션에 어떻게 전달하는지 보여줘요.

이 역할 체이닝 시나리오에서 AWS CLI에 IAM 사용자 접근 키를 사용해 Role1 역할을 수임해요. 그런 다음 결과 세션 자격 증명으로 Role2 역할을 수임해요. 그리고 두 번째 세션 자격 증명으로 Role3 역할을 수임할 수 있어요. 이 요청들은 세 개의 별도 작업으로 발생해요. 각 역할은 이미 IAM에서 태그가 지정돼 있어요. 그리고 각 요청 동안 추가 세션 태그를 전달해요.

역할을 체이닝할 때 이전 세션의 태그가 후속 세션으로 유지되도록 할 수 있어요. assume-role CLI 명령으로 이렇게 하려면 태그를 세션 태그로 전달하고 전이적으로 설정해야 해요. Star = 1 태그를 세션 태그로 전달해요. 명령은 또한 역할에 Heart = 1 태그를 붙여서 세션을 사용할 때 프린시펄 태그로 적용해요. 하지만 Heart = 1 태그를 두 번째나 세 번째 세션으로 자동 전달하고 싶어요. 그러려면 그 태그를 세션 태그로 수동으로 포함해야 해요. 결과 세션의 프린시펄 태그는 두 태그를 모두 포함하고, 전이적으로 설정돼요.

이 요청은 다음 AWS CLI 명령으로 수행해요.

AssumeRole CLI 요청 예시
aws sts assume-role \
--role-arn arn:aws:iam::123456789012:role/Role1 \
--role-session-name Session1 \
--tags Key=Star,Value=1 Key=Heart,Value=1 \
--transitive-tag-keys Star Heart

그런 다음 그 세션의 자격 증명으로 Role2를 수임해요. 명령은 두 번째 역할에 Sun = 2 태그를 붙여 두 번째 세션을 사용할 때 프린시펄 태그로 적용해요. Heart와 Star 태그는 첫 번째 세션의 전이적 세션 태그를 상속해요. 두 번째 세션의 결과 프린시펄 태그는 Heart = 1, Star = 1, Sun = 2예요. Heart와 Star는 계속 전이적이에요. Role2에 붙은 Sun 태그는 세션 태그가 아니므로 전이적으로 표시되지 않아요. 후속 세션은 이 태그를 상속하지 않아요.

이 두 번째 요청은 다음 AWS CLI 명령으로 수행해요.

AssumeRole CLI 요청 예시
aws sts assume-role \
--role-arn arn:aws:iam::123456789012:role/Role2 \
--role-session-name Session2

그런 다음 두 번째 세션 자격 증명으로 Role3을 수임해요. 세 번째 세션의 프린시펄 태그는 새 세션 태그, 상속된 전이적 세션 태그, 역할 태그에서 와요. 두 번째 세션의 Heart = 1과 Star = 1 태그는 첫 번째 세션의 전이적 세션 태그에서 상속된 거예요. Sun = 2 세션 태그를 전달하려 하면 작업이 실패해요. 상속된 Star = 1 세션 태그가 역할의 Star = 3 태그를 덮어요. 역할 체이닝에서 전이적 태그의 값은 역할 트러스트 정책 평가 후 역할의 ResourceTag 값과 일치하는 값을 덮어요. 이 예시에서 Role3이 트러스트 정책에 Star를 ResourceTag로 사용한다면, ResourceTag 값을 호출 역할 세션의 전이적 태그 값으로 설정해요. 역할의 Lightning 태그도 세 번째 세션에 적용되며 전이적으로 설정되지는 않아요.

이 세 번째 요청은 다음 AWS CLI 명령으로 수행해요.

AssumeRole CLI 요청 예시
aws sts assume-role \
--role-arn arn:aws:iam::123456789012:role/Role3 \
--role-session-name Session3

ABAC에 세션 태그 사용

속성 기반 접근 제어(ABAC)는 태그 속성을 기반으로 권한을 정의하는 인가 전략이에요.

회사가 OIDC 또는 SAML 기반 아이덴티티 프로바이더(IdP)로 사용자 아이덴티티를 관리한다면, 어서션을 구성해 세션 태그를 AWS에 전달할 수 있어요. 예를 들어 기업 사용자 아이덴티티에서 직원이 AWS에 페더레이션하면 AWS는 그 속성을 결과 프린시펄에 적용해요. 그런 다음 ABAC로 그 속성을 기반으로 권한을 허용하거나 거부할 수 있어요. 자세한 내용은 IAM 튜토리얼: ABAC에 SAML 세션 태그 사용을 참고하세요.

IAM Identity Center를 ABAC와 함께 사용하는 방법은 AWS IAM Identity Center 사용자 가이드의 접근 제어용 속성을 참고하세요.

CloudTrail에서 세션 태그 보기

AWS CloudTrail로 역할 수임이나 사용자 페더레이션에 사용된 요청을 볼 수 있어요. CloudTrail 로그 파일에는 수임 역할·페더레이션 사용자 세션의 프린시펄 태그에 대한 정보가 포함돼요. 자세한 내용은 AWS CloudTrail로 IAM 및 AWS STS API 호출 로깅을 참고하세요.

예를 들어 AWS STS AssumeRoleWithSAML 요청을 만들고, 세션 태그를 전달하고, 그 태그를 전이적으로 설정했다고 해 보죠. CloudTrail 로그에서 다음 정보를 찾을 수 있어요.

AssumeRoleWithSAML CloudTrail 로그 예시
    "requestParameters": {
        "sAMLAssertionID": "_c0046cEXAMPLEb9d4b8eEXAMPLE2619aEXAMPLE",
        "roleSessionName": "MyRoleSessionName",
        "principalTags": {
            "CostCenter": "987654",
            "Project": "Unicorn"
        },
        "transitiveTagKeys": [
            "CostCenter",
            "Project"
        ],
        "durationSeconds": 3600,
        "roleArn": "arn:aws:iam::123456789012:role/SAMLTestRoleShibboleth",
        "principalArn": "arn:aws:iam::123456789012:saml-provider/Shibboleth"
    }

세션 태그를 사용하는 이벤트를 보려면 다음 예시 CloudTrail 로그를 확인할 수 있어요.

  • CloudTrail 로그 파일의 AWS STS 역할 체이닝 API 이벤트 예시
  • CloudTrail 로그 파일의 SAML AWS STS API 이벤트 예시
  • CloudTrail 로그 파일의 OIDC AWS STS API 이벤트 예시

더 알아보기 (Learn more)