주요 정책의 AWS 서비스에 대한 권한 - AWS Key Management Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

주요 정책의 AWS 서비스에 대한 권한

많은 AWS 서비스가 자신이 관리하는 리소스를 보호하는 AWS KMS keys 데 사용합니다. 서비스가 AWS 소유 키 또는 AWS 관리형 키를 사용하는 경우, 서비스가 이러한 KMS 키에 대한 키 정책을 설정하고 유지 관리합니다.

그러나 고객 관리형 키와 함께 AWS 서비스를 사용하는 경우, 사용자가 키 정책을 설정하고 유지 관리합니다. 이 키 정책은 사용자를 대신하여 리소스를 보호하는 데 필요한 최소 권한을 서비스에 허용해야 합니다. 서비스에 필요한 권한만 제공하는 최소 권한의 원칙을 따르는 것이 좋습니다. 서비스에 필요한 권한이 무엇인지 파악하고 AWS 전역 조건 키AWS KMS 조건 키를 사용하여 권한을 구체화하면 이 작업을 효과적으로 수행할 수 있습니다.

고객 관리형 키에서 서비스에 필요한 권한을 찾으려면 서비스에 대한 암호화 문서를 참조하세요. 예를 들어, 아마존 엘라스틱 블록 스토어 (Amazon EBS) 에 필요한 권한은 Amazon EC2 사용 설명서 및 Amazon EC2 사용 설명서의 IAM 사용자에대한 권한을 참조하십시오. Secrets Manager에 필요한 권한은 AWS Secrets Manager 사용 설명서KMS 키 사용 권한 부여를 참조하세요.

최소 권한 구현

AWS 서비스에 KMS 키 사용 권한을 부여하는 경우 해당 권한이 서비스가 사용자를 대신하여 액세스해야 하는 리소스에만 유효한지 확인하십시오. 이 최소 권한 전략은 요청이 서비스 간에 전달될 때 KMS 키의 무단 사용을 방지하는 데 도움이 됩니다. AWS

최소 권한 전략을 구현하려면 AWS KMS 암호화 컨텍스트 조건 키와 글로벌 소스 ARN 또는 소스 계정 조건 키를 사용하는 것이 좋습니다.

암호화 컨텍스트 조건 키 사용

AWS KMS 리소스를 사용할 때 최소 권한 권한을 구현하는 가장 효과적인 방법은 보안 주체가 암호화 작업을 호출할 수 있도록 허용하는 정책에 kms:EncryptionContext:context-key또는 kms:EncryptionContextKeys조건 키를 포함하는 것입니다. AWS KMS 이러한 조건 키는 리소스가 암호화될 때 암호문에 바인딩된 암호화 컨텍스트에 권한을 연결하기 때문에 특히 효과적입니다.

암호화 컨텍스트 조건 키는 정책 설명에 해당 작업이 있거나 EncryptionContext 매개 변수를 사용하는 AWS KMS 대칭 암호화 작업 (예: 작업) (예: CreateGrant또는 암호 해독) 인 경우에만 사용하십시오. GenerateDataKey (지원되는 작업 목록은 kms:EncryptionContext:context-key 또는 kms:EncryptionContextKeys 섹션 참조) 이러한 조건 키를 사용하여 다른 작업 (예:) 을 허용하는 DescribeKey경우 권한이 거부됩니다.

리소스를 암호화할 때 서비스에서 사용하는 암호화 컨텍스트로 값을 설정합니다. 이 정보는 일반적으로 서비스 문서의 보안 장에서 확인할 수 있습니다. 예를 들어 Proton의 암호화 컨텍스트는 AWSAWS Proton 리소스 및 관련 템플릿을 식별합니다. AWS Secrets Manager 암호화 컨텍스트는 보안 암호와 해당 버전을 식별합니다. Amazon Location에 대한 암호화 컨텍스트는 추적기 또는 컬렉션을 식별합니다.

다음 예제 키 정책문은 Amazon Location Service에서 승인된 사용자를 대신하여 권한 부여를 생성하도록 허용합니다. 이 정책 설명문은 kms:ViaService, kms:kms:EncryptionContext:context-key 조건 키를 사용하여 권한을 특정 CallerAccount 트래커 리소스에 연결함으로써 권한을 제한합니다.

