VPC 엔드포인트를 통해 AWS KMS에 연결 - AWS Key Management Service

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

VPC 엔드포인트를 통해 AWS KMS에 연결

인터넷을 통해 연결하지 않고 VPC의 프라이빗 엔드포인트를 통해 AWS KMS에 직접 연결할 수 있습니다. VPC 엔드포인트를 사용하는 경우 VPC와 AWS KMS 사이의 통신은 모두 AWS 네트워크에서 수행됩니다.

AWS KMS은 를 지원합니다.Amazon Virtual Private CloudAmazon VPC VPC)인터페이스 엔드포인트에 의해 구동되는AWSPrivateLink. 각 VPC 엔드포인트는 하나 이상의 탄력적 네트워크 인터페이스(ENI) 및 VPC 서브넷의 프라이빗 IP 주소로 표현됩니다.

VPC 인터페이스 엔드포인트는 VPC를 직접AWS KMS인터넷 게이트웨이, NAT 장치, VPN 연결 또는 AWS Direct Connect 연결을 사용합니다. VPC의 인스턴스는 AWS KMS와 통신하는 데 퍼블릭 IP 주소를 필요로 하지 않습니다.

지원되는 AWS 리전

AWS KMS에서 VPC 엔드포인트를 지원합니다. AWS 리전 여기서 둘 다.Amazon VPCAWS KMS를 사용할 수 있습니다.

AWS KMS VPC 종단점 고려 사항

에 대한 인터페이스 VPC 엔드포인트를 설정하기 전에AWS KMS를 검토하려면인터페이스 엔드포인트 속성 및 제한항목에 있는 항목.Amazon VPC User Guide.

VPC 엔드포인트에 대한 AWS KMS의 기능 지원은 다음과 같습니다.

  • VPC 인터페이스 엔드포인트를 사용하여 VPC에서 모든 AWS KMS API 작업을 호출할 수 있습니다.

  • AWS KMS에서는 AWS KMS FIPS 엔드포인트에 대한 VPC 인터페이스 엔드포인트 생성을 지원하지 않습니다.

  • 다음을 수행할 수 있습니다.AWS CloudTrail의 사용을 감사하기 위해AWS KMS고객 마스터 키 (CMK) 를 통해 VPC 엔드포인트를 확인할 수 있습니다. 자세한 내용은 단원을 참조하십시오VPC 엔드포인트 로깅

AWS KMS용 VPC 엔드포인트 생성

에 대한 VPC 엔드포인트를 생성할 수 있습니다.AWS KMSAmazon VPC 콘솔 또는 Amazon VPC API를 사용하여 관리할 수 있습니다. 자세한 내용은 Amazon VPC 사용 설명서인터페이스 엔드포인트 생성을 참조하십시오.

AWS KMS용 VPC 엔드포인트를 생성하려면 다음 서비스 이름을 사용합니다.

com.amazonaws.region.kms

예를 들어 미국 서부 (오레곤) 리전 (us-west-2) 서비스 이름은 다음과 같습니다.

com.amazonaws.us-west-2.kms

