태그를 사용한 AWS 리소스 액세스 제어 - AWS Identity and Access Management

태그를 사용한 AWS 리소스 액세스 제어

태그를 사용하여, IAM 리소스를 비롯한 태깅을 지원하는 AWS 리소스에 대한 액세스를 제어할 수 있습니다. IAM 사용자 및 역할을 태깅하여 액세스할 수 있는 권한을 제어할 수 있습니다. IAM 사용자 및 역할을 태그 지정하는 방법을 알아보려면 IAM 리소스에 태그 지정 섹션을 참조하세요. 또한 고객 관리형 정책, IAM 자격 증명 공급자, 인스턴스 프로파일, 서버 인증서, 가상 MFA 디바이스 등의 IAM 리소스에 대한 액세스를 제어할 수 있습니다. 보안 주체 태그가 있는 IAM 역할이 일치하는 태그가 있는 리소스에 액세스할 수 있도록 허용하는 정책을 만들고 테스트하는 자습서를 보려면 IAM 튜토리얼: 태그를 기반으로 AWS 리소스에 액세스할 수 있는 권한 정의 섹션을 참조하세요. 다음 섹션의 정보를 사용하여 IAM 사용자 또는 역할을 태깅하지 않고 IAM 리소스를 비롯한 다른 AWS 리소스에 대한 액세스를 제어합니다.

태그를 사용하여 AWS 리소스에 대한 액세스를 제어하기 전에 AWS의 액세스 허용 방식을 이해해야 합니다. 또한 AWS는 리소스의 컬렉션으로 구성되어 있습니다. Amazon EC2 인스턴스는 리소스입니다. Amazon S3 버킷은 리소스입니다. AWS API, AWS CLI 또는 AWS Management Console을 사용하여 작업(예: Amazon S3에서 버킷 생성)을 수행할 수 있습니다. 그렇게 하면 해당 작업에 대한 요청을 보냅니다. 이 요청은 작업, 리소스, 보안 주체 엔터티(사용자 또는 역할), 보안 주체 계정 및 필요한 요청 정보를 지정합니다. 이러한 모든 정보는 콘텍스트를 제공합니다.

그런 다음 AWS은 사용자(보안 주체 엔터티)가 지정된 리소스에 대해 지정된 작업을 수행할 수 있도록 인증(로그인) 및 권한 부여(권한 있음)되었는지 확인합니다. 권한을 부여하는 동안 AWS는 요청 콘텍스트에 적용되는 모든 정책을 확인합니다. 대부분의 정책은 AWS에 JSON 문서로 저장되며 보안 주체 엔터티에 대한 권한을 지정합니다. 정책 유형 및 활용에 대한 자세한 정보는 IAM의 정책 및 권한 섹션을 참조하세요.

AWS는 정책이 요청의 각 부분을 허용한 경우에만 요청에 권한을 부여합니다. 다이어그램을 보고 IAM 인프라에 대해 자세히 알아보려면 IAM 작동 방식 섹션을 참조하세요. IAM 요청이 허용되는지 여부를 결정하는 방법에 대한 자세한 내용은 정책 평가 로직 섹션을 참조하세요.

태그는 이 프로세스에서 고려해야 할 또 다른 요소인데, 리소스에 태그가 연결되거나 태그 지정을 지원하는 서비스에 대한 요청에 전달될 수 있기 때문입니다. 태그를 기반으로 액세스를 제어하려면 정책의 조건 요소에 태그 정보를 제공하세요. AWS 서비스에서 태그를 사용한 액세스 제어를 지원하는지 여부를 알아보려면 AWS IAM으로 작업하는 서비스 섹션을 참조하고, ABAC 열이 인 서비스를 찾아보세요. 서비스의 이름을 선택하여 해당 서비스에 대한 권한 부여 및 액세스 제어 문서를 봅니다.

그러면 리소스의 태그를 기반으로 리소스에 대한 액세스를 허용하거나 거부하는 IAM 정책을 생성할 수 있습니다. 해당 정책에서는 태그 조건 키를 사용하여 다음 중 하나에 대한 액세스를 제어할 수 있습니다.

  • 리소스 - 리소스에 대한 태그를 기반으로 AWS 서비스 리소스에 대한 액세스를 제어합니다. 이를 수행하려면 ResourceTag/key-name 조건 키를 사용하여 리소스에 연결된 태그를 기반으로 리소스에 대한 액세스를 허용할지 여부를 결정합니다.

  • 요청 - 어떤 태그가 요청에 전달될 수 있는지 제어합니다. 이를 수행하려면 aws:RequestTag/key-name 조건 키를 사용하여 AWS 리소스에 태그를 지정하는 요청에서 어떤 태그 키 값 페어를 전달할 수 있는지 지정합니다.

  • 권한 부여 프로세스의 일부 - aws:TagKeys 조건 키를 사용하여 특정 태그 키를 요청에서 사용할 수 있는지 여부를 제어합니다.

JSON을 사용하거나 기존 관리형 정책을 가져와서 시각적으로 IAM 정책을 생성할 수 있습니다. 세부 정보는 IAM 정책 생성을 참조하세요.

참고

일부 서비스에서는 사용자가 리소스를 생성하는 작업을 사용할 권한이 있는 경우 리소스 생성 시 태그를 지정할 수 있도록 허용합니다.

AWS 리소스에 대한 액세스 제어

