IAM 튜토리얼: 태그를 기반으로 AWS 리소스에 액세스할 수 있는 권한 정의 - AWS Identity and Access Management

IAM 튜토리얼: 태그를 기반으로 AWS 리소스에 액세스할 수 있는 권한 정의

ABAC(속성 기반 액세스 제어)는 속성에 근거하여 권한을 정의하는 권한 부여 전략입니다. AWS에서는 이러한 속성을 태그라고 합니다. IAM 엔터티(사용자 또는 역할)와 AWS 리소스에 태그를 연결할 수 있습니다. 태그 조건 키를 사용하여 해당 태그를 기반으로 보안 주체에 권한을 부여하는 정책을 정의할 수 있습니다. 태그를 사용하여 AWS 리소스에 대한 액세스를 제어하면 AWS 정책에 대한 변경 사항이 줄어들면서 팀과 리소스가 성장할 수 있습니다. ABAC 정책은 각 개별 리소스를 나열해야 하는 기존 AWS 정책보다 유연합니다. ABAC에 대한 자세한 내용 및 기존 정책과 비교할 때의 이점은 ABAC 권한 부여를 통한 속성 기반 권한 정의 단원을 참조하십시오.

참고

각 세션 태그에는 단일 값을 전달해야 합니다. AWS Security Token Service에서는 다중 값 세션 태그를 지원하지 않습니다.

자습서 개요

이 튜토리얼에서는 보안 주체 태그가 있는 IAM 역할이 일치하는 태그가 있는 리소스에 액세스할 수 있도록 허용하는 정책을 생성하고 테스트하는 방법을 보여줍니다. 보안 주체가 AWS에 요청하면 보안 주체와 리소스 태그가 일치하는지 여부에 따라 권한이 부여됩니다. 이 전략을 통해 개인이 자신의 작업에 필요한 AWS 리소스만 보거나 편집할 수 있습니다.

시나리오

Example Corporation이라는 대기업의 수석 개발자이자 숙련된 IAM 관리자가 있다고 가정해 보겠습니다. 이 관리자는 IAM 사용자, 역할 및 정책을 생성하고 관리하는 데 익숙합니다. 개발 엔지니어와 품질 보증 팀 멤버가 필요한 리소스에 액세스할 수 있도록 해야 하며 기업의 성장에 따라 확장 가능한 전략도 준비해야 합니다.

AWS 리소스 태그와 IAM 역할 보안 주체 태그를 사용하여 이를 지원하는 서비스에 대한 ABAC 전략을 구현하도록 선택합니다(AWS Secrets Manager로 시작). 태그를 기반으로 권한 부여를 지원하는 서비스에 대한 자세한 내용은 AWS IAM으로 작업하는 서비스 단원을 참조하십시오. 각 서비스의 작업 및 리소스와 함께 정책에서 사용할 수 있는 태그 지정 조건 키에 대한 자세한 내용은 AWS 서비스에 사용되는 작업, 리소스 및 조건 키를 참조하세요. 세션 태그를 AWS에 전달하도록 SAML 기반 또는 웹 자격 증명 공급자를 구성할 수 있습니다. 직원이 AWS에 연동되면 해당 속성이 AWS의 결과 보안 주체에 적용됩니다. 그런 다음 ABAC를 사용하여 이러한 속성에 따라 권한을 허용하거나 거부할 수 있습니다. SAML 페더레이션 자격 증명과 함께 세션 태그를 사용하는 것이 이 자습서와 어떻게 다른지 알아보려면 IAM 튜토리얼: ABAC에 SAML 세션 태그 사용 단원을 참조하십시오.

엔지니어링 및 품질 보증 팀 멤버는 Pegasus 또는 Unicorn 프로젝트에 참여하고 있습니다. 다음 세 글자로 된 프로젝트 및 팀 태그 값을 선택합니다.

  • Pegasus 프로젝트에 대해 access-project = peg

  • Unicorn 프로젝트에 대해 access-project = uni

  • 엔지니어링 팀에 대해 access-team = eng

  • 품질 보증 팀에 대해 access-team = qas

또한 사용자 지정 AWS 결제 보고서를 활성화할 때 cost-center 비용 할당 태그가 필요하도록 선택할 수 있습니다. 자세한 내용은 AWS Billing and Cost Management 사용 설명서비용 할당 태그 사용을 참조하세요.

