

# IAM 튜토리얼: ABAC에 SAML 세션 태그 사용
<a name="tutorial_abac-saml"></a>

속성 기반 액세스 제어(ABAC)는 속성에 근거하여 권한을 정의하는 권한 부여 전략입니다. AWS에서는 이러한 속성을 태그라고 합니다. IAM 엔터티(사용자 또는 역할)와 AWS 리소스에 태그를 연결할 수 있습니다. 엔터티를 사용하여 AWS에 요청하면 해당 엔터티가 보안 주체가 되고 해당 보안 주체에 태그가 포함됩니다.

역할을 맡거나 사용자를 연동할 때 [세션 태그](id_session-tags.md)를 전달할 수도 있습니다. 그런 다음 태그 조건 키를 사용하여 해당 태그를 기반으로 보안 주체에 권한을 부여하는 정책을 정의할 수 있습니다. 태그를 사용하여 AWS 리소스에 대한 액세스를 제어하면 AWS 정책에 대한 변경 사항이 줄어들면서 팀과 리소스가 성장할 수 있습니다. ABAC 정책은 각 개별 리소스를 나열해야 하는 기존 AWS 정책보다 유연합니다. ABAC에 대한 자세한 내용 및 기존 정책과 비교할 때의 이점은 [ABAC 권한 부여를 통한 속성 기반 권한 정의](introduction_attribute-based-access-control.md) 단원을 참조하십시오.

회사에서 SAML 기반 자격 증명 공급자(IdP)를 사용하여 회사 사용자 자격 증명을 관리하는 경우 AWS에서 SAML 속성을 사용하여 세밀한 액세스 제어를 수행할 수 있습니다. 속성에는 비용 센터 식별자, 사용자 이메일 주소, 부서 분류 및 프로젝트 할당이 포함될 수 있습니다. 이러한 속성을 세션 태그로 전달하면 이러한 세션 태그를 기반으로 AWS에 대한 액세스를 제어할 수 있습니다.

세션 보안 주체에 SAML 속성을 전달하여 [ABAC 자습서](tutorial_attribute-based-access-control.md)를 완료하려면 이 주제에 포함된 변경 사항을 사용하여 [IAM 튜토리얼: 태그를 기반으로 AWS 리소스에 액세스할 수 있는 권한 정의](tutorial_attribute-based-access-control.md)의 작업을 완료합니다.

## 사전 조건
<a name="tutorial_abac-saml-prerequisites"></a>

