ABAC에 SAML 세션 태그 사용하기

ABAC에 SAML 세션 태그 사용하기 (튜토리얼)

ABAC(속성 기반 접근 제어)는 속성에 따라 권한을 정의하는 인가 전략이에요. AWS에서 이러한 속성을 태그라고 해요. IAM 리소스(IAM 엔터티, 즉 사용자나 역할 포함)와 AWS 리소스에 태그를 연결할 수 있어요. 엔터티가 AWS에 요청할 때 사용되면 프린시펄이 되고 해당 프린시펄에는 태그가 포함돼요.

역할을 맡거나 사용자를 페더레이션할 때 세션 태그를 전달할 수도 있어요. 그런 다음 태그 조건 키를 사용하는 정책을 정의해 프린시펄의 태그에 따라 권한을 부여할 수 있어요. 태그로 AWS 리소스에 대한 접근을 제어하면 팀과 리소스가 성장해도 AWS 정책을 거의 변경하지 않아도 돼요. ABAC 정책은 개별 리소스를 각각 나열해야 하는 기존 AWS 정책보다 더 유연해요. ABAC와 기존 정책에 비해 가지는 장점에 대한 자세한 내용은 "속성 기반 접근 제어(ABAC) 인가로 속성에 따라 권한 정의"를 참고하세요.

출처: 문서

본문

회사가 기업 사용자 ID를 관리하기 위해 SAML 기반 자격 증명 공급자(IdP)를 사용한다면 SAML 속성을 AWS의 세밀한 접근 제어에 사용할 수 있어요. 속성에는 비용 센터 식별자, 사용자 이메일 주소, 부서 분류, 프로젝트 할당이 포함될 수 있어요. 이 속성을 세션 태그로 전달하면 이러한 세션 태그를 기반으로 AWS 접근을 제어할 수 있어요.

SAML 속성을 세션 프린시펄에 전달해 ABAC 튜토리얼을 완료하려면 "IAM 튜토리얼: 태그 기반 AWS 리소스 접근 권한 정의"의 작업을 이 항목에 포함된 변경 사항과 함께 완료해요.

사전 요구 사항 (Prerequisites)

ABAC에 SAML 세션 태그를 사용하는 단계를 수행하려면 다음이 이미 준비되어 있어야 해요.

  • 특정 속성을 가진 테스트 사용자를 만들 수 있는 SAML 기반 IdP에 대한 접근
  • 관리 권한이 있는 사용자로 로그인할 수 있는 능력
  • AWS Management Console에서 IAM 사용자, 역할, 정책을 만들고 편집한 경험. 하지만 IAM 관리 프로세스를 기억하는 데 도움이 필요하다면 ABAC 튜토리얼에서 단계별 지침을 볼 수 있는 링크를 제공해요.
  • IAM에서 SAML 기반 IdP를 설정한 경험. 더 많은 세부 정보와 자세한 IAM 문서 링크를 보려면 "AssumeRoleWithSAML을 사용한 세션 태그 전달"을 참고하세요.

1단계: 테스트 사용자 생성 (Step 1: Create test users)

"1단계: 테스트 사용자 생성"의 지침은 건너뛰어요. ID가 공급자에 정의되어 있으므로 직원을 위해 IAM 사용자를 추가할 필요가 없어요.

2단계: ABAC 정책 생성 (Step 2: Create the ABAC policy)

"2단계: ABAC 정책 생성"의 지침을 따라 IAM에서 지정된 관리형 정책을 만들어요.

3단계: SAML 역할 생성 및 구성 (Step 3: Create and configure the SAML role)

SAML에 ABAC 튜토리얼을 사용할 때는 역할을 만들고, SAML IdP를 구성하며, AWS Management Console 접근을 활성화하는 추가 단계를 수행해야 해요. 자세한 내용은 "3단계: 역할 생성"을 참고하세요.

3A단계: SAML 역할 생성 (Step 3A: Create the SAML role)

SAML 자격 증명 공급자를 신뢰하고 1단계에서 만든 test-session-tags 사용자를 신뢰하는 단일 역할을 만들어요. ABAC 튜토리얼은 서로 다른 역할 태그가 있는 별도의 역할을 사용해요. SAML IdP에서 세션 태그를 전달하고 있으므로 역할은 하나만 필요해요. SAML 기반 역할을 만드는 방법을 알아보려면 "SAML 2.0 페더레이션용 역할 생성(콘솔)"을 참고하세요.

역할 이름을 access-session-tags로 지정해요. access-same-project-team 권한 정책을 역할에 연결해요. 역할 신뢰 정책을 다음 정책을 사용하도록 편집해요. 역할의 신뢰 관계를 편집하는 자세한 지침은 "역할 신뢰 정책 업데이트"를 참고하세요.

다음 역할 신뢰 정책은 SAML 자격 증명 공급자와 test-session-tags 사용자가 역할을 맡을 수 있게 해요. 역할을 맡을 때 지정된 세 가지 세션 태그를 반드시 전달해야 해요. sts:TagSession 작업은 세션 태그 전달을 허용하는 데 필요해요.