주요 의사 결정 요약
  • 직원은 IAM 사용자 자격 증명으로 로그인한 다음 팀 및 프로젝트의 IAM 역할을 맡습니다. 회사에 자체 자격 증명 시스템이 있는 경우 직원이 IAM 사용자 없이 역할을 맡을 수 있도록 연동을 설정할 수 있습니다. 자세한 내용은 IAM 튜토리얼: ABAC에 SAML 세션 태그 사용 단원을 참조하십시오.

  • 동일한 정책이 모든 역할에 연결됩니다. 작업은 태그에 따라 허용되거나 거부됩니다.

  • 직원은 자신의 역할에 적용되는 리소스에 동일한 태그를 연결하는 경우에만 새 리소스를 생성할 수 있습니다. 이렇게 하면 직원이 리소스를 생성한 후 해당 리소스를 볼 수 있습니다. 관리자는 더 이상 새 리소스의 ARN으로 정책을 업데이트할 필요가 없습니다.

  • 직원은 프로젝트와 관계없이 자신의 팀이 소유한 리소스를 읽을 수 있습니다.

  • 직원은 자신의 팀과 프로젝트가 소유한 리소스를 업데이트하고 삭제할 수 있습니다.

  • IAM 관리자는 새 프로젝트에 대한 새 역할을 추가할 수 있습니다. 해당 역할에 대한 액세스를 허용하도록 새 IAM 사용자를 생성하고 태그를 지정할 수 있습니다. 관리자는 새 프로젝트 또는 팀 멤버를 지원하기 위해 정책을 편집할 필요가 없습니다.

이 자습서에서는 각 리소스에 태그를 지정하고 프로젝트 역할에 태그를 지정하고 역할에 정책을 추가하여 앞에서 설명한 동작을 허용합니다. 결과 정책은 동일한 프로젝트 및 팀 태그로 태그가 지정된 리소스에 대한 역할 Create, Read, UpdateDelete 액세스를 허용합니다. 또한 이 정책은 동일한 팀으로 태그가 지정된 리소스에 대해 프로젝트 간 Read 액세스를 허용합니다.

다이어그램은 역할이 자체 프로젝트 밖에서는 읽기 전용 액세스로 제한되지만 자체 프로젝트에서는 리소스를 생성하고, 읽고, 업데이트하고, 삭제할 수 있는 권한이 있는 두 프로젝트를 보여줍니다.

사전 조건

이 자습서의 단계를 수행하려면 다음이 준비되어 있어야 합니다.

  • 관리 권한을 가진 사용자로 로그인할 수 있는 AWS 계정.

  • 3단계에서 역할을 생성하는 데 사용한 12자리 계정 ID입니다.

    AWS Management Console을 사용하여 AWS 계정 ID 번호를 찾으려면 오른쪽 상단에 있는 탐색 모음에서 지원을 선택한 후 지원 센터를 선택합니다. 계정 번호(ID)가 왼쪽 탐색 창에 나타납니다.

    계정 번호가 표시된 AWS Support 센터 페이지.
  • AWS Management Console에서 IAM 사용자, 역할 및 정책을 생성 및 편집해 본 경험. 그러나 IAM 관리 프로세스를 기억해야 하는 경우를 위해 이 튜토리얼에서는 단계별 지침을 볼 수 있는 링크를 제공합니다.

1단계: 테스트 사용자 생성

