

# 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 に関するリソースポリシーで、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` では、プライベートカスタムドメイン名 `private.example.com` とのドメイン名アクセスの関連付けを作成するためのアクセスを AWS アカウント 111122223333 と 444455556666 に許可するポリシー例に、現在の `managementPolicy` を置き換えます。

   ```
   [{
       "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` では、プライベートカスタムドメイン名 `private.example.com` を呼び出すためのアクセスを 2 つの VPC エンドポイントに許可するポリシー例に、現在の `policy` を置き換えます。

   ```
   [{
       "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. API プロバイダーのアカウントから、プライベートカスタムドメイン名とのドメイン名アクセスの関連付けを作成するためのアクセスを削除するように、`patch-managementPolicy.json` を変更します。次の `patch-managementPolicy.json` では、`managementPolicy` から 1 つのアカウントを削除します。

   ```
   [{
        "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. API プロバイダーの VPC エンドポイントがプライベートカスタムドメイン名を呼び出すためのアクセスを削除するように、`patch-policy.json` を変更します。次の `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"
                    ]
                }
            }
        }
    ]
}
```

------