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

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

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

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

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

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

지원되는 AWS 리전

AWS KMS는 Amazon VPCAWS KMS를 모두 사용할 수 있는 모든 AWS 리전의 VPC 엔드포인트를 지원합니다.

AWS KMS VPC 엔드포인트 고려 사항

용 인터페이스 VPC 엔드포인트를 설정하기 전에 AWS KMShttps://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#vpce-interface-limitations에서 인터페이스 엔드포인트 속성 및 제한Amazon VPC 사용 설명서 주제를 검토하십시오.

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

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

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

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

AWS KMS용 VPC 엔드포인트 생성

Amazon VPC 콘솔 또는 Amazon VPC API를 사용하여 AWS KMS용 VPC 엔드포인트를 생성할 수 있습니다. 자세한 내용은 https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint인터페이스 엔드포인트 생성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 엔드포인트를 더 쉽게 사용할 수 있습니다. AWS 및 SDKs는 기본적으로 표준 AWS CLI DNS 호스트 이름을 사용하므로 애플리케이션 및 명령에 VPC 엔드포인트 URL을 지정할 필요가 없습니다.AWS KMS

자세한 내용은 https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#access-service-though-endpoint인터페이스 엔드포인트를 통해 서비스 액세스Amazon VPC 사용 설명서를 참조하십시오.

AWS KMS VPC 엔드포인트에 연결

AWS SDK, AWS CLI 또는 PowerShell용 AWS 도구을 사용하여 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는 기본적으로 이 호스트 이름을 사용하므로 스크립트 및 애플리케이션의 내용을 변경하지 않고 VPC 엔드포인트를 사용할 수 있습니다.SDKs

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

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

의 VPC 엔드포인트에 대한 액세스를 제어하려면 AWS KMSVPC 엔드포인트 정책을 VPC 엔드포인트에 연결합니다. 엔드포인트 정책은 보안 주체가 VPC 엔드포인트를 사용하여 AWS KMS 리소스에 대한 AWS KMS 작업을 호출할 수 있는지 여부를 결정합니다.

엔드포인트를 생성할 때 VPC 엔드포인트 정책을 생성할 수 있으며, 언제든지 VPC 엔드포인트 정책을 변경할 수 있습니다. VPC 관리 콘솔이나 CreateVpcEndpoint 또는 ModifyVpcEndpoint 작업을 사용합니다. 템플릿을 사용하여 VPC 엔드포인트 정책을 생성하고 변경할 수도 있습니다.AWS CloudFormation VPC 관리 콘솔 사용에 대한 도움말은 인터페이스 엔드포인트 생성인터페이스 엔드포인트 수정을 참조하십시오.Amazon VPC 사용 설명서

참고

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

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

VPC 엔드포인트 정책 정보

VPC 엔드포인트를 사용하는 AWS KMS 요청이 성공하려면 보안 주체는 다음 두 소스의 권한이 필요합니다.

예를 들어, 키 정책은 보안 주체에게 특정 CMK에 대해 Decrypt를 호출할 수 있는 권한을 부여할 수 있습니다. 그러나 VPC 엔드포인트 정책은 엔드포인트를 사용하여 해당 Decrypt에서 해당 보안 주체가 CMK를 호출하도록 허용하지 않을 수 있습니다.

또는 VPC 엔드포인트 정책이 보안 주체가 엔드포인트를 사용하여 특정 에 대해 DisableKeyCMKs를 호출하도록 허용할 수 있습니다. 하지만 보안 주체에게 키 정책, 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 엔드포인트를 통해 서비스에 대한 액세스 제어를 참조하십시오.

다음은 AWS KMS에 대한 VPC 엔드포인트 정책의 예제입니다. 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 로그에는 보안 주체가 요청한 다른 계정의 작업이나 다른 계정의 CMKs에 대한 작업은 포함되지 않습니다.

따라서 외부 계정의 보안 주체가 VPC 엔드포인트를 사용하여 로컬 계정의 키에 대한 KMS 작업을 호출하지 못하도록 하는 VPC 엔드포인트 정책을 생성할 수 있습니다.

다음 예제에서는 aws:PrincipalAccount 전역 조건 키를 사용하여 보안 주체가 로컬 계정에 없으면 모든 CMKs의 모든 작업에 대한 모든 보안 주체에 대한 액세스를 거부합니다. 이와 같은 정책을 사용하기 전에 예제 계정 ID를 유효한 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 엔드포인트 사용

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

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

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

참고

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

또한 요청이 Amazon VPC 엔드포인트에서 이루어지는 경우 aws:sourceIP 조건 키는 유효하지 않습니다. 요청을 VPC 엔드포인트로 제한하려면 aws:sourceVpce 또는 aws:sourceVpc 조건 키를 사용합니다. 자세한 내용은 Amazon VPC 사용 설명서VPC 엔드포인트 - 엔드포인트 사용 제어를 참조하십시오.

이러한 전역 조건 키를 사용하여 특정 리소스에 의존하지 않는 고객 마스터 키(CMKs), 별칭 및 CreateKey 같은 작업에 대한 액세스를 제어할 수 있습니다.

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

이와 같은 정책을 사용하려면 자리 표시자 AWS 계정 ID 및 VPC 엔드포인트 IDs를 계정에 유효한 값으로 바꿉니다.

{ "Id": "example-key-1", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM user permissions", "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를 기반으로 CMKs에 대한 액세스를 제한할 수 있습니다.

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

이와 같은 정책을 사용하려면 자리 표시자 AWS 계정 ID 및 VPC 엔드포인트 IDs를 계정에 유효한 값으로 바꿉니다.

{ "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 KMS의 CMKs 작업 및 다른 계정의 별칭에 대한 요청은 포함되지 않습니다. 또한 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" }