테스트를 위해 동일한 태그를 사용하여 역할을 맡을 권한이 있는 IAM 사용자 4명을 생성합니다. 이렇게 하면 팀에 사용자를 더 쉽게 추가할 수 있습니다. 사용자에게 태그를 지정하면 올바른 역할을 맡을 수 있는 액세스 권한이 자동으로 부여됩니다. 사용자가 하나의 프로젝트와 팀에서만 작업하는 경우 역할의 신뢰 정책에 사용자를 추가할 필요가 없습니다.

  1. 다음과 같이 access-assume-role이라는 고객 관리형 정책을 생성합니다. JSON 정책 생성에 대한 자세한 내용은 IAM 정책 생성 단원을 참조하십시오.

    ABAC 정책: 사용자 및 역할 태그가 일치하는 경우에만 모든 ABAC 역할 수임

    다음 정책은 사용자가 access- 이름 접두사가 있는 계정의 모든 역할을 맡을 수 있도록 허용합니다. 역할에는 사용자와 동일한 프로젝트, 팀 및 비용 센터 태그가 지정되어 있어야 합니다.

    이 정책을 사용하려면 기울임꼴 자리 표시자 텍스트를 계정 정보로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "TutorialAssumeRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::account-ID-without-hyphens:role/access-*", "Condition": { "StringEquals": { "iam:ResourceTag/access-project": "${aws:PrincipalTag/access-project}", "iam:ResourceTag/access-team": "${aws:PrincipalTag/access-team}", "iam:ResourceTag/cost-center": "${aws:PrincipalTag/cost-center}" } } } ] }

    이 자습서를 많은 사용자로 확장하기 위해 정책을 그룹에 연결하고 각 사용자를 그룹에 추가할 수 있습니다. 자세한 내용은 IAM 사용자 그룹 생성IAM 사용자 그룹의 사용자 편집 단원을 참조하세요.

  2. 다음 IAM 사용자를 생성하고, access-assume-role 권한 정책을 연결합니다. AWS Management Console에 대한 사용자 액세스 제공을 선택하고 다음 태그를 추가해야 합니다.

    사용자 이름 사용자 태그 키 사용자 태그 값

    access-Arnav-peg-eng

    access-project

    access-team

    cost-center

    peg

    eng

    987654

    access-Mary-peg-qas

    access-project

    access-team

    cost-center

    peg

    qas

    987654

    access-Saanvi-uni-eng

    access-project

    access-team

    cost-center

    uni

    eng

    123456

    access-Carlos-uni-qas

    access-project

    access-team

    cost-center

    uni

    qas

    123456

2단계: ABAC 정책 생성

다음과 같이 access-same-project-team이라는 정책을 생성합니다. 이후 단계에서 이 정책을 역할에 추가합니다. JSON 정책 생성에 대한 자세한 내용은 IAM 정책 생성 단원을 참조하십시오.

이 자습서에 적용할 수 있는 추가 정책은 다음 페이지를 참조하십시오.

ABAC 정책: 보안 주체 및 리소스 태그가 일치하는 경우에만 Secrets Manager 리소스 액세스

다음 정책은 보안 주체와 동일한 키-값 페어로 리소스에 태그가 지정된 경우에만 보안 주체가 리소스를 생성, 읽기, 편집 및 삭제할 수 있도록 허용합니다. 보안 주체가 리소스를 생성할 때 보안 주체의 태그와 일치하는 값을 가진 access-project, access-teamcost-center 태그를 추가해야 합니다. 이 정책에서는 선택 사항인 Name 또는 OwnedBy 태그를 추가할 수도 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllActionsSecretsManagerSameProjectSameTeam", "Effect": "Allow", "Action": "secretsmanager:*", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/access-project": "${aws:PrincipalTag/access-project}", "aws:ResourceTag/access-team": "${aws:PrincipalTag/access-team}", "aws:ResourceTag/cost-center": "${aws:PrincipalTag/cost-center}" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "access-project", "access-team", "cost-center", "Name", "OwnedBy" ] }, "StringEqualsIfExists": { "aws:RequestTag/access-project": "${aws:PrincipalTag/access-project}", "aws:RequestTag/access-team": "${aws:PrincipalTag/access-team}", "aws:RequestTag/cost-center": "${aws:PrincipalTag/cost-center}" } } }, { "Sid": "AllResourcesSecretsManagerNoTags", "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword", "secretsmanager:ListSecrets" ], "Resource": "*" }, { "Sid": "ReadSecretsManagerSameTeam", "Effect": "Allow", "Action": [ "secretsmanager:Describe*", "secretsmanager:Get*", "secretsmanager:List*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/access-team": "${aws:PrincipalTag/access-team}" } } }, { "Sid": "DenyUntagSecretsManagerReservedTags", "Effect": "Deny", "Action": "secretsmanager:UntagResource", "Resource": "*", "Condition": { "ForAnyValue:StringLike": { "aws:TagKeys": "access-*" } } }, { "Sid": "DenyPermissionsManagement", "Effect": "Deny", "Action": "secretsmanager:*Policy", "Resource": "*" } ] }

