

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# API 提供者：使用 API Gateway 共用您的私有自訂網域名稱 AWS CLI
<a name="apigateway-private-custom-domains-provider-share-cli"></a>

您可以使用 API Gateway 共用私有自訂網域名稱 AWS CLI，但我們建議您使用 AWS RAM 來降低營運開銷。如需如何使用 AWS RAM 來共用私有自訂網域名稱的指示，請參閱 [API 提供者：使用 共用您的私有自訂網域名稱 AWS RAM](apigateway-private-custom-domains-provider-share.md)。

若要使用 API Gateway 共用私有自訂網域名稱 AWS CLI，您可以授予其他 AWS 帳戶 存取權來建立網域名稱存取關聯，並叫用私有自訂網域名稱。您可以藉由更新 API Gateway Management 服務的 `managementPolicy` 和私有自訂網域名稱的 `execute-api` 服務的 `policy` 來執行此操作。您也需要在資源政策中授予 API 取用者 VPC 端點的存取權，以用於映射到私有自訂網域名稱的任何私有 API。

API 取用者仍需在其 VPC 端點和您的私有自訂網域名稱之間，在其自己的帳戶中建立網域名稱存取關聯。您無法為他們執行此操作。

## 授予私有自訂網域名稱的存取權
<a name="apigateway-private-custom-domains-provider-share-cli-allow"></a>

**授予私有自訂網域名稱的存取權**

1. 若要更新 API Gateway Management 服務的 `managementPolicy`，您可以建立包含修補程式作業的 JSON 檔案來更新政策。以下內容會將目前的 `patch-managementPolicy.json`取代`managementPolicy`為範例政策，授予 AWS 帳戶 111122223333 和 444455556666 的存取權，以建立與私有自訂網域名稱 的網域名稱存取關聯`private.example.com`。

   ```
   [{
       "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](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html) 命令會使用 `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 會為您執行此步驟。

1. 若要更新 `execute-api` 服務的 `policy`，您可以建立包含修補程式作業的 JSON 檔案來更新政策。以下 `patch-policy.json` 會將目前的 `policy` 取代為範例政策，而此政策會授予兩個 VPC 端點來調用私有自訂網域名稱 `private.example.com`。

   ```
   [{
       "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-abcd1234\",\"vpce-xyzz0000\"]}}}]}"
   }]
   ```

    使用下列 [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html) 命令，並使用 `patch-policy.json` 來更新 `policy`。

   ```
   aws apigateway update-domain-name \
       --domain-name private.example.com \
       --domain-name-id abcd1234 \
       --patch-operations file://patch-policy.json
   ```

## 拒絕對您的私有自訂網域名稱的存取
<a name="apigateway-private-custom-domains-provider-share-cli-deny"></a>

若要停止分享私有自訂網域名稱，您需要拒絕私有自訂網域名稱與 API 取用者之 VPC 端點之間的網域名稱存取關聯。

**拒絕對私有自訂網域名稱的存取**

1. 下列 `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-abcd1234 \
       --domain-name-arn arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234
   ```

1. 修改 `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](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html) 命令使用 `patch-managementPolicy.json` 更新 `managementPolicy`。

   ```
   aws apigateway update-domain-name \
       --domain-name private.example.com \
       --domain-name-id abcd1234 \
       --patch-operations file://patch-managementPolicy.json
   ```

1. 修改 `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-abcd1234\"}}}]}"
   }]
   ```

   下列 [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html) 命令會使用 `patch-policy.json` 更新 `policy`。

   ```
   aws apigateway update-domain-name \
       --domain-name private.example.com \
       --domain-name-id abcd1234 \
       --patch-operations file://patch-policy.json
   ```

## 此程序中使用的範例政策
<a name="apigateway-private-custom-domains-provider-share-cli-policies"></a>

下一節說明先前程序中使用的範例政策。

下列範例政策適用於 Amazon API Gateway Management 服務的 `managementPolicy`。此政策授予 AWS 帳戶 111122223333 和 444455556666 存取權，以建立與私有自訂網域名稱 的網域名稱存取關聯`private.example.com`。

------
#### [ JSON ]

****  

```
{
    "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-abcd1234` 和 `vpce-xyzz0000` 存取權，用以調用私有自訂網域名稱。

------
#### [ JSON ]

****  

```
{
    "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-abcd1234",
                        "vpce-xyzz0000"
                    ]
                }
            }
        }
    ]
}
```

------