{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Sid": "AllowSamlIdentityAssumeRole",
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRoleWithSAML",
                "sts:TagSession"
            ],
            "Principal": {"Federated":"arn:aws:iam::123456789012:saml-provider/ExampleCorpProvider"},
            "Condition": {
                "StringLike": {
                    "aws:RequestTag/cost-center": "*",
                    "aws:RequestTag/access-project": "*",
                    "aws:RequestTag/access-team": [
                        "eng",
                        "qas"
                    ]
                },
                "StringEquals": {"SAML:aud": "https://region-code.signin.aws.amazon.com/saml"}
            }
        }
    ]
}

AllowSamlIdentityAssumeRole 문은 Engineering과 Quality Assurance 팀 구성원이 Example Corporation IdP에서 AWS로 페더레이션할 때 이 역할을 맡을 수 있게 해요. ExampleCorpProvider SAML 공급자는 IAM에 정의돼 있어요. 관리자는 이미 SAML 어서션을 설정해 세 가지 필수 세션 태그를 전달하게 했어요. 어서션은 추가 태그를 전달할 수 있지만 이 세 가지는 반드시 존재해야 해요. ID의 속성은 cost-center와 access-project 태그에 대해 어떤 값이라도 가질 수 있어요. 하지만 access-team 속성 값은 ID가 Engineering 또는 Quality Assurance 팀에 속해 있음을 나타내는 eng 또는 qas와 일치해야 해요.

3B단계: SAML IdP 구성 (Step 3B: Configure the SAML IdP)

SAML IdP가 cost-center, access-project, access-team 속성을 세션 태그로 전달하도록 구성해요. 자세한 내용은 "AssumeRoleWithSAML을 사용한 세션 태그 전달"을 참고하세요.

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

<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:cost-center">
  <AttributeValue>987654</AttributeValue>
</Attribute>
<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:access-project">
  <AttributeValue>peg</AttributeValue>
</Attribute>
<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:access-team">
  <AttributeValue>eng</AttributeValue>
</Attribute>

3C단계: 콘솔 접근 활성화 (Step 3C: Enable console access)

페더레이션 SAML 사용자에 대한 콘솔 접근을 활성화해요. 자세한 내용은 "SAML 2.0 페더레이션 프린시펄이 AWS Management Console에 접근하도록 활성화"를 참고하세요.

4단계: 비밀 생성 테스트 (Step 4: Test creating secrets)

access-session-tags 역할을 사용해 AWS Management Console에 페더레이션해요. 자세한 내용은 "SAML 2.0 페더레이션 프린시펄이 AWS Management Console에 접근하도록 활성화"를 참고하세요. 그런 다음 "4단계: 비밀 생성 테스트"의 지침을 따라 비밀을 만들어요. ABAC 튜토리얼에 표시된 태그와 일치하는 속성을 가진 여러 다른 SAML ID를 사용해요. 자세한 내용은 "4단계: 비밀 생성 테스트"를 참고하세요.

5단계: 비밀 보기 테스트 (Step 5: Test viewing secrets)

"5단계: 비밀 보기 테스트"의 지침을 따라 이전 단계에서 만든 비밀을 봐요. ABAC 튜토리얼에 표시된 태그와 일치하는 속성을 가진 여러 다른 SAML ID를 사용해요.

6단계: 확장성 테스트 (Step 6: Test scalability)

"6단계: 확장성 테스트"의 지침을 따라 확장성을 테스트해요. SAML 기반 IdP에 다음 속성을 가진 새 ID를 추가해 이 작업을 해요.

  • cost-center = 101010
  • access-project = cen
  • access-team = eng

7단계: 비밀 업데이트 및 삭제 테스트 (Step 7: Test updating and deleting secrets)

"7단계: 비밀 업데이트 및 삭제 테스트"의 지침을 따라 비밀을 업데이트하고 삭제해요. ABAC 튜토리얼에 표시된 태그와 일치하는 속성을 가진 여러 다른 SAML ID를 사용해요.

중요 – 요금이 부과되지 않도록 만든 모든 비밀을 삭제해요. Secrets Manager의 가격 정책에 대한 자세한 내용은 AWS Secrets Manager 요금을 참고하세요.

요약 (Summary)

이제 권한 관리를 위해 SAML 세션 태그와 리소스 태그를 사용하는 데 필요한 모든 단계를 성공적으로 완료했어요.

참고 – 특정 조건 아래에서만 작업을 허용하는 정책을 추가했어요. 사용자나 역할에 더 넓은 권한이 있는 다른 정책을 적용하면 작업이 태그 지정을 요구하도록 제한되지 않을 수 있어요. 예를 들어 AdministratorAccess AWS 관리형 정책으로 사용자에게 전체 관리 권한을 부여하면 이러한 정책이 그 접근을 제한하지 않아요. 여러 정책이 관련될 때 권한이 어떻게 결정되는지에 대한 자세한 내용은 "AWS 시행 코드 로직이 요청을 평가해 접근을 허용하거나 거부하는 방법"을 참고하세요.

더 알아보기 (Learn more)