이 정책이 하는 일은 무엇입니까?

  • AllActionsSecretsManagerSameProjectSameTeam 문은 리소스 태그가 보안 주체 태그와 일치하는 경우에만 모든 관련 리소스에 대해 이 서비스의 모든 작업을 허용합니다. 정책에 "Action": "secretsmanager:*"를 추가하면 Secrets Manager가 커질수록 정책도 커집니다. Secrets Manager에서 새 API 작업을 추가하는 경우 문에 해당 작업을 추가할 필요가 없습니다. 이 문은 세 가지 조건 블록을 사용하여 ABAC를 구현합니다. 세 블록 모두 true를 반환하는 경우에만 요청이 허용됩니다.

    • 지정된 태그 키가 리소스에 있고 해당 값이 보안 주체의 태그와 일치하는 경우 이 문의 첫 번째 조건 블록은 true를 반환합니다. 이 블록은 일치하지 않는 태그 또는 리소스 태그 지정을 지원하지 않는 작업에 대해 false를 반환합니다. 이 블록에서 허용되지 않는 작업에 대한 자세한 내용은 AWS Secrets Manager에 대한 작업, 리소스 및 조건 키를 참조하십시오 . 이 페이지에서는 비밀 리소스 유형에 대해 수행된 작업이 secretsmanager:ResourceTag/tag-key 조건 키를 지원한다는 것을 보여 줍니다. 일부 Secrets Manager 작업에서는 GetRandomPasswordListSecrets를 포함하여 해당 해당 리소스 유형을 지원하지 않습니다. 이러한 작업을 허용하려면 추가 문을 생성해야 합니다.

    • 두 번째 조건 블록은 요청에 전달된 모든 태그 키가 지정된 목록에 포함된 경우 true를 반환합니다. 이 작업은 StringEquals 조건 연산자와 함께 ForAllValues를 사용하여 수행됩니다. 키 또는 키 세트의 일부가 전달되지 않으면 조건이 true를 반환합니다. 이 경우 요청에서 태그 전달을 허용하지 않는 Get* 작업을 사용할 수 있습니다. 요청자가 목록에 없는 태그 키를 포함하는 경우 조건은 false를 반환합니다. 요청에 전달되는 모든 태그 키가 이 목록의 멤버와 일치해야 합니다. 자세한 내용은 다중 값 컨텍스트 키 단원을 참조하십시오.

    • 세 번째 조건 블록은 요청이 태그 전달을 지원하고, 세 개의 태그가 모두 존재하고, 보안 주체 태그 값과 일치하는 경우 true를 반환합니다. 요청이 태그 전달을 지원하지 않는 경우에도 이 블록은 true를 반환합니다. 그 이유는 조건 연산자의 ...IfExists 때문입니다. 지원하는 작업 중에 전달된 태그가 없거나 태그 키 및 값이 일치하지 않으면 블록이 false를 반환합니다.

  • AllResourcesSecretsManagerNoTags 문은 첫 번째 문에서 허용되지 않는 GetRandomPasswordListSecrets 작업을 허용합니다.

  • ReadSecretsManagerSameTeam 문은 보안 주체가 리소스와 동일한 액세스 팀 태그로 태그가 지정된 경우 읽기 전용 작업을 허용합니다. 이는 프로젝트 또는 비용 센터 태그와 관계없이 허용됩니다.

  • DenyUntagSecretsManagerReservedTags 문은 Secrets Manager에서 “access-”로 시작하는 키가 있는 태그를 제거하라는 요청을 거부합니다. 이러한 태그는 리소스에 대한 액세스를 제어하는 데 사용되므로 태그를 제거하면 권한이 제거될 수 있습니다.

  • DenyPermissionsManagement 문은 Secrets Manager 리소스 기반 정책을 생성, 편집 또는 삭제할 수 있는 권한을 거부합니다. 이러한 정책을 사용하여 비밀의 권한을 변경할 수 있습니다.

중요

