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

키 정책의 AWS 서비스에 대한 권한

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

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

고객 관리형 키에서 서비스에 필요한 권한을 찾으려면 서비스에 대한 암호화 문서를 참조하세요. 예를 들어 Amazon Elastic Block Store(Amazon EBS)에 필요한 권한은 Linux 인스턴스용 Amazon EC2 사용 설명서Windows 인스턴스용 Amazon EC2 사용 설명서IAM 사용자의 권한을 참조하세요. Secrets Manager에 필요한 권한은 AWS Secrets Manager 사용 설명서KMS 키 사용 권한 부여를 참조하세요.

최소 권한 구현

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

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

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

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

암호화 컨텍스트 조건 키는 정책문의 작업이 CreateGrant이거나 EncryptionContext 파라미터(예: GenerateDataKey 또는 Decrypt와 같은 작업)를 가져오는 AWS KMS 대칭 암호화 작업인 경우에만 사용합니다. (지원되는 작업 목록은 kms:EncryptionContext:context-key 또는 kms:EncryptionContextKeys 섹션 참조) 이러한 조건 키를 사용하여 DescribeKey와 같은 다른 작업을 허용하는 경우 권한이 거부됩니다.

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

다음 예제 키 정책문은 Amazon Location Service에서 승인된 사용자를 대신하여 권한 부여를 생성하도록 허용합니다. 이 정책문은 kms:ViaService, kms:CallerAccountkms:EncryptionContext:context-key 조건 키를 사용하여 권한을 제한해 특정 추적기 리소스에 권한을 연결합니다.

{ "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 서비스에서 AWS KMS로 올 때만 권한 부여 컨텍스트에 포함됩니다. 이러한 조건 조합은 최소 권한을 구현하고 잠재적 혼동된 대리자 시나리오를 방지합니다. 서비스 보안 주체는 일반적으로 키 정책에서 보안 주체로 사용되지 않지만 일부 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/*" ] } } } ] }