API Gateway AWS CLI를 사용하여 프라이빗 사용자 지정 도메인 이름을 공유할 수 있지만 AWS RAM을 사용하여 운영 오버헤드를 줄이는 것이 좋습니다. AWS RAM을 사용하여 프라이빗 사용자 지정 도메인 이름을 공유하는 방법에 대한 지침은 API 공급자: AWS RAM을 사용하여 프라이빗 사용자 지정 도메인 이름 공유 섹션을 참조하세요.
API Gateway AWS CLI를 사용하여 프라이빗 사용자 지정 도메인 이름을 공유하려면 다른 AWS 계정 액세스 권한을 부여하여 도메인 이름 액세스 연결을 생성하고 프라이빗 사용자 지정 도메인 이름을 간접적으로 호출합니다. 이렇게 하려면 API Gateway Management 서비스의 managementPolicy
와 프라이빗 사용자 지정 도메인 이름의 execute-api
서비스에 대한 policy
를 업데이트합니다. 또한 프라이빗 사용자 지정 도메인 이름에 매핑된 프라이빗 API에 대한 리소스 정책에서 API 소비자의 VPC 엔드포인트에 대한 액세스 권한을 부여해야 합니다.
API 소비자는 VPC 엔드포인트와 프라이빗 사용자 지정 도메인 이름 간에 자체 계정에서 도메인 이름 액세스 연결을 생성해야 합니다. 이 작업을 수행할 수 없습니다.
프라이빗 사용자 지정 도메인 이름에 대한 액세스 권한 부여
프라이빗 사용자 지정 도메인 이름에 대한 액세스 권한을 부여하려면
-
API Gateway Management 서비스의
managementPolicy
를 업데이트하려면 정책을 업데이트하는 패치 작업이 포함된 JSON 파일을 생성합니다. 다음patch-managementPolicy.json
에서는 현재managementPolicy
를 프라이빗 사용자 지정 도메인 이름private.example.com
과 도메인 이름 액세스 연결을 생성할 수 있는 액세스 권한을 AWS 계정 111122223333 및 444455556666에 부여하는 예제 정책으로 바꿉니다.[{ "op": "replace", "path": "/managementPolicy", "value": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"arn:aws:iam::111122223333:root\", \"arn:aws:iam::444455556666:root\"]},\"Action\":\"apigateway:CreateAccessAssociation\",\"Resource\":\"arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234\"}]}" }]
다음 update-domain-name 명령은
patch-managementPolicy.json
을 사용하여managementPolicy
를 업데이트합니다.aws apigateway update-domain-name \ --domain-name private.example.com \ --domain-name-id abcd1234 \ --patch-operations file://patch-managementPolicy.json
액세스 권한을 부여한 후에는 API 소비자에게 도메인 이름 액세스 연결을 구성할 수 있음을 알려야 합니다. AWS RAM을 사용하는 경우 AWS RAM이 이 단계를 대신 수행합니다.
-
execute-api
서비스의policy
를 업데이트하려면 정책을 업데이트하는 패치 작업이 포함된 JSON 파일을 생성합니다. 다음patch-policy.json
에서는 현재policy
를 프라이빗 사용자 지정 도메인 이름private.example.com
을 간접적으로 호출하기 위해 두 개의 VPC 엔드포인트를 부여하는 예제 정책으로 바꿉니다.[{ "op": "replace", "path": "/policy", "value": "{\"Version\": \"2012-10-17\",\"Statement\": [{\"Effect\": \"Allow\",\"Principal\": \"*\",\"Action\": \"execute-api:Invoke\",\"Resource\": \"arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.example.com+abcd1234\"},{\"Effect\": \"Deny\",\"Principal\": \"*\",\"Action\": \"execute-api:Invoke\",\"Resource\": \"arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.example.com+abcd1234\",\"Condition\": {\"StringNotEquals\": {\"aws:SourceVpce\": [\"vpce-abcd1234efg\",\"vpce-xyz000abc\"]}}}]}" }]
다음 update-domain-name 명령을 사용하면
patch-policy.json
을 사용하여policy
를 업데이트할 수 있습니다.aws apigateway update-domain-name \ --domain-name private.example.com \ --domain-name-id abcd1234 \ --patch-operations file://patch-policy.json
프라이빗 사용자 지정 도메인 이름에 대한 액세스 거부
프라이빗 사용자 지정 도메인 이름 공유를 중지하려면 프라이빗 사용자 지정 도메인 이름과 API 소비자의 VPC 엔드포인트 간의 도메인 이름 액세스 연결을 거부해야 합니다.
프라이빗 사용자 지정 도메인 이름에 대한 액세스를 거부하려면
-
다음
reject-domain-name-access-association
명령은 도메인 이름 액세스 연결을 거부합니다.aws apigateway reject-domain-name-access-association \ --domain-name-access-association-arn arn:aws:apigateway:us-west-2:444455556666:/domainnameaccessassociations/domainname/private.example.com+abcd1234/vpcesource/vpce-abcd1234efg \ --domain-name-arn arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234
-
patch-managementPolicy.json
을 수정하여 API 공급자의 계정에 대한 액세스를 제거하여 프라이빗 사용자 지정 도메인 이름과 도메인 이름 액세스 연결을 생성합니다. 다음patch-managementPolicy.json
은managementPolicy
에서 계정 하나를 제거합니다.[{ "op": "replace", "path": "/managementPolicy", "value": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"apigateway:CreateAccessAssociation\",\"Resource\":\"arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234\"}]}" }]
다음 update-domain-name 명령은
patch-managementPolicy.json
을 사용하여managementPolicy
를 업데이트합니다.aws apigateway update-domain-name \ --domain-name private.example.com \ --domain-name-id abcd1234 \ --patch-operations file://patch-managementPolicy.json
-
patch-policy.json
을 수정하여 API 공급자의 VPC 엔드포인트에 대한 액세스를 제거하여 프라이빗 사용자 지정 도메인 이름을 간접적으로 호출합니다. 다음patch-policy.json
은policy
에서 VPC 엔드포인트 ID를 제거합니다.[{ "op": "replace", "path": "/policy", "value": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"execute-api:Invoke\",\"Resource\":\"arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.example.com+abcd1234\"},{\"Effect\":\"Deny\",\"Principal\":\"*\",\"Action\":\"execute-api:Invoke\",\"Resource\":\"arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.example.com+abcd1234\",\"Condition\":{\"StringNotEquals\":{\"aws:SourceVpce\":\"vpce-abcd1234efg\"}}}]}" }]
다음 update-domain-name 명령은
patch-policy.json
을 사용하여policy
를 업데이트합니다.aws apigateway update-domain-name \ --domain-name private.example.com \ --domain-name-id abcd1234 \ --patch-operations file://patch-policy.json
이 절차에 사용되는 정책 예제
다음 섹션에서는 이전 절차에서 사용한 정책 예제를 보여줍니다.
다음 예제 정책은 Amazon API Gateway Management 서비스용 managementPolicy
에 대한 정책입니다. 이 정책은 AWS 계정 111122223333 및 444455556666에 프라이빗 사용자 지정 도메인 이름 private.example.com
과 도메인 이름 액세스 연결을 생성할 수 있는 액세스 권한을 부여합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "111122223333", "444455556666" ] }, "Action": "apigateway:CreateAccessAssociation", "Resource": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+a1b2c3" } ] }
다음 예제 정책은 execute-api
서비스에 대한 policy
의 정책입니다. 이 정책은 VPC 엔드포인트 vpce-abcd1234efg
와 프라이빗 사용자 지정 도메인 이름을 간접적으로 호출할 수 있는 vpce-xyz000abc
액세스 권한을 부여합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.example.com+abcd1234" }, { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.example.com+abcd1234", "Condition": { "StringNotEquals": { "aws:SourceVpce": [ "vpce-abcd1234efg", "vpce-xyz000abc" ] } } } ] }