이 정책은 전략을 사용하여 서비스에 대한 모든 작업을 허용하지만 권한 변경 작업을 명시적으로 거부합니다. 작업을 거부하면 보안 주체가 해당 작업을 수행할 수 있도록 허용하는 다른 정책을 재정의합니다. 이로 인해 의도하지 않은 결과가 발생할 수 있습니다. 명시적 거부는 해당 작업을 허용해야 하는 상황이 없는 경우에만 사용하는 것이 가장 좋습니다. 그렇지 않은 경우 개별 작업 목록을 허용하고 원치 않는 작업이 기본적으로 거부됩니다.

3단계: 역할 생성

다음 IAM 역할을 생성하고 이전 단계에서 생성한 access-same-project-team 정책을 연결합니다. IAM 역할 생성에 대한 자세한 내용은 IAM 사용자에게 권한을 위임할 역할 생성 섹션을 참조하세요. IAM 사용자 및 역할 대신 연동을 사용하도록 선택한 경우 IAM 튜토리얼: ABAC에 SAML 세션 태그 사용 섹션을 참조하세요.

직무 역할 이름 역할 태그 역할 설명

프로젝트 Pegasus 엔지니어링

access-peg-engineering

access-project = peg

access-team = eng

cost-center = 987654

엔지니어는 모든 엔지니어링 리소스를 읽고 Pegasus 엔지니어링 리소스를 생성 및 관리할 수 있습니다.

프로젝트 Pegasus 품질 보증

access-peg-quality-assurance

access-project = peg

access-team = qas

cost-center = 987654

QA 팀은 모든 QA 리소스를 읽고 모든 Pegasus QA 리소스를 생성 및 관리할 수 있습니다.

프로젝트 Unicorn 엔지니어링

access-uni-engineering

access-project= uni

access-team = eng

cost-center = 123456

엔지니어는 모든 엔지니어링 리소스를 읽고 Unicorn 엔지니어링 리소스를 생성 및 관리할 수 있습니다.

프로젝트 Unicorn 품질 보증

access-uni-quality-assurance

access-project = uni

access-team = qas

cost-center = 123456

QA 팀은 모든 QA 리소스를 읽고 모든 Unicorn QA 리소스를 생성 및 관리할 수 있습니다.

4단계: 비밀 생성 테스트

역할에 연결된 권한 정책을 통해 직원이 비밀을 생성할 수 있습니다. 이 작업은 비밀에 프로젝트, 팀 및 비용 센터 태그가 지정된 경우에만 허용됩니다. Secrets Manager에서 사용자로 로그인하고, 올바른 역할을 맡고, 활동을 테스트하여 권한이 예상대로 작동하는지 확인합니다.