VPC 엔드포인트를 더 쉽게 사용하려면 VPC 엔드포인트에 프라이빗 DNS 호스트 이름을 사용하도록 설정합니다. 프라이빗 DNS 이름 활성화 옵션을 선택하면 표준 AWS KMS VPC 호스트 이름(https://kms.<region>.amazonaws.com)이 VPC 엔드포인트로 확인됩니다.

이 옵션을 선택하면 VPC 엔드포인트를 더 쉽게 사용할 수 있습니다. 이AWSSDK 및 SDKAWS CLI표준 사용AWS KMSDNS 호스트 이름을 기본적으로 사용하므로 애플리케이션 및 명령에 VPC 엔드포인트 URL을 지정할 필요가 없습니다.

자세한 내용은 Amazon VPC 사용 설명서인터페이스 엔드포인트를 통해 서비스 액세스를 참조하십시오.

AWS KMS VPC 엔드포인트에 연결

AWS SDK, AWS CLI 또는 AWS Tools for PowerShell을 사용하여 VPC 엔드포인트를 통해 AWS KMS에 연결할 수 있습니다. VPC 엔드포인트를 지정하려면 해당 DNS 이름을 사용합니다.

예를 들어 이 list-keys 명령은 endpoint-url 파라미터를 사용해 VPC 엔드포인트를 지정합니다. 이러한 명령을 사용하려면 VPC 엔드포인트 ID 예제를 본인 계정의 ID로 바꿉니다.

$ aws kms list-keys --endpoint-url https://vpce-1234abcdf5678c90a-09p7654s-us-east-1a.ec2.us-east-1.vpce.amazonaws.com

VPC 엔드포인트를 만들 때 프라이빗 호스트 이름을 사용하도록 설정한 경우 CLI 명령 또는 애플리케이션 구성에 VPC 엔드포인트 URL을 지정할 필요가 없습니다. 표준 AWS KMS DNS 호스트 이름(https://kms.<region>.amazonaws.com)이 VPC 엔드포인트로 확인됩니다. AWS CLI와 SDK는 기본적으로 이 호스트 이름을 사용하므로 스크립트 및 애플리케이션의 내용을 변경하지 않고 VPC 엔드포인트를 사용할 수 있습니다.

프라이빗 호스트 이름을 사용하려면 VPC의 enableDnsHostnamesenableDnsSupport 속성을 true로 설정해야 합니다. 이러한 속성을 설정하려면 ModifyVpcAttribute 작업을 사용합니다.

VPC 엔드포인트에 대한 액세스 제어

에 대한 VPC 엔드포인트에 대한 액세스를 제어하려면AWS KMS를 연결하려면VPC 엔드포인트 정책를 VPC 엔드포인트로 연결합니다. 엔드포인트 정책은 보안 주체가 VPC 엔드포인트를 사용하여AWS KMS에 대한 작업 수행AWS KMS있습니다.

엔드포인트를 생성할 때 VPC 엔드포인트 정책을 생성할 수 있으며, 언제든지 VPC 엔드포인트 정책을 변경할 수 있습니다. VPC 관리 콘솔을 사용하거나CreateVpcEndpoint또는ModifyVpcEndpoint작업을 수행합니다. 다음 방법으로 VPC 엔드포인트 정책을 생성하고 변경할 수도 있습니다.를 사용하는 방법AWS CloudFormation템플릿. VPC 관리 콘솔 사용에 대한 도움말은인터페이스 엔드포인트 생성인터페이스 엔드포인트 수정Amazon VPC User Guide.

참고

AWS KMS는 2020년 7월부터 VPC 엔드포인트 정책을 지원합니다. 에 대한 VPC 엔드포인트AWS KMS이 날짜 이전에 생성 된기본 VPC 엔드포인트 정책를 변경할 수 있지만 언제든 변경할 수 있습니다.

JSON 정책 문서 작성 및 서식 지정에 대한 도움말은IAM JSON 정책 참조 자료IAM 사용 설명서.

VPC 엔드포인트 정책 정보

에 대 한AWS KMS요청이 성공하려면 VPC 주체에게 다음 두 소스의 권한이 필요합니다.

  • A키 정책,IAM 정책 입니다.또는권한 부여는 리소스 (CMK 또는 별칭) 에 대한 작업을 호출할 수 있는 보안 주체 권한을 부여해야 합니다.

  • VPC 엔드포인트 정책은 보안 주체에 엔드포인트를 사용하여 요청을 수행할 권한을 부여해야 합니다.

예를 들어 키 정책은 보안 주체에게암호화 해제특정 CMK에. 그러나 VPC 엔드포인트 정책에서 보안 주체가Decrypt끝점을 사용하여 해당 CMK에.

또는 VPC 엔드포인트 정책에서 보안 주체가 엔드포인트를 사용하여DisableKey특정 CMK. 그러나 보안 주체가 키 정책, IAM 정책 또는 부여의 권한을 가지고 있지 않으면 요청이 실패합니다.

기본 VPC 엔드포인트 정책

모든 VPC 엔드포인트에는 VPC 엔드포인트 정책이 있지만 정책을 지정할 필요는 없습니다. 정책을 지정하지 않으면 기본 끝점 정책은 엔드포인트의 모든 리소스에 대한 모든 보안 주체의 모든 작업을 허용합니다.

그러나,AWS KMS리소스에서 작업을 호출할 수 있는 권한도 있어야 합니다.키 정책,IAM 정책 입니다.또는권한 부여. 따라서 실제로 기본 정책에서는 보안 주체가 리소스에 대한 작업을 호출할 권한이 있는 경우 엔드포인트를 사용하여 해당 작업을 호출할 수도 있다고 말합니다.

{ "Statement": [ { "Action": "*", "Effect": "Allow", "Principal": "*", "Resource": "*" } ] }

보안 주체가 허용된 작업의 하위 집합에 대해서만 VPC 엔드포인트를 사용할 수 있도록 허용하려면VPC 엔드포인트 정책을 생성 또는 수정합니다..

VPC 엔드포인트 정책 생성

VPC 엔드포인트 정책은 보안 주체가 VPC 엔드포인트를 사용하여 리소스에 대한 작업을 수행할 권한이 있는지 여부를 결정합니다. 용AWS KMS리소스에서 작업을 수행할 수 있는 권한도 있어야 합니다.키 정책,IAM 정책 입니다.또는권한 부여.

각 VPC 엔드포인트 정책 설명에는 다음 요소가 필요합니다.

  • 작업을 수행할 수 있는 보안 주체.

  • 수행할 수 있는 작업

  • 작업을 수행할 수 있는 리소스

정책 설명은 VPC 엔드포인트를 지정하지 않습니다. 대신 정책이 연결되는 VPC 엔드포인트에 적용됩니다. 자세한 내용은 Amazon VPC 사용 설명서VPC 엔드포인트를 통해 서비스에 대한 액세스 제어를 참조하십시오.

다음은 에 대한 VPC 엔드포인트 정책 예제입니다.AWS KMS. VPC 엔드포인트에 연결되는 경우 이 정책은ExampleUser를 사용하여 VPC 엔드포인트를 사용하여 지정된 CMK에서 지정된 작업을 호출할 수 있습니다. 이와 같은 정책을 사용하기 전에 예제 보안 주체 및키 ARN를 계정의 유효한 값으로 바꿉니다.

{ "Statement":[ { "Sid": "AllowDecryptAndView", "Principal": {"AWS": "arn:aws:iam::111122223333:user/ExampleUser"}, "Effect":"Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:ListAliases", "kms:ListKeys" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ] }

AWS CloudTrail는 VPC 엔드포인트를 사용하는 모든 작업을 기록합니다. 그러나 CloudTrail 로그에는 다른 계정의 보안 주체가 요청한 작업이나 다른 계정의 CMK 작업이 포함되지 않습니다.

따라서 외부 계정의 보안 주체가 VPC 엔드포인트를 사용하여AWS KMS로컬 계정의 모든 키에 대한 작업을 수행할 수 있습니다.

다음 예제에서는 를 사용합니다.aws:PrincipalAccount글로벌 조건 키를 사용하여 보안 주체가 로컬 계정에 있지 않은 경우 모든 CMK의 모든 작업에 대한 모든 보안 주체에 대한 액세스를 거부할 수 있습니다. 이와 같은 정책을 사용하기 전에 예제 계정 ID를 유효한 것으로 바꾸십시오.

{ "Statement": [ { "Sid": "AccessForASpecificAccount", "Principal": {"AWS": "*"}, "Action": "kms:*", "Effect": "Deny", "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "StringNotEquals": { "aws:PrincipalAccount": "111122223333" } } } ] }

VPC 엔드포인트 정책 보기

엔드포인트에 대한 VPC 엔드포인트 정책을 보려면VPC 관리 콘솔또는DescribeVpcEndpoints작업을 수행합니다.

다음 사항:AWS CLI명령은 지정된 VPC 엔드포인트 ID를 가진 엔드포인트에 대한 정책을 가져옵니다.

이 명령을 사용하기 앞서 예제에 나온 엔드포인트 ID를 유효한 ID로 대체합니다.

$ aws ec2 describe-vpc-endpoints \ --query 'VpcEndpoints[?VpcEndpointId==`vpce-1234abcdf5678c90a`].[PolicyDocument]' --output text

정책 설명에 VPC 엔드포인트 사용

에 대한 액세스를 제어할 수 있습니다.AWS KMS리소스 및 작업을 수행할 수 있습니다. 요청이 VPC에서 전송되거나 VPC 엔드포인트를 사용하는 경우 이렇게 하려면 다음 중 하나를 사용하십시오.전역 조건 키(A) 에서키 정책또는IAM 정책 입니다..

  • 사용aws:sourceVpce조건 키를 사용해 VPC 엔드포인트를 기반으로 액세스를 부여하거나 제한합니다.

  • 사용aws:sourceVpc조건 키를 사용해 프라이빗 엔드포인트를 호스팅하는 VPC 기반으로 액세스를 부여하거나 제한합니다.

참고

VPC 엔드포인트를 기반으로 키 정책 및 IAM 정책을 생성할 경우 주의하십시오. 정책 설명에서 특정 VPC 또는 VPC 엔드포인트의 요청을 요구하는 경우, 통합AWS를 사용하는AWS KMS리소스가 실패할 수 있습니다. 도움말은 AWS KMS 권한으로 정책에서 VPC 엔드포인트 조건 사용를 참조하십시오.

또한,aws:sourceIP조건 키가 효과적이지 않은 경우 요청이Amazon VPC 엔드포인트. 요청을 VPC 엔드포인트로 제한하려면 aws:sourceVpce 또는 aws:sourceVpc 조건 키를 사용합니다. 자세한 내용은 단원을 참조하십시오.VPC 엔드포인트 - 엔드포인트 사용 제어Amazon VPC User Guide.

이러한 글로벌 조건 키를 사용하여 고객 마스터 키 (CMK), 별칭 및CreateKey특정 리소스에 의존하지 않는.

예를 들어 다음 샘플 키 정책을 사용하면 요청이 지정된 VPC 엔드포인트를 사용하는 경우에만 사용자가 CMK로 일부 암호화 작업을 수행할 수 있습니다. 사용자가 AWS KMS에 요청하면 요청의 VPC 엔드포인트 ID가 정책의 aws:sourceVpce 조건 키 값과 비교됩니다. 두 값이 일치하지 않는 경우 요청이 거부됩니다.

이와 같은 정책을 사용하려면 자리 표시자 AWS 계정 계정에 유효한 값을 가진 ID 엔드포인트 ID 및 VPC 엔드포인트 ID.

{ "Id": "example-key-1", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM policies", "Effect": "Allow", "Principal": {"AWS":["111122223333"]}, "Action": ["kms:*"], "Resource": "*" }, { "Sid": "Restrict usage to my VPC endpoint", "Effect": "Deny", "Principal": "*", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1234abcdf5678c90a" } } } ] }

또한 aws:sourceVpc 조건 키를 사용하여 VPC 엔드포인트가 있는 VPC를 기반으로 CMK에 대한 액세스를 제한할 수 있습니다.

다음 샘플 키 정책은 CMK가 vpc-12345678에서 이루어진 경우에만 CMK를 관리하는 명령을 허용합니다. 또한 CMK를 사용하는 명령이 vpc-2b2b2b2b에서 이루어진 경우에만 암호화 작업에 사용할 수 있습니다. 애플리케이션이 하나의 VPC에서 실행 중이지만 관리 용도로 VPC를 하나 더 사용하는 경우, 이와 같은 정책을 사용할 수 있습니다.

이와 같은 정책을 사용하려면 자리 표시자 AWS 계정 계정에 유효한 값을 가진 ID 엔드포인트 ID 및 VPC 엔드포인트 ID.

{ "Id": "example-key-2", "Version": "2012-10-17", "Statement": [ { "Sid": "Allow administrative actions from vpc-12345678", "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": [ "kms:Create*","kms:Enable*","kms:Put*","kms:Update*", "kms:Revoke*","kms:Disable*","kms:Delete*", "kms:TagResource", "kms:UntagResource" ], "Resource": "*", "Condition": { "StringEquals": { "aws:sourceVpc": "vpc-12345678" } } }, { "Sid": "Allow key usage from vpc-2b2b2b2b", "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": [ "kms:Encrypt","kms:Decrypt","kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:sourceVpc": "vpc-2b2b2b2b" } } }, { "Sid": "Allow read actions from everywhere", "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": [ "kms:Describe*","kms:List*","kms:Get*" ], "Resource": "*", } ] }

VPC 엔드포인트 로깅

AWS CloudTrail는 VPC 엔드포인트를 사용하는 모든 작업을 기록합니다. AWS KMS 요청에 VPC 엔드포인트를 사용하면 요청을 기록하는 AWS CloudTrail 로그 항목에 VPC 엔드포인트 ID가 표시됩니다. 엔드포인트 ID를 사용하여 AWS KMS VPC 엔드포인트의 사용을 감사할 수 있습니다.

그러나 CloudTrail 로그에는 다른 계정의 보안 주체가 요청한 작업이나AWS KMSCMK 및 다른 계정의 별칭에 대한 작업을 수행할 수 있습니다. 또한 VPC 보호하기 위해VPC 엔드포인트 정책에 기록되지 않지만 그렇지 않으면 허용되었을 것입니다.AWS CloudTrail.

예를 들어, 이 샘플 로그 항목은 VPC 엔드포인트를 사용한 GenerateDataKey 요청을 기록합니다. 로그 항목 끝에 vpcEndpointId 필드가 나타납니다.

{ "eventVersion":"1.05", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::111122223333:user/Alice", "accessKeyId": "EXAMPLE_KEY_ID", "accountId": "111122223333", "userName": "Alice" }, "eventTime":"2018-01-16T05:46:57Z", "eventSource":"kms.amazonaws.com", "eventName":"GenerateDataKey", "awsRegion":"eu-west-1", "sourceIPAddress":"172.01.01.001", "userAgent":"aws-cli/1.14.23 Python/2.7.12 Linux/4.9.75-25.55.amzn1.x86_64 botocore/1.8.27", "requestParameters":{ "keyId":"1234abcd-12ab-34cd-56ef-1234567890ab", "numberOfBytes":128 }, "responseElements":null, "requestID":"a9fff0bf-fa80-11e7-a13c-afcabff2f04c", "eventID":"77274901-88bc-4e3f-9bb6-acf1c16f6a7c", "readOnly":true, "resources":[{ "ARN":"arn:aws:kms:eu-west-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId":"111122223333", "type":"AWS::KMS::Key" }], "eventType":"AwsApiCall", "recipientAccountId":"111122223333", "vpcEndpointId": "vpce-1234abcdf5678c90a" }