IAM 정책의 조건을 사용하여 해당 리소스의 태그를 기반으로 AWS 리소스에 대한 액세스를 제어할 수 있습니다. 전역 aws:ResourceTag/tag-key 조건 키 또는 서비스별 키를 사용하여 이 작업을 수행할 수 있습니다. 일부 서비스는 이 키의 서비스별 버전만 지원하며 전역 버전은 지원하지 않습니다.

주의

역할에 태그를 지정한 다음 iam:PassRole 작업과 함께 정책의 ResourceTag 조건 키를 사용하는 것으로 역할을 전달할 수 있는 사람을 제어하려고 하지 마십시오. 이 접근법은 신뢰할 수 있는 결과를 가져오지 못합니다. 서비스로 역할을 전달하는 데 필요한 권한에 대한 자세한 내용은 사용자에게 AWS 서비스에 역할을 전달할 권한 부여 섹션을 참조하세요.

이 예제는 Amazon EC2 인스턴스의 시작 또는 중지를 허용하는 아이덴티티 기반 정책을 생성하는 방법을 보여줍니다. 이러한 작업은 인스턴스 태그 Owner가 사용자 이름 값을 포함한 경우에만 허용됩니다. 이 정책은 프로그래밍 방식 및 콘솔 액세스에 대한 권한을 정의합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances" ], "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringEquals": {"aws:ResourceTag/Owner": "${aws:username}"} } }, { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" } ] }

이 정책을 계정의 IAM 사용자에게 연결할 수 있습니다. 이름이 richard-roe인 사용자가 Amazon EC2 인스턴스를 시작하려 하는 경우 인스턴스에 Owner=richard-roe 또는 owner=richard-roe 태그가 지정되어야 합니다. 그렇지 않은 경우 액세스가 거부됩니다. 태그 키 OwnerOwnerowner 모두와 일치하는데, 조건 키가 대/소문자를 구분하지 않기 때문입니다. 자세한 내용은 IAM JSON 정책 요소: Condition 단원을 참조하십시오.

이 예제는 리소스 ARN에 team 보안 주체 태그를 사용하는 ID 기반 정책을 생성하는 방법을 보여줍니다. 정책은 Amazon Simple Queue Service 대기열을 삭제할 수 있는 권한을 부여하지만, 팀 이름으로 시작하고 뒤에 -queue이 붙은 대기열 이름에만 해당됩니다. 예를 들어, qateam 보안 주체 태그의 팀 이름인 경우의 qa-queue입니다.

{ "Version": "2012-10-17", "Statement": { "Sid": "AllQueueActions", "Effect": "Allow", "Action": "sqs:DeleteQueue", "Resource": "arn:aws:sqs:us-east-2::${aws:PrincipalTag/team}-queue" } }

AWS 요청 중 액세스 제어

IAM 정책의 조건을 사용하여 AWS 리소스에 태그를 적용하는 요청에서 어떤 태그 키 값 페어를 전달할 수 있는지를 제어할 수 있습니다.

이 예제는 태그를 인스턴스에 연결하는 Amazon EC2 CreateTags 작업 사용을 허용하는 아이덴티티 기반 정책을 생성하는 방법을 보여줍니다. 태그에 environment 키 및 preprod 또는 production 값이 포함된 경우에만 태그를 연결할 수 있습니다. 원하는 경우 ForAllValues 변경자를 aws:TagKeys 조건 키와 함께 사용하여 요청에서 키 environment만 허용됨을 표시할 수 있습니다. 이를 통해 사용자가 environment 대신 Environment를 실수로 사용하는 것과 같이 다른 키를 포함시키는 것을 방지합니다.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": [ "preprod", "production" ] }, "ForAllValues:StringEquals": {"aws:TagKeys": "environment"} } } }

태그 키를 기반으로 액세스 제어

IAM 정책에서 조건을 사용하여 요청에 특정 태그 키를 사용할 수 있는지 여부를 제어할 수 있습니다.

정책을 사용하여 태그를 사용한 액세스를 제어할 때 aws:TagKeys 조건 키를 사용하는 것이 좋습니다. 태그를 지원하는 AWS 서비스를 통해 대소문자만 다른 여러 태그 키 이름을 생성할 수 있습니다(예: Amazon EC2 인스턴스에 stack=productionStack=test 태그 지정). 정책 조건에서 키 이름은 대/소문자를 구분하지 않습니다. 따라서 정책의 조건 요소에서 "aws:ResourceTag/TagKey1": "Value1" 지정을 완료한 경우 조건은 이름이 TagKey1 또는 tagkey1인 리소스 태그 키와 일치하지만 두 가지 모두와 일치하지는 않습니다. 대소문자만 다른 키를 포함한 중복 태그를 방지하려면 aws:TagKeys 조건을 사용하여 사용자가 적용할 수 있는 태그 키를 정의하거나 AWS Organizations과(와) 함께 사용할 수 있는 태그 정책을 사용합니다. 자세한 내용은 Organizations 사용 설명서태그 정책을 참조하세요.

이 예제에서는 Secrets Manager 비밀 생성 태그 지정을 허용하는 아이덴티티 기반 정책을 생성하는 방법을 보여줍니다(태그 키가 environment 또는 cost-center인 경우만). Null 조건은 요청에 태그가 없는 경우 조건이 false로 평가되도록 합니다.

{ "Effect": "Allow", "Action": [ "secretsmanager:CreateSecret", "secretsmanager:TagResource" ], "Resource": "*", "Condition": { "Null": { "aws:TagKeys": "false" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "environment", "cost-center" ] } } }