필수 태그를 사용하거나 사용하지 않고 비밀 생성을 테스트하려면
  1. 기본 브라우저 창에서 관리자 사용자로 로그인한 상태로 유지되므로 IAM에서 사용자, 역할 및 정책을 검토할 수 있습니다. 테스트를 위해 브라우저 익명 창 또는 별도의 브라우저를 사용하십시오. 이제 access-Arnav-peg-eng IAM 사용자로 로그인하고 https://console.aws.amazon.com/secretsmanager/에서 Secrets Manager 콘솔을 엽니다.

  2. access-uni-engineering 역할로의 전환을 시도합니다.

    access-Arnav-peg-eng 사용자와 access-uni-engineering 역할의 access-projectcost-center 태그 값이 일치하지 않기 때문에 이 작업은 실패합니다.

    AWS Management Console에서의 역할 전환에 대한 자세한 내용은 사용자에서 IAM 역할로 전환(콘솔)의 내용을 참조하세요.

  3. access-peg-engineering 역할로 전환합니다.

  4. 다음 정보를 사용하여 새 비밀을 저장합니다. 비밀을 저장하는 방법에 대한 자세한 내용을 알아보려면 AWS Secrets Manager 사용 설명서Creating a Basic Secret(기본 보안 암호 생성)을 참조하세요.

    중요

    Secrets Manager에 Secrets Manager에 사용되는 추가 AWS 서비스에 대한 권한이 없다는 알림이 표시됩니다. 예를 들어, Amazon RDS 데이터베이스에 대한 자격 증명을 생성하려면 RDS 인스턴스, RDS 클러스터 및 Amazon Redshift 클러스터를 설명할 수 있는 권한이 있어야 합니다. 이 자습서에서 이러한 특정 AWS 서비스를 사용하지 않으므로 이러한 알림은 무시해도 좋습니다.

    1. 비밀 유형 선택 섹션에서 다른 유형의 비밀을 선택합니다. 두 텍스트 상자에 test-access-keytest-access-secret를 입력합니다.

    2. 비밀 이름 필드에 test-access-peg-eng를 입력합니다.

    3. 다음 표에서 다양한 태그 조합을 추가하고 예상되는 동작을 확인합니다.

    4. Store(저장)를 선택하여 비밀을 생성합니다. 스토리지에 장애가 발생하면 이전 Secrets Manager 콘솔 페이지로 돌아가서 아래 표에 있는 다음 태그 세트를 사용합니다. 마지막 태그 세트가 허용되고 비밀이 성공적으로 생성됩니다.

    다음 표에는 test-access-peg-eng 역할의 ABAC 태그 조합이 나와 있습니다.

    access-project 태그 값 access-team 태그 값 cost-center 태그 값 추가 태그 예상되는 동작
    (none) (none) (none) (none) 태그 값이 역할의 access-project 값과 일치하지 않아 거부됩니다.peg
    uni eng 987654 (none) 태그 값이 역할의 access-project 값과 일치하지 않아 거부됩니다.peg
    peg qas 987654 (none) 태그 값이 역할의 access-team 값과 일치하지 않아 거부됩니다.eng
    peg eng 123456 (none) 태그 값이 역할의 cost-center 값과 일치하지 않아 거부됩니다.987654
    peg eng 987654 Owner = Jane 세 개의 필수 태그가 모두 있고 해당 값이 역할 값과 일치하지만 추가 태그 owner가 정책에서 허용되지 않아 거부됩니다.
    peg eng 987654 Name = Jane 세 개의 필수 태그가 모두 있고 해당 값이 역할 값과 일치하기 때문에 허용됩니다. 선택적으로 Name 태그를 포함할 수도 있습니다.
  5. 로그아웃하고 다음 역할 및 태그 값 각각에 대해 이 절차의 처음 세 단계를 반복합니다. 이 절차의 네 번째 단계에서는 선택한 누락된 태그, 선택적 태그, 허용되지 않는 태그 및 잘못된 태그 값 세트를 테스트합니다. 그런 다음 필수 태그를 사용하여 다음 태그와 이름으로 비밀을 생성합니다.

    사용자 이름 역할 이름 비밀 이름 비밀 태그

    access-Mary-peg-qas

    access-peg-quality-assurance

    test-access-peg-qas

    access-project = peg

    access-team = qas

    cost-center = 987654

    access-Saanvi-uni-eng

    access-uni-engineering

    test-access-uni-eng

    access-project = uni

    access-team = eng

    cost-center = 123456

    access-Carlos-uni-qas

    access-uni-quality-assurance

    test-access-uni-qas

    access-project = uni

    access-team = qas

    cost-center = 123456

5단계: 비밀 보기 테스트

각 역할에 연결된 정책을 통해 직원은 프로젝트와 관계없이 팀 이름으로 태그가 지정된 모든 비밀을 볼 수 있습니다. Secrets Manager에서 역할을 테스트하여 권한이 예상대로 작동하는지 확인합니다.

