최소 권한 - AWS Key Management Service

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

최소 권한

KMS 키는 민감한 정보를 보호하므로 최소 권한 액세스 원칙을 따르는 것이 좋습니다. 키 정책을 정의할 때 작업을 수행하는 데 필요한 최소 권한을 위임합니다. 추가 IAM 정책으로 권한을 더 제한하려는 경우에만 KMS 키 정책에 대한 모든 작업(kms:*)을 허용합니다. IAM 정책을 사용하여 권한을 관리하려는 경우 IAM 정책을 생성하여 IAM 위탁자에 연결하고 정책 변경을 모니터링할 수 있는 사용자를 제한합니다.

키 정책과 IAM 정책 모두에서 모든 작업(kms:*)을 허용하는 경우 위탁자는 KMS 키에 대한 관리 및 사용 권한을 모두 갖습니다. 보안 모범 사례로, 이러한 권한을 특정 위탁자에게만 위임하는 것이 좋습니다. 키 정책에서 위탁자의 이름을 명시적으로 지정하거나 IAM 정책이 연결되는 위탁자를 제한하여 이 작업을 수행할 수 있습니다. 조건 키를 사용하여 권한을 제한할 수도 있습니다. 예를 들어 aws:PrincipalTag를 사용하여 API 직접 호출을 하는 위탁자가 조건 규칙에 지정된 태그를 가진 경우 모든 작업을 허용할 수 있습니다.

AWS에서 정책 문을 평가하는 방법을 이해하는 데 도움이 필요하면 IAM 사용 설명서의 정책 평가 로직을 참조하세요. 정책을 작성하기 전에 이 주제를 검토하여 정책이 의도치 않은 영향(예: 접근 권한이 없어야 할 주체에게 접근 권한을 제공하는 경우)을 미칠 가능성을 줄이는 것이 좋습니다.

작은 정보

비프로덕션 환경에서 애플리케이션을 테스트할 때는 IAM Access Analyzer를 사용하면 IAM 정책에 최소 권한을 적용하는 데 도움이 됩니다.

IAM 역할 대신 IAM 사용자를 사용하는 경우 장기 자격 증명의 취약성을 완화하기 위해 AWS Multi-Factor Authentication(MFA)을 활성화하는 것이 좋습니다. MFA를 사용하여 다음을 수행할 수 있습니다.

  • 사용자에게 키 삭제 예약과 같은 권한 있는 작업을 수행하기 전에 MFA를 사용하여 자격 증명을 검증하도록 요구합니다.

  • 관리자 계정 암호 및 MFA 디바이스의 소유권을 개인 간에 분할하여 분할 권한 부여를 구현합니다.

최소 권한 구현

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/*" ] } } } ] }