

# Provedor de API: compartilhar seu nome de domínio personalizado privado usando a AWS CLI do API Gateway
<a name="apigateway-private-custom-domains-provider-share-cli"></a>

Você pode compartilhar um nome de domínio personalizado privado usando a AWS CLI do API Gateway, mas recomendamos usar o AWS RAM para reduzir o custo operacional indireto. Para obter instruções sobre como usar o AWS RAM para compartilhar nomes de domínio personalizados privados, consulte [Provedor de API: compartilhar seu nome de domínio personalizado privado usando o AWS RAM](apigateway-private-custom-domains-provider-share.md).

Para compartilhar um nome de domínio personalizado privado usando a AWS CLI do API Gateway, conceda a outras Contas da AWS acesso para criar associações de acesso a nomes de domínio e invocar seu nome de domínio personalizado privado. Para isso, atualize a `managementPolicy` referente ao serviço API Gateway Management e a `policy` referente ao serviço `execute-api` do seu nome de domínio personalizado privado. Você também precisa conceder acesso ao endpoint da VPC do consumidor de API na política de recursos referente a todas as APIs privadas associadas ao seu nome de domínio personalizado privado.

O consumidor de API ainda assim precisa criar uma associação de acesso ao nome de domínio em sua própria conta entre o endpoint da VPC dele e seu nome de domínio personalizado privado. Não é possível fazer isso por ele.

## Conceder acesso ao nome de domínio personalizado privado
<a name="apigateway-private-custom-domains-provider-share-cli-allow"></a>

**Como conceder acesso ao nome de domínio personalizado privado**

1. Para atualizar a `managementPolicy` referente ao serviço API Gateway Management, crie um arquivo JSON que contenha a operação de patch para atualizar a política. O comando `patch-managementPolicy.json` a seguir substitui a `managementPolicy` atual por uma política de exemplo que concede às Contas da AWS 111122223333 e 444455556666 acesso para criar associações de acesso a nomes de domínio com o nome de domínio personalizado privado `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\"}]}"
   }]
   ```

    O comando [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html) a seguir atualiza a `managementPolicy` usando `patch-managementPolicy.json`. 

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

   Depois de conceder acesso, você precisa notificar o consumidor de API de que ele pode formar a associação de acesso ao nome de domínio. Se você usar o AWS RAM, o AWS RAM executará essa etapa para você.

1. Para atualizar a `policy` referente ao serviço `execute-api`, crie um arquivo JSON que contenha a operação de patch para atualizar a política. O exemplo `patch-policy.json` a seguir substitui a `policy` atual por um exemplo de política que concede acesso a dois endpoints da VPC para invocar o nome de domínio personalizado privado `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\"]}}}]}"
   }]
   ```

    Use o comando [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html) a seguir para atualizar a `policy` usando `patch-policy.json`. 

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

## Negar acesso ao nome de domínio personalizado privado
<a name="apigateway-private-custom-domains-provider-share-cli-deny"></a>

Para interromper o compartilhamento de seu nome de domínio personalizado privado, você precisa rejeitar a associação de acesso ao nome de domínio entre seu nome de domínio personalizado privado e o endpoint da VPC do consumidor de API.

**Como negar acesso ao nome de domínio personalizado privado**

1. O comando `reject-domain-name-access-association` a seguir rejeita a associação de acesso ao nome de domínio.

   ```
   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. Modifique o `patch-managementPolicy.json` para remover o acesso à conta do provedor de API e criar uma associação de acesso ao nome de domínio com seu nome de domínio personalizado privado. O seguinte `patch-managementPolicy.json` remove uma conta da `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\"}]}"
   }]
   ```

   O comando [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html) a seguir atualiza a `managementPolicy` usando `patch-managementPolicy.json`. 

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

1. Modifique o `patch-policy.json` para remover o acesso do endpoint da VPC do provedor de API para invocar seu nome de domínio personalizado privado. O seguinte `patch-policy.json` remove o ID do endpoint da VPC da `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\"}}}]}"
   }]
   ```

   O comando [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html) a seguir atualiza a `policy` usando `patch-policy.json`. 

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

## Exemplos de políticas usadas neste procedimento
<a name="apigateway-private-custom-domains-provider-share-cli-policies"></a>

A seção a seguir mostra exemplos de políticas usadas no procedimento anterior.

O exemplo de política a seguir refere-se à `managementPolicy` do serviço Amazon API Gateway Management. Essa política concede acesso às Contas da AWS 111122223333 e 444455556666 para criar associações de acesso a nomes de domínio com o nome de domínio personalizado privado `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"
        }
    ]
}
```

------

O exemplo de política a seguir refere-se à `policy` do serviço `execute-api`. Essa política concede aos endpoints da VPC `vpce-abcd1234` e `vpce-xyzz0000` acesso para invocar o nome de domínio personalizado privado.

------
#### [ 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"
                    ]
                }
            }
        }
    ]
}
```

------