필수 태그를 사용하거나 사용하지 않고 비밀 보기를 테스트하려면
  1. 다음 IAM 사용자 중 한 명으로 로그인합니다.

    • access-Arnav-peg-eng

    • access-Mary-peg-qas

    • access-Saanvi-uni-eng

    • access-Carlos-uni-qas

  2. 일치하는 역할로 전환합니다.

    • access-peg-engineering

    • access-peg-quality-assurance

    • access-uni-engineering

    • access-uni-quality-assurance

    AWS Management Console에서의 역할 전환에 대한 자세한 내용은 사용자에서 IAM 역할로 전환(콘솔) 단원을 참조하십시오.

  3. 왼쪽의 탐색 창에서 메뉴 아이콘을 선택하여 메뉴를 확장한 다음 비밀을 선택합니다.

  4. 현재 역할과 관계없이 표에 네 가지 비밀이 모두 표시됩니다. 이는 access-same-project-team이라는 정책이 모든 리소스에 대해 secretsmanager:ListSecrets 작업을 허용하기 때문입니다.

  5. 비밀 중 하나의 이름을 선택합니다.

  6. 비밀에 대한 세부 정보 페이지에서 역할의 태그에 따라 페이지 콘텐츠를 볼 수 있는지 여부가 결정됩니다. 역할의 이름을 비밀의 이름과 비교합니다. 동일한 팀 이름을 공유하는 경우 access-team 태그가 일치합니다. 일치하지 않으면 액세스가 거부됩니다.

    다음 표는 각 역할의 ABAC 비밀 보기 동작을 보여줍니다.

    역할 이름 비밀 이름 예상되는 동작
    access-peg-engineering test-access-peg-eng 허용됨
    test-access-peg-qas 거부됨
    test-access-uni-eng 허용됨
    test-access-uni-qas 거부됨
    access-peg-quality-assurance test-access-peg-eng 거부됨
    test-access-peg-qas 허용됨
    test-access-uni-eng 거부됨
    test-access-uni-qas 허용됨
    access-uni-engineering test-access-peg-eng 허용됨
    test-access-peg-qas 거부됨
    test-access-uni-eng 허용됨
    test-access-uni-qas 거부됨
    access-uni-quality-assurance test-access-peg-eng 거부됨
    test-access-peg-qas 허용됨
    test-access-uni-eng 거부됨
    test-access-uni-qas 허용됨
  7. 페이지 상단의 이동 경로에서 비밀을 선택하여 비밀 목록으로 돌아갑니다. 다른 역할을 사용하여 이 절차의 단계를 반복하여 각 암호를 볼 수 있는지 여부를 테스트합니다.

6단계: 테스트 확장성

RBAC(역할 기반 액세스 제어)를 통해 ABAC(속성 기반 액세스 제어)를 사용하는 중요한 이유는 확장성입니다. 회사에서 새 프로젝트, 팀 또는 인력을 AWS에 추가할 때 ABAC 기반 정책을 업데이트할 필요가 없습니다. 예를 들어, Example Company가 코드명이 Centaur인 새로운 프로젝트에 자금을 조달하고 있다고 가정합니다. Saanvi Sarkar라는 엔지니어는 Unicorn 프로젝트에서 계속 작업하면서 Centaur의 수석 엔지니어도 겸할 예정입니다. Saanvi는 Peg 프로젝트의 작업도 검토할 것입니다. 또한 Nikhil Jayashankar를 포함하여 Centaur 프로젝트에서만 작업하기 위해 몇 명의 엔지니어가 새로 고용되었습니다.

새 프로젝트를 AWS에 추가하려면
  1. IAM 관리자로 로그인하여 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 역할(Roles)을 선택한 후 access-cen-engineering이라는 IAM 역할을 추가합니다. 역할에 access-same-project-team 권한 정책을 연결하고 다음 역할 태그 추가:

    • access-project = cen

    • access-team = eng

    • cost-center = 101010

  3. 왼쪽에 있는 탐색 창에서 Users(사용자)를 선택합니다.

  4. access-Nikhil-cen-eng라는 새 사용자를 추가하고, access-assume-role이라는 정책을 연결하고, 다음 사용자 태그를 추가합니다.

    • access-project = cen

    • access-team = eng

    • cost-center = 101010

  5. 4단계: 비밀 생성 테스트5단계: 비밀 보기 테스트의 절차를 사용합니다. 다른 브라우저 창에서 Nikhil이 Centaur 엔지니어링 비밀만 만들 수 있는지와 모든 엔지니어링 비밀을 볼 수 있는지를 테스트합니다.

  6. 관리자로 로그인한 기본 브라우저 창에서 사용자 access-Saanvi-uni-eng를 선택합니다.

  7. 권한 탭에서 access-assume-role 권한 정책을 제거합니다.

  8. access-assume-specific-roles라는 다음 인라인 정책을 추가합니다. 인라인 정책을 사용자에게 추가하는 방법에 대한 자세한 내용은 사용자 또는 역할의 인라인 정책을 포함하려면(콘솔) 단원을 참조하십시오.

    ABAC 정책: 특정 역할만 수임

    이 정책을 통해 Saanvi는 Pegasus 또는 Centaur 프로젝트의 엔지니어링 역할을 맡을 수 있습니다. IAM에서는 다중 값 태그를 지원하지 않으므로 이 사용자 지정 정책을 생성해야 합니다. Saanvi의 사용자에게 access-project = pegaccess-project = cen 태그를 지정할 수 없습니다. 또한 AWS 권한 부여 모델은 두 값과 모두 일치할 수 없습니다. 자세한 내용은 IAM 및 AWS STS의 태그 지정 규칙 단원을 참조하십시오. 대신 Saanvi가 맡을 수 있는 두 역할을 수동으로 지정해야 합니다.

    이 정책을 사용하려면 기울임꼴 자리 표시자 텍스트를 계정 정보로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "TutorialAssumeSpecificRoles", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::account-ID-without-hyphens:role/access-peg-engineering", "arn:aws:iam::account-ID-without-hyphens:role/access-cen-engineering" ] } ] }
  9. 4단계: 비밀 생성 테스트5단계: 비밀 보기 테스트의 절차를 사용합니다. 다른 브라우저 창에서 Saanvi가 두 역할을 모두 맡을 수 있는지 확인합니다. 역할의 태그에 따라 프로젝트, 팀 및 비용 센터에 대해서만 비밀을 생성할 수 있는지 확인합니다. 또한 Saanvi가 방금 생성한 비밀을 포함하여 엔지니어링 팀이 소유한 비밀에 대한 세부 정보를 볼 수 있는지 확인합니다.

