VPC 엔드포인트로 Secrets Manager 사용하기 - AWS Secrets Manager

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

VPC 엔드포인트로 Secrets Manager 사용하기

다음 단원에서는 이러한 작업을 설명합니다.

  • Secrets Manager 및 VPC 엔드포인트 연결

  • Secrets Manager VPC 엔드포인트 생성

  • Secrets Manager 엔드포인트에 대한 엔드포인트 정책 생성

VPC 엔드포인트에 대한 자세한 내용은 VPC 서비스 설명서인 VPC 엔드포인트의 문서를 참조하십시오.

VPC 엔드포인트를 통해 Secrets Manager에 연결

VPC를 인터넷에 연결하는 대신 VPC 내에서 구성된 프라이빗 엔드포인트를 통해 Secrets Manager에 직접 연결할 수 있습니다. VPC 서비스 엔드포인트를 사용하는 경우 VPC와 Secrets Manager 사이의 통신은 모두 AWS 네트워크 내에서 이루어지므로 퍼블릭 인터넷에 액세스할 필요가 없습니다.

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

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

Lambda 교체 함수가 프라이빗 엔드포인트를 찾는 경우 다음 단계 중 하나를 수행하십시오.

  • Secrets Manager API 작업AWS CLI 명령에서 VPC 엔드포인트를 수동으로 지정할 수 있습니다. 예를 들어 다음 명령은 endpoint-url 파라미터를 사용하여 Secrets Manager에 대한 AWS CLI 명령에서 VPC 엔드포인트를 지정합니다.

    $ aws secretsmanager list-secrets --endpoint-url https://vpce-1234a5678b9012c-12345678.secretsmanager.us-west-2.vpce.amazonaws.com
  • VPC 프라이빗 엔드포인트에 대해 프라이빗 DNS 호스트 이름을 활성화하면 엔드포인트 URL을 지정할 필요가 없습니다. Secrets Manager CLI 및 SDK가 기본적으로 사용하는 표준 Secrets Manager DNS 호스트 이름(https://secretsmanager.<region>.amazonaws.com)이 VPC 엔드포인트로 자동으로 확인됩니다.

AWS CloudTrail 로그를 사용하면 VPC 엔드포인트를 통해 보안 암호 사용을 감사할 수도 있습니다. 그리고 IAM 및 보안 암호 리소스 기반 정책에 이러한 조건을 사용하면 지정된 VPC 또는 VPC 엔드포인트에서 시작하지 않은 요청에 대한 액세스를 거부할 수 있습니다.

참고

VPC 엔드포인트를 기반으로 IAM 및 키 정책을 작성할 때 주의해야 합니다. 정책 설명에서 특정 VPC 또는 VPC 엔드포인트의 요청을 요구하는 경우, 사용자를 대신하여 보안 암호와 상호 작용하는 다른 AWS 서비스의 요청은 실패할 수 있습니다. 도움말은 Secrets Manager 권한으로 정책에서 VPC 엔드포인트 조건 사용 단원을 참조하십시오.

리전

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

Secrets Manager VPC 프라이빗 엔드포인트 생성

Secrets Manager VPC 프라이빗 엔드포인트를 생성하려면

다음 탭 중 하나에 있는 단계를 따릅니다.

AWS Management Console 사용
  1. https://console.aws.amazon.com/vpc/에서 Amazon VPC 콘솔을 엽니다.

  2. 탐색 모음에서 리전 선택기를 사용하여 리전을 선택합니다.

  3. 탐색 창에서 [Endpoints]를 선택합니다. 기본 창에서 엔드포인트 생성을 선택합니다.

  4. [Service category]에서 [AWS services]를 선택합니다.

  5. 서비스 이름 목록에서 리전의 Secrets Manager 인터페이스 엔드포인트 항목을 선택합니다. 예를 들어 미국 동부(버지니아 북부) 리전에서 항목 이름은 com.amazonaws.us-east-1.secretsmanager입니다.

  6. VPC에서, VPC를 선택합니다.

  7. 서브넷에서 포함하고자 하는 각 가용 영역의 서브넷을 선택합니다.

    VPC 엔드포인트는 여러 가용 영역을 아우를 수 있습니다. AWS에서 선택한 각 서브넷에 VPC 엔드포인트에 대한 탄력적 네트워크 인터페이스를 생성합니다. 각 네트워크 인터페이스에는 DNS 호스트 이름과 프라이빗 IP 주소가 있습니다.

  8. 기본적으로 AWS에서 프라이빗 DNS 이름 활성화 옵션을 활성화하며 표준 Secrets Manager DNS 호스트 이름(https://secretsmanager.<region>.amazonaws.com)이 VPC 엔드포인트로 자동으로 확인됩니다. 이 옵션을 선택하면 VPC 엔드포인트를 더 쉽게 사용할 수 있습니다. Secrets Manager CLI 및 SDK는 기본적으로 표준 DNS 호스트 이름을 사용하므로 애플리케이션 및 명령에 VPC 엔드포인트 URL을 지정할 필요가 없습니다.

    이 기능은 VPC의 enableDnsHostnamesenableDnsSupport 속성을 true(기본값)로 설정한 경우에만 작동합니다. 이러한 속성을 설정하려면 VPC에 대한 DNS 지원을 업데이트합니다.

  9. [Security group]에서 보안 그룹을 선택하거나 새로 만듭니다.

    보안 그룹을 사용하면 엔드포인트에 대한 액세스를 제어하므로 방화벽을 사용하는 것과 마찬가지입니다.

  10. [Create endpoint]를 선택합니다.

결과에는 VPC 엔드포인트 ID와 VPC 엔드포인트에 연결하는 데 사용하는 DNS 이름을 포함하여 VPC 엔드포인트가 표시됩니다.

또한 Amazon VPC 도구를 사용하여 엔드포인트를 보고 관리할 수 있습니다. 여기에는 엔드포인트에 대한 알림 생성, 엔드포인트 속성 변경, 엔드포인트 삭제 등이 포함됩니다. 자세한 내용은 인터페이스 VPC 엔드포인트를 참조하십시오.

AWS CLI 또는 SDK 작업 사용

AWS CLI에서 create-vpc-endpoint 명령을 사용해 Secrets Manager에 연결되는 VPC 엔드포인트를 생성할 수 있습니다.

interface를 VPC 엔드포인트 유형으로 사용해야 합니다. 또한 VPC가 위치한 리전 및 secretsmanager가 포함된 서비스 이름 값을 사용하십시오.

이 명령은 VPC 기본값이 true이기 때문에 PrivateDnsNames 파라미터를 포함하지 않습니다. 이 옵션을 비활성화하기 위해 false 값의 파라미터를 포함할 수 있습니다. 프라이빗 DNS 이름은 VPC의 enableDnsHostnamesenableDnsSupport 속성이 true로 설정된 경우에만 사용할 수 있습니다. 이러한 속성을 설정하려면 ModifyVpcAttribute API를 사용합니다.

다음 다이어그램은 명령의 일반 구문을 보여줍니다.

aws ec2 create-vpc-endpoint --vpc-id <vpc id> \ --vpc-endpoint-type Interface \ --service-name com.amazonaws.<region>.secretsmanager \ --subnet-ids <subnet id> \ --security-group-id <security group id>

예를 들어, 다음 명령은 us-west-2 리전에 있는 VPC ID vpc-1a2b3c4d로 VPC에 VPC 엔드포인트를 만듭니다. 여기에서는 가용 영역을 나타내기 위해 서브넷 ID 하나만 지정하지만, 더 많이 지정할 수 있습니다. VPC 엔드포인트에는 보안 그룹 ID가 필요합니다.

출력에는 새 VPC 엔드포인트에 연결하는 데 사용할 수 있는 VPC 엔드포인트 ID와 DNS 이름이 포함됩니다.

$ aws ec2 create-vpc-endpoint --vpc-id vpc-1a2b3c4d \ --vpc-endpoint-type Interface \ --service-name com.amazonaws.us-west-2.secretsmanager \ --subnet-ids subnet-e5f6a7b8c9 \ --security-group-id sg-1a2b3c4d { "VpcEndpoint": { "PolicyDocument": "{\n \"Statement\": [\n {\n \"Action\": \"*\", \n \"Effect\": \"Allow\", \n \"Principal\": \"*\", \n \"Resource\": \"*\"\n }\n ]\n}", "VpcId": "vpc-1a2b3c4d", "NetworkInterfaceIds": [ "eni-abcdef12" ], "SubnetIds": [ "subnet-e5f6a7b8c9" ], "PrivateDnsEnabled": true, "State": "pending", "ServiceName": "com.amazonaws.us-west-2.secretsmanager", "RouteTableIds": [], "Groups": [ { "GroupName": "default", "GroupId": "sg-1a2b3c4d" } ], "VpcEndpointId": "vpce-1234a5678b9012c", "VpcEndpointType": "Interface", "CreationTimestamp": "2018-06-12T20:14:41.240Z", "DnsEntries": [ { "HostedZoneId": "Z7HUB22UULQXV", "DnsName": "vpce-1234a5678b9012c-12345678.secretsmanager.us-west-2.vpce.amazonaws.com" }, { "HostedZoneId": "Z7HUB22UULQXV", "DnsName": "vpce-1234a5678b9012c-12345678-us-west-2a.secretsmanager.us-west-2.vpce.amazonaws.com" }, { "HostedZoneId": "Z1K56Z6FNPJRR", "DnsName": "secretsmanager.us-west-2.amazonaws.com" } ] } }

Secrets Manager VPC 프라이빗 엔드포인트에 연결

기본적으로 VPC는 VPC 프라이빗 엔드포인트가 생성되면 프라이빗 DNS 이름을 자동으로 활성화하므로 해당 리전의 표준 엔드포인트 DNS 이름을 사용하는 것 이외에 아무것도 수행할 필요가 없습니다. 엔드포인트 DNS 이름이 VPC 내의 해당 엔드포인트로 자동으로 확인됩니다.

https://secretsmanager.<region>.amazonaws.com

AWS CLI와 SDK는 기본적으로 이 호스트 이름을 사용하므로 스크립트 및 애플리케이션의 내용을 변경하지 않고 VPC 엔드포인트를 사용할 수 있습니다.

프라이빗 DNS 이름을 활성화하지 않은 경우에도 전체 DNS 이름을 사용하여 엔드포인트에 계속 연결할 수 있습니다.

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

aws secretsmanager list-secrets --endpoint-url https://vpce-1234a5678b9012c-12345678.secretsmanager.us-west-2.vpce.amazonaws.com

정책 설명에 VPC 프라이빗 엔드포인트 사용

IAM 정책과 Secrets Manager 보안 암호 정책을 사용하여 보안 암호에 대한 액세스를 제어할 수 있습니다. 전역 조건 키를 사용해 이러한 정책이 요청의 VPC 또는 VPC 엔드포인트에 기반하도록 제한할 수도 있습니다.

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

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

참고

VPC 엔드포인트를 기반으로 IAM 및 보안 암호 정책을 생성할 경우 주의하십시오. 정책 설명에서 특정 VPC 또는 VPC 엔드포인트의 요청을 요구하는 경우, 사용자를 대신하여 보안 암호에 액세스하는 다른 AWS 서비스의 요청은 실패할 수 있습니다. 자세한 정보는 Secrets Manager 권한으로 정책에서 VPC 엔드포인트 조건 사용 단원을 참조하십시오.

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

예를 들어, 다음 샘플 보안 암호 정책을 사용하면 요청이 지정된 VPC 엔드포인트를 통해 이루어질 때만 사용자가 Secrets Manager 작업을 수행할 수 있습니다.

사용자가 Secrets Manager에 요청을 전송하면 Secrets Manager에서 요청의 VPC 엔드포인트 ID와 정책의 aws:sourceVpce 조건 키 값을 비교합니다. 값이 일치하지 않으면 Secrets Manager에서 요청을 거부합니다.

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

{ "Id": "example-policy-1", "Version": "2012-10-17", "Statement": [ { "Sid": "EnableSecretsManagerpermissions", "Effect": "Allow", "Principal": {"AWS":["123456789012"]}, "Action": ["secretsmanager:*"], "Resource": "*" }, { "Sid": "RestrictGetSecretValueoperation", "Effect": "Deny", "Principal": "*", "Action": ["secretsmanager:GetSecretValue"], "Resource": "*", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1234a5678b9012c" } } } ] }

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

다음 샘플 보안 암호 정책은 명령이 vpc-12345678에서 이루어진 경우에만 보안 암호를 생성 및 관리하는 명령을 허용합니다. 또한 정책에서는 요청이 vpc-2b2b2b2b에서 이루어진 경우에만 보안 암호와 암호화된 값에 액세스하는 작업을 허용합니다. 애플리케이션이 하나의 VPC에서 실행 중이지만 관리 용도로 두 번째 격리된 VPC를 사용하는 경우, 이와 같은 정책을 사용할 수 있습니다.

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

{ "Id": "example-policy-2", "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAdministrativeActionsfromONLYvpc-12345678", "Effect": "Allow", "Principal": {"AWS": "123456789012"}, "Action": [ "secretsmanager:Create*", "secretsmanager:Put*", "secretsmanager:Update*", "secretsmanager:Delete*","secretsmanager:Restore*", "secretsmanager:RotateSecret","secretsmanager:CancelRotate*", "secretsmanager:TagResource","secretsmanager:UntagResource" ], "Resource": "*", "Condition": { "StringEquals": { "aws:sourceVpc": "vpc-12345678" } } }, { "Sid": "AllowSecretValueAccessfromONLYvpc-2b2b2b2b", "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": ["secretsmanager:GetSecretValue"], "Resource": "*", "Condition": { "StringEquals": { "aws:sourceVpc": "vpc-2b2b2b2b" } } }, { "Sid": "AllowReadActionsEverywhere", "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": [ "secretsmanager:Describe*","secretsmanager:List*","kms:GetRandomPassword" ], "Resource": "*", } ] }

Secrets Manager VPC 엔드포인트의 엔드포인트 정책 생성

Secrets Manager VPC 엔드포인트를 생성하고 나면 해당 엔드포인트의 보안 암호 관련 활동을 제어하도록 엔드포인트 정책을 연결할 수 있습니다. 예를 들어 엔드포인트 정책을 연결하여 수행된 Secrets Manager 작업, 암호에 대해 수행되는 작업, 이러한 작업을 수행하는 IAM 사용자 또는 역할, VPC 엔드포인트를 통해 액세스하는 계정을 정의할 수 있습니다. 엔드포인트 정책을 지원하는 AWS 서비스의 목록을 비롯한 엔드포인트 정책에 대한 자세한 내용은 VPC 엔드포인트 정책 사용을 참조하십시오.

참고

AWS에서는 AWS 서비스 간에 VPC 엔드포인트를 공유하지 않습니다. Secrets Manager와 S3 같은 여러 AWS 서비스에 대해 VPC 엔드포인트를 사용할 경우 각각의 엔드포인트에 별도의 정책을 연결해야 합니다.

예: 특정 계정에 대한 Secrets Manager 엔드포인트 액세스 활성화

다음 예에서는 123456789012 계정의 모든 사용자와 역할에 액세스 권한을 부여합니다.

{ "Statement": [ { "Sid": "AccessSpecificAccount", "Principal": {"AWS": "123456789012"}, "Action": "secretsmanager:*", "Effect": "Allow", "Resource": "*" } ] }

예: Secrets Manager 엔드포인트상의 단일 보안 암호 액세스 활성화

다음 예에서는 액세스 권한을 특정 보안 암호로 제한합니다.

{ "Statement": [ { "Principal": "*", "Action": "secretsmanager:*", "Effect": "Allow", "Resource": [ "arn:aws:secretsmanager:us-west:123456789012:secret:a_specific_secret_name-a1b2c3" ] } ] }

Secrets Manager VPC 엔드포인트 사용 감사

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

예를 들어, 이 샘플 로그 항목은 VPC 엔드포인트를 사용한 GenerateDataKey 요청을 기록합니다. 이 예제에서 vpcEndpointId 필드는 로그 항목의 끝에 표시됩니다. 간결하게 나타내기 위해 예제에서 관련 없는 많은 부분을 생략했습니다.

{ "eventVersion":"1.05", "userIdentity": { "type": "IAMUser", "arn": "arn:aws:iam::123456789012:user/Anika", "accountId": "123456789012", "userName": "Anika" }, "eventTime":"2018-01-16T05:46:57Z", "eventSource":"secretsmanager.amazonaws.com", "eventName":"GetSecretValue", "awsRegion":"us-west-2", "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", "requestID":"EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE", "eventID":"EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE", "readOnly":true, "eventType":"AwsApiCall", "recipientAccountId":"123456789012", "vpcEndpointId": "vpce-1234a5678b9012c" }