{ "Sid": "Allow Amazon Location to create grants on behalf of authorized users", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/LocationTeam" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "geo.us-west-2.amazonaws.com", "kms:CallerAccount": "111122223333", "kms:EncryptionContext:aws:geo:arn": "arn:aws:geo:us-west-2:111122223333:tracker/SAMPLE-Tracker" } } }

aws:SourceArn 또는 aws:SourceAccount 조건 키 사용

키 정책 문의 보안 주체가 AWS 서비스 보안 주체인 경우, kms:EncryptionContext:context-key 조건 키에 추가로 aws:SourceArn 또는 aws:SourceAccount 전역 조건 키를 사용하는 것이 좋습니다. ARN 및 계정 값은 다른 AWS KMS AWS 서비스로부터 요청이 들어오는 경우에만 권한 부여 컨텍스트에 포함됩니다. 이러한 조건 조합은 최소 권한을 구현하고 잠재적 혼동된 대리자 시나리오를 방지합니다. 서비스 주체는 일반적으로 키 정책에서 보안 주체로 사용되지 않지만, 와 같은 일부 AWS 서비스에서는 보안 주체가 필요합니다. AWS CloudTrail

aws:SourceArn 또는 aws:SourceAccount 전역 조건 키를 사용하려면 값을 Amazon 리소스 이름(ARN) 또는 암호화되는 리소스의 계정으로 설정합니다. 예를 들어, 추적을 암호화하기 위해 AWS CloudTrail 권한을 부여하는 키 정책문에서 aws:SourceArn의 값을 추적의 ARN으로 설정합니다. 가능하면 더 구체적인 aws:SourceArn을 사용합니다. 값을 ARN 또는 와일드카드 문자가 있는 ARN 패턴으로 설정합니다. 리소스의 ARN을 모르면 aws:SourceAccount를 대신 사용합니다.

참고

리소스 ARN에 AWS KMS 키 정책에서 허용되지 않는 문자가 포함된 경우 해당 리소스 ARN을 조건 키 값에 사용할 수 없습니다. aws:SourceArn 대신 aws:SourceAccount 조건 키를 사용합니다. 키 정책 문서 규칙에 대한 자세한 내용은 키 정책 형식 섹션을 참조하세요.

다음 예제 키 정책에서 권한을 가져오는 보안 주체는 AWS CloudTrail 서비스 주체인 cloudtrail.amazonaws.com입니다. 최소 권한을 구현하기 위해 이 정책은 aws:SourceArnkms:EncryptionContext:context-key 조건 키를 사용합니다. 정책 설명문에서는 CloudTrail KMS 키를 사용하여 트레일을 암호화하는 데 사용하는 데이터 키를 생성할 수 있습니다. aws:SourceArnkms:EncryptionContext:context-key 조건은 독립적으로 평가됩니다. 지정된 작업에 KMS 키를 사용하기 위한 요청은 두 조건을 모두 충족해야 합니다.

서비스의 권한을 예제 계정(111122223333) 및 us-west-2 리전의 finance 추적으로 제한하기 위해, 이 정책문은 aws:SourceArn 조건 키를 특정 추적의 ARN에 대해 설정합니다. 조건문은 ArnEquals연산자를 사용하여 매칭 시 ARN의 모든 요소가 독립적으로 평가되도록 합니다. 또한 예제에서는 kms:EncryptionContext:context-key 조건 키를 사용하여 권한을 특정 계정 및 리전의 추적으로 제한합니다.

이 키 정책을 사용하기 전에 예제 계정 ID, 리전 및 추적 이름을 계정의 유효한 값으로 바꿉니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow CloudTrail to encrypt logs", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ArnEquals": { "aws:SourceArn": [ "arn:aws:cloudtrail:us-west-2:111122223333:trail/finance" ] }, "StringLike": { "kms:EncryptionContext:aws:cloudtrail:arn": [ "arn:aws:cloudtrail:*:111122223333:trail/*" ] } } } ] }