7단계: 비밀 업데이트 및 삭제 테스트

역할에 연결된 access-same-project-team 정책을 통해 직원은 프로젝트, 팀 및 비용 센터로 태그가 지정된 모든 비밀을 업데이트하고 삭제할 수 있습니다. Secrets Manager에서 역할을 테스트하여 권한이 예상대로 작동하는지 확인합니다.

필수 태그를 사용하거나 사용하지 않고 비밀 업데이트 및 삭제를 테스트하려면
  1. 다음 IAM 사용자 중 한 명으로 로그인합니다.

    • access-Arnav-peg-eng

    • access-Mary-peg-qas

    • access-Saanvi-uni-eng

    • access-Carlos-uni-qas

    • access-Nikhil-cen-eng

  2. 일치하는 역할로 전환합니다.

    • access-peg-engineering

    • access-peg-quality-assurance

    • access-uni-engineering

    • access-peg-quality-assurance

    • access-cen-engineering

    AWS Management Console에서의 역할 전환에 대한 자세한 내용은 사용자에서 IAM 역할로 전환(콘솔) 단원을 참조하십시오.

  3. 각 역할에 대해 비밀 설명을 업데이트하고 다음 비밀을 삭제해봅니다. 자세한 내용은 AWS Secrets Manager 사용 설명서보안 암호 수정Deleting and Restoring a Secret(보안 암호 삭제 및 복원)을 참조하세요.

    다음 표는 각 역할의 ABAC 비밀 업데이트 및 삭제 동작을 보여줍니다.

    역할 이름 비밀 이름 예상되는 동작

    access-peg-engineering

    test-access-peg-eng

    허용됨
    test-access-uni-eng 거부됨
    test-access-uni-qas 거부됨

    access-peg-quality-assurance

    test-access-peg-qas 허용됨
    test-access-uni-eng 거부됨

    access-uni-engineering

    test-access-uni-eng 허용됨
    test-access-uni-qas 거부됨

    access-peg-quality-assurance

    test-access-uni-qas 허용됨

요약

이제 속성 기반 액세스 제어(ABAC)에 태그를 사용하는 데 필요한 모든 단계를 성공적으로 완료했습니다. 태그 지정 전략을 정의하는 방법을 배웠습니다. 보안 주체와 리소스에 해당 전략을 적용했습니다. Secrets Manager에 대한 전략을 적용하는 정책을 생성하고 적용했습니다. 또한 새 프로젝트 및 팀 멤버를 추가할 때 ABAC가 쉽게 확장된다는 사실을 알게 되었습니다. 따라서 테스트 역할을 사용하여 IAM 콘솔에 로그인하고 AWS에서 ABAC에 대한 태그를 사용하는 방법을 경험할 수 있습니다.

참고

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

관련 내용은 다음 리소스를 참조하십시오.

계정의 태그를 모니터링하는 방법을 알아보려면 서버리스 워크플로 및 Amazon CloudWatch Events를 사용하여 AWS에서 리소스 태그 변경 모니터링을 참조하세요.