ABAC에 대해 SAML 세션 태그를 사용하는 단계를 수행하려면 다음 사항이 이미 있어야 합니다.
+ 특정 속성을 가진 테스트 사용자를 생성할 수 있는 SAML 기반 IdP에 대한 액세스 
+ 관리 권한이 있는 사용자로 로그인하는 기능.
+ AWS Management Console에서 IAM 사용자, 역할 및 정책을 생성 및 편집해 본 경험. 그러나 IAM 관리 프로세스를 기억해야 하는 경우를 위해 ABAC 튜토리얼에서는 단계별 지침을 볼 수 있는 링크를 제공합니다.
+ IAM에서 SAML 기반 IdP를 설정해 본 경험. 자세한 내용과 자세한 IAM 설명서에 대한 링크를 보려면 [AssumeRoleWithSAML을 사용하여 세션 태그 전달](id_session-tags.md#id_session-tags_adding-assume-role-saml) 섹션을 참조하세요.

## 1단계: 테스트 사용자 생성
<a name="tutorial_abac-saml-step1"></a>

[1단계: 테스트 사용자 생성](tutorial_attribute-based-access-control.md#tutorial_abac_step1)의 지침을 건너뜁니다. 자격 증명은 공급자에 정의되어 있으므로 직원에 대한 IAM 사용자를 추가할 필요는 없습니다.

## 2단계: ABAC 정책 생성
<a name="tutorial_abac-saml-step2"></a>

[2단계: ABAC 정책 생성](tutorial_attribute-based-access-control.md#tutorial_abac_step2)의 지침에 따라 IAM에서 지정된 관리형 정책을 생성합니다.

## 3단계: SAML 역할 생성 및 구성
<a name="tutorial_abac-saml-step3"></a>

SAML용 ABAC 자습서를 사용하는 경우 역할을 생성하고, SAML IdP를 구성하고, AWS Management Console 액세스를 활성화하기 위한 추가 단계를 수행해야 합니다. 자세한 내용은 [3단계: 역할 생성](tutorial_attribute-based-access-control.md#tutorial_abac_step3) 섹션을 참조하세요.

### 3A단계: SAML 역할 생성
<a name="tutorial_abac-saml-step3a"></a>

SAML 자격 증명 공급자 및 1단계에서 생성한 `test-session-tags` 사용자를 신뢰하는 단일 역할을 생성합니다. ABAC 자습서에서는 역할 태그가 서로 다른 별도의 역할을 사용합니다. SAML IdP에서 세션 태그를 전달하기 때문에 역할은 하나만 필요합니다. SAML 기반 역할을 생성하는 방법은 [SAML 2.0 페더레이션을 위한 역할 생성(콘솔)](id_roles_create_for-idp_saml.md) 단원을 참조하십시오.

역할 이름을 `access-session-tags`로 지정합니다. 역할에 `access-same-project-team` 권한 정책을 연결합니다. 다음 정책을 사용하도록 역할 신뢰 정책을 편집합니다. 역할의 신뢰 관계를 편집하는 방법에 대한 자세한 지침은 [역할 트러스트 정책 업데이트](id_roles_update-role-trust-policy.md) 단원을 참조하십시오.

다음 역할 신뢰 정책은 SAML 자격 증명 공급자 및 `test-session-tags` 사용자가 역할을 맡을 수 있도록 허용합니다. 역할을 맡을 때는 세 개의 지정된 세션 태그를 전달해야 합니다. 이 `sts:TagSession` 작업은 세션 태그 전달을 허용하는 데 필요합니다.

------
#### [ JSON ]

****  

```
{
    "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://signin.aws.amazon.com/saml"}
            }
        }
    ]
}
```

------

이 `AllowSamlIdentityAssumeRole` 문을 사용하면 엔지니어링 및 품질 보증 팀의 멤버가 Example Corporation IdP에서 AWS로 연동될 때 이 역할을 맡을 수 있습니다. `ExampleCorpProvider` SAML 공급자는 IAM에 정의되어 있습니다. 관리자가 세 개의 필수 세션 태그를 전달하도록 SAML 어설션을 이미 설정했습니다. 어설션에서 추가 태그를 전달할 수 있지만 이 세 가지 태그는 반드시 있어야 합니다. 자격 증명의 속성은 `cost-center` 및 `access-project` 태그에 대한 값을 가질 수 있습니다. 그러나 자격 증명이 엔지니어링 또는 품질 보증 팀에 속한다는 것을 나타내려면 `access-team` 속성 값이 `eng` 또는 `qas`와 일치해야 합니다.

### 3B단계: SAML IdP 구성
<a name="tutorial_abac-saml-step3b"></a>

`cost-center`, `access-project` 및 `access-team` 속성을 세션 태그로 전달하도록 SAML IdP를 구성합니다. 자세한 내용은 [AssumeRoleWithSAML을 사용하여 세션 태그 전달](id_session-tags.md#id_session-tags_adding-assume-role-saml) 섹션을 참조하세요.

이러한 속성을 세션 태그로 전달하려면 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 단계: 콘솔 액세스 활성화
<a name="tutorial_abac-saml-step3b"></a>

페더레이션 SAML 사용자에 대해 콘솔 액세스를 활성화합니다. 자세한 내용은 [SAML 2.0 페더레이션 위탁자의 AWS Management Console 액세스 활성화](id_roles_providers_enable-console-saml.md) 섹션을 참조하세요.

## 4단계: 비밀 생성 테스트
<a name="tutorial_abac-saml-step4"></a>

`access-session-tags` 역할을 사용하여 AWS Management Console에 연동합니다. 자세한 내용은 [SAML 2.0 페더레이션 위탁자의 AWS Management Console 액세스 활성화](id_roles_providers_enable-console-saml.md) 섹션을 참조하세요. 그런 다음 [4단계: 비밀 생성 테스트](tutorial_attribute-based-access-control.md#tutorial_abac_step4)의 지침에 따라 비밀을 생성합니다. 다양한 SAML 자격 증명을 속성과 함께 사용하여 ABAC 자습서에 표시된 태그와 일치시킵니다. 자세한 내용은 [4단계: 비밀 생성 테스트](tutorial_attribute-based-access-control.md#tutorial_abac_step4) 섹션을 참조하세요.

## 5단계: 비밀 보기 테스트
<a name="tutorial_abac-saml-step5"></a>

[5단계: 비밀 보기 테스트](tutorial_attribute-based-access-control.md#tutorial_abac_step5) 단원의 지침에 따라 이전 단계에서 생성한 비밀을 확인합니다. 다양한 SAML 자격 증명을 속성과 함께 사용하여 ABAC 자습서에 표시된 태그와 일치시킵니다.

## 6단계: 테스트 확장성
<a name="tutorial_abac-saml-step6"></a>

[6단계: 테스트 확장성](tutorial_attribute-based-access-control.md#tutorial_abac_step6) 단원의 지침에 따라 확장성을 테스트합니다. 다음 속성을 사용하여 SAML 기반 IdP에 새 자격 증명을 추가하면 됩니다.
+ `cost-center = 101010`
+ `access-project = cen`
+ `access-team = eng`

## 7단계: 비밀 업데이트 및 삭제 테스트
<a name="tutorial_abac-saml-step7"></a>

[7단계: 비밀 업데이트 및 삭제 테스트](tutorial_attribute-based-access-control.md#tutorial_abac_step7) 단원의 지침에 따라 비밀을 업데이트 및 삭제합니다. 다양한 SAML 자격 증명을 속성과 함께 사용하여 ABAC 자습서에 표시된 태그와 일치시킵니다.

**중요**  
요금이 청구되지 않도록 생성한 모든 비밀을 삭제합니다. Secrets Manager의 요금에 대한 자세한 내용은 [AWS Secrets Manager 요금](https://aws.amazon.com/secrets-manager/pricing/)을 참조하세요.

## 요약
<a name="tutorial-abac-saml-summary"></a>

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

**참고**  
특정 조건에서만 작업을 허용하는 정책을 추가했습니다. 더 광범위한 권한을 가진 사용자 또는 역할에 다른 정책을 적용하는 경우, 작업에서 태그 지정이 필요하도록 제한을 받지 않을 수 있습니다. 예를 들어 `AdministratorAccess` AWS 관리형 정책을 사용하여 사용자에게 전체 관리 권한을 부여하는 경우, 이러한 정책은 해당 액세스를 제한하지 않습니다. 여러 정책이 적용될 때 권한이 결정되는 방법에 대한 자세한 내용은 [AWS 적용 코드 로직이 액세스 허용 또는 거부 요청을 평가하는 방법](reference_policies_evaluation-logic_policy-eval-denyallow.md) 단원을 참조하십시오.