

# Nomes de domínio personalizados para APIs privadas no API Gateway
<a name="apigateway-private-custom-domains"></a>

Também é possível criar um nome domínio personalizado para APIs privadas. Use um nome de domínio personalizado privado para fornecer aos chamadores de API um URL mais simples e intuitivo. Com um nome de domínio personalizado privado, você pode reduzir a complexidade, configurar medidas de segurança durante o handshake do TLS e controlar o ciclo de vida do certificado do seu nome de domínio usando o AWS Certificate Manager (ACM). Para obter mais informações, consulte [Proteger a chave privada do certificado para o nome de domínio personalizado](#apigateway-private-custom-domains-secure-certificate-private-key).

Os nomes de domínio personalizados para APIs privadas não precisam ser exclusivos em várias contas. Você pode criar `example.private.com` na conta 111.122.223.333 e na conta 555.555.555.555, desde que seu certificado do ACM abranja o nome de domínio. Para identificar um nome de domínio personalizado privado, use o respectivo ARN. Esse identificador é exclusivo para nomes de domínio personalizados privados.

Quando você cria um nome de domínio personalizado privado no API Gateway, você é um *provedor de API*. Você pode fornecer seu nome de domínio personalizado privado a outras Contas da AWS usando o API Gateway ou o AWS Resource Access Manager (AWS RAM).

Quando você invoca um nome de domínio personalizado privado, você é um *consumidor de API*. Você pode consumir um nome de domínio personalizado privado da sua Conta da AWS ou de outra Conta da AWS.

Ao consumir um nome de domínio personalizado privado, você cria uma associação de acesso ao nome de domínio entre um endpoint da VPC e um nome de domínio personalizado privado. Com uma associação de acesso ao nome de domínio, os consumidores de API podem invocar seu nome de domínio personalizado privado enquanto estão isolados da internet pública. Para obter mais informações, consulte [Tarefas dos provedores e consumidores de API referentes a nomes de domínio personalizados para APIs privadas](apigateway-private-custom-domains-associations.md).

## Proteger a chave privada do certificado para o nome de domínio personalizado
<a name="apigateway-private-custom-domains-secure-certificate-private-key"></a>

Quando você solicita um certificado SSL/TLS usando o ACM para criar um nome de domínio personalizado para APIs privadas, o ACM gera um par de chaves públicas/privadas. Ao importar um certificado, você gera o par de chaves. A chave pública se torna parte do certificado. Para armazenar com segurança a chave privada, o ACM cria outra chave usando o AWS KMS, chamada de chave do KMS, com o alias **aws/acm**. O AWS KMS usa essa chave para criptografar a chave privada do seu certificado. Para obter mais informações, consulte [Proteção de dados no AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/data-protection.html), no *Guia do usuário do AWS Certificate Manager*.

O API Gateway usa o AWS TLS Connection Manager, um serviço que só pode ser acessado por Serviços da AWS, para proteger e usar as chaves privadas do seu certificado. Quando você usa seu certificado do ACM para criar um nome de domínio personalizado do API Gateway, o API Gateway associa seu certificado ao AWS TLS Connection Manager. Fazemos isso criando uma concessão no AWS KMS relação à sua chave gerenciada pela AWS. Essa concessão permite que o TLS Connection Manager use o AWS KMS para descriptografar a chave privada do seu certificado. O TLS Connection Manager usa o certificado e a chave privada descriptografada (texto simples) para estabelecer uma conexão segura (sessão SSL/TLS) com clientes de serviços do API Gateway. Quando o certificado for desassociado de um serviço do API Gateway, a concessão será removida. Para obter mais informações, consulte [Concessões](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html) no *Guia do desenvolvedor do AWS Key Management Service*. 

Para obter mais informações, consulte [Criptografia de dados em repouso no Amazon API Gateway](data-protection-encryption.md#data-protection-at-rest).

## Considerações referentes a nomes de domínio personalizados privados
<a name="apigateway-private-custom-domains-considerations"></a>

As considerações a seguir podem afetar o uso de nomes de domínio personalizados privados.
+ O API Gateway leva em torno de 15 minutos para provisionar seu nome de domínio personalizado privado.
+ Se você atualizar seu certificado do ACM, o API Gateway levará cerca de 15 minutos para concluir a atualização. Durante esse período, seu nome de domínio fica no estado `UPDATING`, mas você ainda pode acessá-lo.
+ Para invocar um nome de domínio personalizado privado, você deve criar uma associação de acesso ao nome de domínio. Depois que uma associação de acesso ao nome de domínio é criada, ela leva cerca de 15 minutos para ficar pronta.
+ O ARN do nome de domínio personalizado privado contém o *account-id* e o *domain-name-id*. Quando você cria um nome de domínio, o API Gateway usa o formato de ARN `arn:partition:apigateway:region::/domainnames/domain-name`. Ao acessar um nome personalizado de domínio personalizado, use o formato de ARN `arn:partition:apigateway:region:account-id:/domainnames/domain-name+domain-name-id`. 

  Talvez seja necessário modificar as permissões do IAM para autorizar o acesso a um nome de domínio privado depois de criá-lo.
+ Não é possível invocar nomes de domínio personalizados privados usando o mesmo nome de um mesmo endpoint da VPC. Por exemplo, se você quiser invocar `arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234` e `arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+xyz000`, associe cada nome de domínio personalizado privado a um endpoint da VPC diferente.
+ Certificados curinga são permitidos, como um certificado para `*.private.example.com`.
+ Nomes de domínio personalizados curinga não são permitidos.
+ Somente certificados RSA com um tamanho de chave de 2.048 bits e certificados ECDSA com um tamanho de chave de 256 e 384 bits são permitidos.
+ Não é possível definir o tipo de endereço IP para APIs privadas para permitir que somente endereços IPv4 invoquem sua API privada. Somente pilha dupla é compatível. Para obter mais informações, consulte [Tipos de endereço IP para APIs REST no API Gateway](api-gateway-ip-address-type.md).
+ Para enviar tráfego usando sua API privada, é possível usar todos os tipos de endereço IP compatíveis com a Amazon VPC. Você pode enviar tráfego de pilha dupla e IPv6 configurando as definições no endpoint da VPC. Não é possível modificar isso usando o API Gateway. Para obter mais informações, consulte [Adicionar suporte a IPv6 para sua VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6-add.html).
+ O mapeamento de caminho base de vários níveis, como associar a API privada a `/developers/feature`, não é permitido, mas é possível usar uma regra de roteamento para criar uma condição de caminho de vários níveis. Para obter mais informações, consulte [Encaminhar o tráfego às APIs por meio do nome de domínio personalizado no API Gateway](rest-api-routing-mode.md).
+ Não é possível definir uma versão mínima do TLS para o nome de domínio personalizado privado. Todos os nomes de domínio personalizados privados têm a política de segurança `TLS-1-2`.
+ Você pode usar a política de endpoint da VPC para controlar o acesso a um nome de domínio personalizado privado. Para ter mais informações, consulte 4 e 5 em [Usar políticas de VPC endpoint para APIs privadas no API Gateway](apigateway-vpc-endpoint-policies.md).
+ Você deve criar uma política de recursos separada para a API privada e o nome de domínio personalizado privado. Para invocar um nome de domínio personalizado privado, um consumidor de API precisa de acesso à política de recursos do nome de domínio personalizado privado, à política de recursos da API privada e a quaisquer políticas de endpoint da VPC ou autorizações na API privada.

## Considerações sobre o uso de nomes de domínio personalizados privados com outros recursos do API Gateway
<a name="apigateway-private-custom-domains-considerations-for-migration"></a>

As seguintes considerações podem afetar a forma como você usa nomes de domínio personalizados privados com outros recursos do API Gateway:
+ Não é possível enviar tráfego de um nome de domínio personalizado privado a uma API pública.
+ Quando uma API privada é associada a um nome de domínio personalizado privado, não é possível alterar o tipo de endpoint da API. 
+ Não é possível migrar um nome de domínio personalizado público para um nome de domínio personalizado privado.
+ Se você usa um endpoint da VPC para acessar um nome de domínio personalizado público, não o use para criar uma associação de acesso ao nome de domínio com um nome de domínio personalizado privado.

## Diferenças entre nomes de domínio personalizados privados e nomes de domínio personalizados públicos
<a name="apigateway-private-custom-domains-public-differences"></a>

A seguir é apresentada uma descrição das diferenças entre nomes de domínio personalizados privados e públicos:
+ Os nomes de domínio personalizados privados não precisam ser exclusivos em várias contas.
+ Um nome de domínio privado tem um ID de nome de domínio. Esse ID distingue exclusivamente um nome de domínio personalizado privado e não é gerado para nomes de domínio personalizados públicos.
+ Ao usar a AWS CLI para atualizar ou excluir um nome de domínio personalizado privado, você deve fornecer o respectivo ID. Se você tiver um nome de domínio personalizado privado chamado `example.com` e um nome de domínio personalizado público chamado `example.com` e não fornecer o respectivo ID, o API Gateway modificará ou excluirá seu nome de domínio personalizado público.

## Próximas etapas referentes a nomes de domínio personalizados para APIs privadas
<a name="apigateway-private-custom-domains-next-steps"></a>

Para ter informações sobre as tarefas de um provedor de API e de um consumidor de API, consulte [Tarefas dos provedores e consumidores de API referentes a nomes de domínio personalizados para APIs privadas](apigateway-private-custom-domains-associations.md).

Para obter instruções sobre como criar um nome de domínio personalizado privado que você pode invocar em sua Conta da AWS, consulte [Tutorial: como criar e invocar um nome de domínio personalizado para APIs privadas](apigateway-private-custom-domains-tutorial.md).

Para obter instruções sobre como fornecer a outra Conta da AWS acesso ao seu nome de domínio personalizado privado, consulte [Provedor de API: compartilhar seu nome de domínio personalizado privado usando o AWS RAM](apigateway-private-custom-domains-provider-share.md). Para obter instruções sobre como associar o endpoint da VPC a um nome de domínio personalizado privado em outra Conta da AWS, consulte [Consumidor de API: associar o endpoint da VPC a um nome de domínio personalizado privado compartilhado com você](apigateway-private-custom-domains-consumer-create.md).

# Tarefas dos provedores e consumidores de API referentes a nomes de domínio personalizados para APIs privadas
<a name="apigateway-private-custom-domains-associations"></a>

Quando você cria um nome de domínio personalizado privado, você é um *provedor de API*. Quando você invoca um nome de domínio personalizado privado, você é um *consumidor de API*. Você pode consumir um nome de domínio personalizado privado da sua Conta da AWS ou de outra Conta da AWS.

A seção a seguir explica as tarefas exigidas pelo provedor e pelo consumidor de API para usar um nome de domínio personalizado privado. Quando você invoca um nome de domínio personalizado privado na sua Conta da AWS, você é tanto provedor quanto consumidor de API. Se quiser invocar um domínio personalizado privado em outra Conta da AWS, dependendo da relação de confiança entre o provedor de API e o consumidor de API no AWS Organizations, o AWS RAM poderá concluir algumas tarefas para você.

## Tarefas de um provedor de API
<a name="apigateway-private-custom-domains-associations-provider"></a>

Os provedores de API criam APIs privadas e as associam a nomes de domínio personalizados.

 Eles gerenciam duas políticas de recursos para proteger seus nomes de domínio personalizados privados. A primeira política, destinada ao serviço `execute-api`, controla quais endpoints da VPC podem invocar seu nome de domínio personalizado privado. Na configuração de nome de domínio personalizado privado, ela é chamada de `policy`.

A segunda política, destinada ao serviço Amazon API Gateway Management, controla quais endpoints da VPC em outras Contas da AWS podem formar uma associação de acesso ao nome de domínio com seu nome de domínio personalizado privado. Um endpoint da VPC precisa formar uma associação de acesso ao nome de domínio com um nome de domínio personalizado privado para invocá-lo. Na configuração de nome de domínio personalizado privado, trata-se da `managementPolicy`. Você pode usar o AWS RAM ou o API Gateway para atualizar essa política. Se você não pretende permitir que endpoints da VPC em outras Contas da AWS invoquem seu nome de domínio personalizado, não edite a `managementPolicy`.

Se você for provedor de API, deverá fazer o seguinte:

1. Crie uma API privada.

1. Atualize a `policy` da API privada para conceder ao seu endpoint da VPC acesso à API privada.

1. Crie um nome de domínio personalizado.

1. Atualize a `policy` do nome de domínio personalizado privado para conceder ao seu endpoint da VPC acesso ao nome de domínio personalizado privado.

1. Crie um mapeamento de caminho base ou uma regra de roteamento para enviar tráfego da API privada ao nome de domínio personalizado privado. Para obter mais informações, consulte [Encaminhar o tráfego às APIs por meio do nome de domínio personalizado no API Gateway](rest-api-routing-mode.md).

Se você quiser permitir que consumidores de API em outras Contas da AWS acessem seu nome de domínio personalizado privado, faça o seguinte:

1. Atualize a `managementPolicy` do nome de domínio personalizado privado para permitir que consumidores de API em outras contas associem o endpoint da VPC deles ao seu nome de domínio personalizado privado. Isso pode ser feito usando um dos métodos a seguir:  
**AWS RAM**  
Com o AWS RAM, se o provedor de API e o consumidor de API estiverem na mesma organização que está usando o AWS Organizations, o compartilhamento de recursos entre o provedor e o consumidor será aceito automaticamente. Do contrário, você deverá esperar até que o consumidor de API aceite o compartilhamento de recursos. **Recomendamos que você use o AWS RAM para compartilhar seu nome de domínio personalizado privado.**   
**API Gateway**  
Com o API Gateway, é possível usar somente a AWS CLI. Você deve atualizar seu nome de domínio personalizado privado usando uma operação de patch e fornecer seu próprio documento de política para a `managementPolicy`.

1. Atualize a `policy` do nome de domínio personalizado privado e quaisquer APIs privadas associadas a ele para conceder acesso ao endpoint da VPC do consumidor de API.

Para obter instruções sobre como fornecer sua API a outra Conta da AWS, consulte [Provedor de API: compartilhar seu nome de domínio personalizado privado usando o AWS RAM](apigateway-private-custom-domains-provider-share.md). 

## Tarefas de um consumidor de API
<a name="apigateway-private-custom-domains-associations-consumer"></a>

Os consumidores de API associam seus endpoints da VPC a um ARN de nome de domínio para invocar um nome de domínio personalizado privado. Os consumidores de API não precisam criar uma API do API Gateway.

Se você for um consumidor de API, faça o seguinte:

1. Crie um endpoint da VPC com DNS privado habilitado na Amazon VPC.

1. (Opcional, se for usado o AWS RAM) Aceite um compartilhamento de recursos de domínio personalizado privado no AWS RAM dentro de **12 horas** após o compartilhamento do recurso. Se você e o provedor de API estiverem na mesma organização, o compartilhamento de recursos será aceito automaticamente.

1. Obtenha o ARN do nome de domínio personalizado privado. Como o URL do nome de domínio personalizado privado não é exclusivo, você usa o respectivo ARN para formar a associação de acesso ao nome de domínio entre o endpoint da VPC e o nome de domínio personalizado privado. Você pode usar o AWS RAM para recuperar o ARN do nome de domínio personalizado privado.

1. Associe o ARN do domínio personalizado privado ao seu endpoint da VPC no API Gateway. Isso cria uma conexão segura entre o endpoint da VPC e o nome de domínio personalizado privado. O tráfego não deixa a rede da Amazon.

1. Aguarde até que o provedor de API conceda ao seu endpoint da VPC acesso ao nome de domínio personalizado privado e a todas as APIs privadas associadas ao nome de domínio personalizado privado. Se você for provedor e consumidor de API, conceda acesso de invocação ao seu próprio endpoint da VPC.

1. Crie uma zona hospedada privada do Route 53 e um registro do Route 53 para resolver o nome de domínio personalizado privado no Route 53.

Para obter instruções sobre como consumir uma API em outra Conta da AWS, consulte [Consumidor de API: associar o endpoint da VPC a um nome de domínio personalizado privado compartilhado com você](apigateway-private-custom-domains-consumer-create.md).

# Tutorial: como criar e invocar um nome de domínio personalizado para APIs privadas
<a name="apigateway-private-custom-domains-tutorial"></a>

Neste tutorial, você cria um nome de domínio personalizado privado que pode ser invocado em uma VPC em sua conta. Para conseguir isso, você é o provedor e o consumidor da API. Você precisa de uma API privada e de um endpoint da VPC existentes para concluir este tutorial. Se você usa um endpoint da VPC para acessar um nome de domínio personalizado público, não o use para este tutorial ou para criar associações de acesso a nomes de domínio.

## Etapa 1: criar um nome de domínio personalizado
<a name="apigateway-private-custom-domains-provider-create-domain"></a>

Para criar um nome de domínio personalizado privado, especifique o nome de domínio, o certificado do ACM e a política do serviço `execute-api` para controlar quais endpoints da VPC podem invocá-lo.

------
#### [ Console de gerenciamento da AWS ]

**Como criar um nome de domínio personalizado**

1. Faça login no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. No painel de navegação principal, selecione **Nomes de domínio personalizados**.

1. Escolha **Adicionar nome do domínio**.

1. Em **Nome de domínio**, insira um nome de domínio 

   Seu certificado do ACM deve abranger esse nome de domínio, mas o nome de domínio não precisa ser exclusivo.

1. Selecione **Privado**.

1. Em **Modo de roteamento**, escolha **Somente mapeamentos de API**.

1. Em **Certificado do ACM**, escolha um certificado.

1. Escolha **Adicionar nome do domínio**.

O API Gateway provisiona um nome de domínio com uma política `deny` que nega acesso a todos os recursos. Essa é a política de recursos do serviço `execute-api`. Você precisa atualizar essa política de recursos para conceder acesso aos seus endpoints da VPC e permitir que eles invoquem seu nome de domínio personalizado privado.

**Como atualizar sua política de recursos**

1. Escolha a guia **Política de recursos** e selecione **Editar política de recursos**.

1. Insira a política de recursos a seguir no editor de código. Substitua o endpoint da VPC *vpce-abcd1234efg* pelo seu ID de endpoint da VPC.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": "*",
               "Action": "execute-api:Invoke",
               "Resource": [
                   "execute-api:/*"
               ]
           },
           {
               "Effect": "Deny",
               "Principal": "*",
               "Action": "execute-api:Invoke",
               "Resource": [
                   "execute-api:/*"
               ],
               "Condition" : {
                   "StringNotEquals": {
                       "aws:SourceVpce": "vpce-abcd1234"
                   }
               }
           }
       ]
   }
   ```

1. Escolha **Salvar alterações**.

------
#### [ AWS CLI ]

Ao criar um nome de domínio personalizado privado usando a AWS CLI, você fornece uma política de recursos para o serviço `execute-api` conceder acesso aos endpoints da VPC e permitir que eles invoquem seu nome de domínio personalizado privado por meio do parâmetro `--policy file://policy.json`. Você pode modificar essa política posteriormente.

Neste exemplo, você anexará a política de recursos a seguir como `policy` carregando os parâmetros de um arquivo. Copie e salve esse arquivo como `policy.json`. Essa política permite apenas tráfego de entrada para um nome de domínio personalizado privado originado do endpoint da VPC * `vpce-abcd1234efg`*:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ],
            "Condition" : {
                "StringNotEquals": {
                    "aws:SourceVpce": "vpce-abcd1234"
                }
            }
        }
    ]
}
```

O comando [create-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-domain-name.html) indicado abaixo cria um nome de domínio personalizado privado:

```
aws apigateway create-domain-name \
    --domain-name 'private.example.com' \
    --certificate-arn 'arn:aws:acm:us-west-2:111122223333:certificate/a1b2c3d4-5678-90ab-cdef' \
    --security-policy 'TLS_1_2' \
    --endpoint-configuration '{"types":["PRIVATE"]}' \
    --policy file://policy.json
```

A saída será exibida da seguinte forma:

```
{
    "domainName": "private.example.com",
    "domainNameId": "abcd1234",
    "domainNameArn": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234",
    "certificateArn": "arn:aws:acm:us-west-2:111122223333:certificate/a1b2c3d4-5678-90ab-cdef",
    "certificateUploadDate": "2024-09-10T10:31:20-07:00",
    "endpointConfiguration": {
        "types": [
            "PRIVATE"
        ]
    },
    "domainNameStatus": "AVAILABLE",
    "securityPolicy": "TLS_1_2",
    "routingMode" : "API_MAPPING_ONLY",
    "policy": "..."
}
```

------

## Etapa 2: criar um mapeamento de caminho base para associar a API privada ao nome de domínio personalizado privado
<a name="apigateway-private-custom-domains-base-path-mapping"></a>

Depois de criar um nome de domínio personalizado privado, você associa uma API privada a ele. O mapeamento de caminho base torna uma API acessível por meio da combinação do nome de domínio personalizado e do caminho base correspondente. Recomendamos usar um único nome de domínio personalizado privado como o nome do host de várias APIs privadas.

Todos os provedores de API precisam criar um mapeamento de caminho base, mesmo que você não pretenda invocar sua API. Também é necessário conceder acesso para que os endpoints da VPC invoquem quaisquer APIs privadas que você associa ao nome de domínio personalizado privado.

------
#### [ Console de gerenciamento da AWS ]

**Como criar um mapeamento de caminho base**

1. Faça login no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. No painel de navegação principal, selecione **Nomes de domínio personalizados**.

1. Escolha um nome de domínio personalizado privado.

1. Na guia **Mapeamentos de API**, escolha **Configurar mapeamentos**.

1. Escolha **Add new mapping (Adicionar novo mapeamento)**.

1. Insira uma **API**, um **Estágio** e, opcionalmente, um **Caminho**.

1. Escolha **Salvar**.

------
#### [ AWS CLI ]

O comando [create-base-path-mapping](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-base-path-mapping.html) indicado abaixo criar um mapeamento entre uma API privada e um nome de domínio personalizado privado:

```
aws apigateway create-base-path-mapping \
    --domain-name-id abcd1234 \
    --domain-name 'private.example.com' \
    --rest-api-id a1b2c3 \
    --stage prod \
    --base-path v1
```

A saída será exibida da seguinte forma:

```
{
    "basePath": "v1",
    "restApiId": "a1b2c3",
    "stage": "prod"
}
```

------

Para ter maior flexibilidade em relação a como você direciona o tráfego para as APIs, você pode alterar o modo de roteamento para `ROUTING_RULE_ONLY` ou `ROUTING_RULE_THEN_API_MAPPING` e criar uma regra de roteamento. Para obter mais informações, consulte [Encaminhar o tráfego às APIs por meio do nome de domínio personalizado no API Gateway](rest-api-routing-mode.md).

**nota**  
Se você quiser que outras Contas da AWS invoquem seu nome de domínio personalizado privado, depois de concluir este tutorial, siga as etapas em [Provedor de API: compartilhar seu nome de domínio personalizado privado usando o AWS RAM](apigateway-private-custom-domains-provider-share.md).

## Etapa 3: criar uma associação de acesso ao nome de domínio entre o nome de domínio personalizado e um endpoint da VPC
<a name="apigateway-private-custom-domains-provider-associate-with-vpce"></a>

Em seguida, você cria uma associação de acesso ao nome de domínio entre o nome de domínio personalizado privado e o endpoint da VPC. Seu endpoint da VPC usa a associação de acesso ao nome de domínio para invocar o nome de domínio personalizado privado enquanto está isolado da internet pública.

------
#### [ Console de gerenciamento da AWS ]

**Como criar uma associação de acesso ao nome de domínio**

1. Faça login no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. No painel de navegação principal, selecione **Nomes de domínio personalizados**.

1. Escolha um nome de domínio personalizado privado.

1. Na guia **Compartilhamento de recursos**, em **Associações de acesso a nomes de domínio**, escolha **Criar associação de acesso a nomes de domínio**.

1. Em **ARN do nome do domínio**, selecione seu nome de domínio.

1. Em **IDs de endpoint da VPC**, selecione o ID de endpoint da VPC ao qual você forneceu acesso na Etapa 1.

1. Escolha **Associação de acesso a nomes de domínio**.

Você também pode criar sua associação de acesso ao nome de domínio usando a página **Associações de acesso a nomes de domínio** do console.

------
#### [ AWS CLI ]

O comando `create-domain-name-access-association` a seguir cria uma associação de acesso ao nome de domínio entre o nome de domínio personalizado privado e o endpoint da VPC.

```
aws apigateway create-domain-name-access-association \
    --domain-name-arn arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234 \
    --access-association-source vpce-abcd1234efg \
    --access-association-source-type VPCE \
    --region us-west-2
```

A saída será exibida da seguinte forma:

```
{
    "domainNameAccessAssociationARN": "arn:aws:apigateway:us-west-2:111122223333:/domainnameaccessassociations/domainname/private.example.com+abcd1234/vpcesource/vpce-abcd1234efg",
    "accessAssociationSource": "vpce-abcd1234efg",
    "accessAssociationSourceType": "VPCE",
    "domainNameARN" : "arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234"
}
```

------

Depois que a associação de acesso ao nome de domínio é criada, ela leva cerca de 15 minutos para ficar pronta. Enquanto isso, você pode prosseguir com as etapas a seguir.

## Etapa 4: criar uma zona hospedada do Route 53
<a name="apigateway-private-custom-domains-provider-create-route-53-private-hosted-zone"></a>

Depois de atualizar sua política de recursos e associar o nome de domínio personalizado privado ao endpoint da VPC, você cria uma zona hospedada privada no Route 53 para resolver o nome de domínio personalizado. Zona hospedada é um contêiner que abriga informações sobre como você deseja rotear o tráfego para um domínio dentro de uma ou mais VPCs sem expor seus recursos à internet. Para obter mais informações, consulte [Como trabalhar com zonas hospedadas privadas](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html).

------
#### [ Console de gerenciamento da AWS ]

Para usar o Console de gerenciamento da AWS, consulte [Creating a private hosted zone](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html) no *Guia do desenvolvedor do Amazon Route 53*.

Em **Nome**, use o nome do seu domínio personalizado privado. Em **ID da VPC**, use a VPC que contém o endpoint da VPC que você usou nas etapas anteriores.

------
#### [ AWS CLI ]

O comando [create-hosted-zone](https://docs.aws.amazon.com/cli/latest/reference/route53/create-hosted-zone.html) indicado abaixo cria uma zona hospedada privada:

```
aws route53 create-hosted-zone --name private.example.com \
    --caller-reference 2014-04-01-18:47 \
    --hosted-zone-config Comment="command-line version",PrivateZone=true \
    --vpc VPCRegion=us-west-2,VPCId=vpc-abcd1234
```

A saída contém o ID da zona hospedada. Você usa o ID da zona hospedada nas etapas a seguir.

------

## Etapa 5: criar um registro de DNS do Route 53
<a name="apigateway-private-custom-domains-provider-create-route-53-record"></a>

Depois de criar a zona hospedada, crie um registro para resolver o nome de domínio personalizado privado. Use o ID da zona hospedada criado na etapa anterior. Neste exemplo, você cria um tipo de registro A. Se estiver usando IPv6 para o endpoint da VPC, crie um tipo de registro AAAA. Se estiver usando pilha dupla para o endpoint da VPC, crie um registro do tipo AAAA e um do tipo A.

------
#### [ Console de gerenciamento da AWS ]

Para usar o Console de gerenciamento da AWS, consulte [Routing traffic to an Amazon API Gateway API by using your domain name](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-api-gateway.html).

Use **Criação rápida** e ative **Alias**. Para o endpoint, use o nome DNS do endpoint da VPC.

------
#### [ AWS CLI ]

Para configurar os registros de DNS para associar o nome de domínio personalizado privado ao nome de host do ID de zona hospedada fornecido, crie um arquivo JSON que contenha a configuração de um registro de DNS para o nome de domínio privado.

O comando `setup-dns-record.json` a seguir mostra como criar um registro de DNS `A` para associar um nome de domínio personalizado privado ao respectivo nome de host privado. Você fornece o `DNSName` do ID do DNS da VPC e o ID da zona hospedada que você criou na etapa anterior.

```
{
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "private.example.com",
        "Type": "A",
        "AliasTarget": {
          "DNSName": "vpce-abcd1234.execute-api.us-west-2.vpce.amazonaws.com",
          "HostedZoneId": "Z2OJLYMUO9EFXC",
          "EvaluateTargetHealth": false
        }
      }
    }
  ]
}
```

O comando [change-resource-record-sets](https://docs.aws.amazon.com/cli/latest/reference/route53/change-resource-record-sets.html) indicado abaixo cria um registro de DNS para o nome de domínio personalizado privado:

```
aws route53 change-resource-record-sets \
    --hosted-zone-id ZABCDEFG1234 \
    --change-batch file://path/to/your/setup-dns-record.json
```

Substitua `hosted-zone-id` pelo ID da zona hospedada do Route 53 do conjunto de registros DNS na conta. O valor do parâmetro `change-batch` aponta para um arquivo JSON.

------

Caso não pretenda invocar seu nome de domínio personalizado privado, depois de confirmar que ele está funcionando, você poderá excluir esses recursos.

## Etapa 6: invocar o nome de domínio personalizado privado
<a name="apigateway-private-custom-domains-tutorial-invoke"></a>

Agora você pode invocar o nome de domínio personalizado privado em sua Conta da AWS. Em sua VPC, use o comando curl a seguir para acessar o nome de domínio personalizado privado.

```
curl https://private.example.com/v1
```

Para ter mais informações sobre outras formas de invocar sua API privada, consulte [Invocar uma API privada usando um nome de domínio personalizado](apigateway-private-api-test-invoke-url.md#apigateway-private-custom-domains-provider-invoke).

## Etapa 7: limpar
<a name="apigateway-private-custom-domains-cleanup"></a>

Para evitar custos desnecessários, exclua a associação entre o endpoint da VPC e o nome de domínio personalizado privado e, em seguida, exclua o nome de domínio personalizado privado.

------
#### [ Console de gerenciamento da AWS ]

**Como excluir a associação de acesso ao nome de domínio**

1. Faça login no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. No painel de navegação principal, escolha **Associações de acesso a nomes de domínio**.

1. Selecione sua associação de acesso ao nome de domínio e escolha **Excluir**.

1. Confirme sua escolha e selecione **Excluir**.

Depois de excluir sua associação de acesso ao nome de domínio, você pode excluir o nome de domínio personalizado privado.

**Como excluir seu nome de domínio personalizado privado**

1. Faça login no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. No painel de navegação principal, selecione **Nomes de domínio personalizados**.

1. Escolha seu nome de domínio personalizado privado.

1. Escolha **Excluir**.

1. Confirme sua escolha e selecione **Excluir**.

Se necessário, você também pode excluir o endpoint da VPC. Para obter mais informações, consulte [Excluir um endpoint de interface](https://docs.aws.amazon.com/vpc/latest/privatelink/delete-interface-endpoint.html).

------
#### [ AWS CLI ]

**Para limpar**

1. O comando `delete-access-association` indicado abaixo exclui a associação de acesso ao nome de domínio:

   ```
   aws apigateway delete-domain-name-access-association \
       --domain-name-access-association-arn 'arn:aws:apigateway:us-west-2:111122223333:/domainnameaccessassociations/domainname/private.example.com+abcd1234/vpcesource/vpce-abcd1234efg' \
       --region us-west-2
   ```

1. O comando `delete-domain-name` indicado abaixo exclui seu nome de domínio personalizado privado. Esse comando também remove todos os mapeamentos de caminho base.

   ```
   aws apigateway delete-domain-name \
       --domain-name test.private.com \
       --domain-name-id abcd1234
   ```

Se necessário, você também pode excluir o endpoint da VPC. Para obter mais informações, consulte [Excluir um endpoint de interface](https://docs.aws.amazon.com/vpc/latest/privatelink/delete-interface-endpoint.html).

------

## Práticas recomendadas
<a name="apigateway-private-custom-domains-best-practices"></a>

Sugerimos que você siga as práticas recomendadas indicadas abaixo ao criar um nome de domínio personalizado privado:
+ Crie um mapeamento de caminho base ou regras de roteamento para enviar tráfego de um nome de domínio personalizado privado a várias APIs privadas.
+ Quando um endpoint da VPC não precisar mais acessar um nome de domínio personalizado privado, exclua a associação. Além disso, remova o endpoint da VPC da `policy` referente ao serviço `execute-api` do domínio personalizado privado. 
+ Configure pelo menos duas zonas de disponibilidade por endpoint da VPC.
+ Desabilite o endpoint padrão. Recomendamos desabilitar o endpoint padrão para permitir que os consumidores de API chamem sua API somente pelo nome de domínio personalizado. Para obter mais informações, consulte [Desabilitar o endpoint padrão para APIs REST](rest-api-disable-default-endpoint.md).
+ Recomendamos que você provisione uma zona hospedada privada do Route 53 e um registro do tipo A ao configurar seu nome de domínio personalizado privado. Se você não pretende invocar seu nome de domínio personalizado privado, poderá excluir esses recursos posteriormente.

# Como trabalhar com nomes de domínio personalizados privados entre contas
<a name="apigateway-private-custom-domains-other-accounts"></a>

Esta seção explica como trabalhar com nomes de domínio personalizados privados entre contas. É possível fornecer um nome de domínio personalizado privado para outra Conta da AWS e usar outra Conta da AWS para invocar um nome de domínio personalizado privado.

Você pode compartilhar seu nome de domínio personalizado privado com outra Conta da AWS usando o AWS Resource Access Manager ou o API Gateway. O AWS Resource Access Manager (AWS RAM) ajuda você a compartilhar com segurança seus recursos entre Contas da AWS e dentro de sua organização ou unidades organizacionais (UOs). Para obter mais informações, consulte [ O que é o AWS Resource Access Manager](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html).

Para obter instruções sobre como compartilhar um nome de domínio personalizado privado com outra Conta da AWS usando o AWS RAM, consulte [Provedor de API: compartilhar seu nome de domínio personalizado privado usando o AWS RAM](apigateway-private-custom-domains-provider-share.md).

Para obter instruções sobre como compartilhar um nome de domínio personalizado privado com outra Conta da AWS usando o API Gateway, consulte [Provedor de API: compartilhar seu nome de domínio personalizado privado usando a AWS CLI do API Gateway](apigateway-private-custom-domains-provider-share-cli.md).

Para obter instruções sobre como consumir um nome de domínio personalizado privado em outra Conta da AWS, consulte [Consumidor de API: associar o endpoint da VPC a um nome de domínio personalizado privado compartilhado com você](apigateway-private-custom-domains-consumer-create.md).

## Práticas recomendadas para trabalhar com nomes de domínio personalizados privados entre contas
<a name="apigateway-private-custom-domains-other-accounts-best-practices"></a>

Indicamos as seguintes práticas recomendadas para trabalhar com nomes de domínio personalizados privados entre contas:
+ Use o AWS RAM para compartilhar nomes de domínio personalizados privados. Ao usar o AWS RAM, você pode reduzir o custo operacional indireto e não precisa criar uma `managementPolicy` para o serviço Amazon API Gateway Management.
+ Use o parâmetro `resource-owner` ao listar seus nomes de domínio personalizados privados ou associações de acesso a nomes de domínio. Use o parâmetro `resource-owner` para listar somente os recursos que pertencem a você ou a outras Contas da AWS.

  O seguinte exemplo mostra como obter todas as associações de acesso a nomes de domínio pertencentes a você:

  ```
  aws apigateway get-domain-name-access-associations --resource-owner SELF
  ```

  Use `--resource-owner OTHER_ACCOUNTS` para listar todas as associações de acesso a nomes de domínio que outras contas formaram com seu nome de domínio personalizado privado.

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

Você pode fornecer aos consumidores de API em outras Contas da AWS acesso ao seu nome de domínio personalizado privado. Nesta seção, você aprenderá a compartilhar seu nome de domínio personalizado privado usando o AWS RAM e a controlar o acesso ao seu nome de domínio personalizado privado.

## Considerações referentes ao compartilhamento de um nome de domínio personalizado privado
<a name="apigateway-private-custom-domains-provider-share-considerations"></a>

As considerações a seguir podem afetar a forma como você fornece acesso ao seu nome de domínio personalizado privado usando o AWS RAM. Para saber como compartilhar seu nome de domínio personalizado privado sem usar o AWS RAM, consulte [Provedor de API: compartilhar seu nome de domínio personalizado privado usando a AWS CLI do API Gateway](apigateway-private-custom-domains-provider-share-cli.md).
+ Os nomes de domínio personalizados privados são compartilhados em nível de Região da AWS. Tanto o nome de domínio personalizado privado quanto o endpoint da VPC precisam estar na mesma Região da AWS.
+ É possível usar um compartilhamento de recursos com várias entidades principais e, depois de criar o compartilhamento de recursos, adicionar mais entidades principais a ele. Recomendamos que, quando possível, você reutilize seu compartilhamento de recursos.
+ Você sempre precisa conceder acesso ao endpoint da VPC do consumidor de API para invocar seu nome de domínio personalizado privado e todas as APIs privadas associadas a ele.
+ Se o consumidor e o provedor de API estiverem na mesma organização que está usando o AWS Organizations, o compartilhamento de recursos será aceito automaticamente. Ainda assim você precisa criar o compartilhamento de recursos usando o AWS RAM.
+ Se o consumidor e o provedor de API estiverem na mesma organização que está usando o AWS Organizations e o compartilhamento de recursos dentro da organização estiver habilitado, quaisquer entidades principais na organização com as quais você compartilhar receberão acesso automaticamente aos compartilhamentos de recursos. Não há necessidade de convite, e você pode ignorar o compartilhamento de recursos.
+ Se o consumidor de API não aceitar o compartilhamento de recursos em **12 horas**, o provedor de API deverá compartilhar o recurso novamente.
+ Após a criação do compartilhamento de recursos, o AWS RAM atualiza a `managementPolicy` referente ao serviço Amazon API Gateway Management para o nome de domínio personalizado privado a fim de impedir o acesso a entidades principais sem acesso `allow` explícito. Para ter mais informações, consulte [Determining whether a request is allowed or denied within an account](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow) no Guia do usuário do IAM.

  A `managementPolicy` atualizada será semelhante ao seguinte:

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Id": "abcd1234-1234-abcd-abcd-1234abcdefg",
      "Statement": [
          {
              "Sid": "APIGatewayPrivateDomainNameManagementPolicyDefaultPermission-org",
              "Effect": "Allow",
              "Principal": "*",
              "Action": "apigateway:CreateAccessAssociation",
              "Resource": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234",
              "Condition": {
                  "StringEquals": {
                      "aws:PrincipalOrgID": "o-1234abcd"
                  },
                  "StringNotEquals": {
                      "aws:PrincipalAccount": "111122223333"
                  }
              }
          }
      ]
  }
  ```

------

  O AWS RAM impediu que entidades principais sem acesso `allow` explícito criassem associações de acesso ao seu nome de domínio personalizado privado, adicionando o seguinte:

  ```
  "StringNotEquals": {
      "aws:PrincipalAccount": "111122223333"
  }
  ```

  Você ainda pode usar a entidade principal na Conta da AWS que criou o nome de domínio personalizado privado para criar associações de acesso a nomes de domínio.

## Permitir que outras contas criem associações de acesso a nomes de domínio com seu nome de domínio personalizado privado
<a name="apigateway-private-custom-domains-provider-management-policy-update"></a>

Primeiro, conceda acesso a outra Conta da AWS para criar associações de acesso ao nome de domínio com seu nome de domínio personalizado privado.

------
#### [ Console de gerenciamento da AWS ]

Para usar o Console de gerenciamento da AWS, consulte [Creating a resource share in AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-create.html) no *Guia do usuário do AWS RAM*.

Em **Selecionar tipo de recurso**, escolha **Domínios personalizados privados do API Gateway**.

------
#### [ AWS CLI ]

O [create-resource-share](https://docs.aws.amazon.com/cli/latest/reference/ram/create-resource-share.html) indicado abaixo cria um compartilhamento de recursos para seu nome de domínio personalizado privado. Pode levar alguns minutos para que as associações de entidades principais entre recurso e principal sejam concluídas. Para entidades principais, forneça um ID de conta ou um ID de organização, como `arn:aws:organizations::123456789012:organization/o-1234abcd`. Você pode fornecer várias entidades principais para seu compartilhamento de recursos.

```
aws ram create-resource-share \
    --region us-west-2 \
    --name privateCustomDomain-resource-share \
    --permission-arns arn:aws:ram::aws:permission/APIGatewayPrivateDomainNameManagementPolicyDefaultPermission \
    --resource-arns arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234 \
    --principals 222222222222
```

------

Depois de fornecer acesso a outra Conta da AWS, os consumidores de API dessa conta devem criar uma associação de acesso ao nome de domínio entre o endpoint da VPC deles e seu nome de domínio personalizado privado. Não é possível criar a associação de acesso ao nome de domínio para eles. Para obter mais informações, consulte [Associe o endpoint da VPC a um nome de domínio personalizado privado compartilhado](apigateway-private-custom-domains-consumer-create.md#apigateway-private-custom-domains-consumer-associate).

## Permita que outras contas invoquem seu nome de domínio personalizado privado
<a name="apigateway-private-custom-domains-provider-policy-update"></a>

Em seguida, conceda acesso ao endpoint da VPC do consumidor de API para invocar seu nome de domínio personalizado privado e todas as APIs privadas associadas a ele.

------
#### [ Console de gerenciamento da AWS ]

**Como permitir que endpoints da VPC em outras contas invoquem seu nome de domínio personalizado privado**

1. Faça login no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. No painel de navegação principal, selecione **Nomes de domínio personalizados**.

1. Escolha o nome de domínio personalizado privado que você compartilhou com outras Contas da AWS.

1. Na guia **Política de recursos**, selecione **Editar política de recursos**.

1. Adicione o ID do endpoint da VPC do consumidor de API à sua política de recursos.

   Você pode encontrar o ID do endpoint da VPC do consumidor de API na seção **Associações de acesso a nomes de domínio** da guia **Compartilhamento de recursos** na página **Detalhes do domínio** do seu nome de domínio personalizado privado.

1. Escolha **Salvar alterações**.

------
#### [ AWS CLI ]

A `policy` a seguir referente ao serviço `execute-api` permite o tráfego de entrada para um nome de domínio personalizado privado originado dos endpoints da VPC `vpce-abcd1234efg` e `vpce-xyz000abc`.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ],
            "Condition" : {
                "StringNotEquals": {
                    "aws:SourceVpce": [
                    "vpce-abcd1234",
                    "vpce-xyzz0000"
                    ]
                }
            }
        }
    ]
}
```

O comando [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html) indicado abaixo usa uma operação de patch para atualizar a `policy` para um nome de domínio personalizado privado:

```
aws apigateway update-domain-name
    --domain-name private.example.com \
    --domain-name-id abcd1234 \
    --patch-operations op=replace,path=/policy,value='"{\"Version\": \"2012-10-17\",		 	 	 \"Statement\": [{\"Effect\": \"Allow\",\"Principal\": \"*\",\"Action\": \"execute-api:Invoke\",\"Resource\":[\"execute-api:/*\"]},{\"Effect\": \"Deny\",\"Principal\": \"*\",\"Action\": \"execute-api:Invoke\",\"Resource\":[\"execute-api:/*\"],\"Condition\":{\"StringNotEquals\":[\"vpce-abcd1234efg\", \"vpce-xyz000abc\"]}}}]}"
```

------

# Provedor de API: interromper o compartilhamento de um nome de domínio personalizado privado usando o AWS RAM
<a name="apigateway-private-custom-domains-provider-stop-sharing"></a>

Para interromper o compartilhamento de seu nome de domínio personalizado privado, primeiro impeça que o consumidor de API crie mais associações de acesso a nomes de domínio dissociando o compartilhamento de recursos. Em seguida, rejeite a associação de acesso ao nome de domínio e remova o endpoint da VPC do consumidor de API da `policy` referente ao serviço `execute-api`. O consumidor de API pode então excluir a associação de acesso ao nome de domínio que ele fez.

## Interromper o compartilhamento do nome de domínio personalizado privado
<a name="apigateway-private-custom-domains-provider-dissociate-ram"></a>

Primeiro, interrompa o compartilhamento de recursos usando o AWS RAM.

------
#### [ Console de gerenciamento da AWS ]

Para usar o Console de gerenciamento da AWS, consulte [Update a resource share in AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-update.html).

------
#### [ AWS CLI ]

O comando [disassociate-resource-share](https://docs.aws.amazon.com/cli/latest/reference/ram/disassociate-resource-share.html) indicado abaixo dissocia um compartilhamento de recursos para seu nome de domínio personalizado privado.

```
aws ram disassociate-resource-share \
    --region us-west-2 \
    --resource-arns arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234 \
    --principals 222222222222
```

------

## Rejeitar uma associação de acesso ao nome de domínio
<a name="apigateway-private-custom-domains-provider-reject"></a>

Depois de interromper o compartilhamento de seu recurso usando o AWS RAM, rejeite a associação de acesso ao nome de domínio entre um endpoint da VPC em outra conta e seu nome de domínio personalizado privado. 

**nota**  
Não é possível rejeitar uma associação de acesso ao nome de domínio em sua conta. Para interromper o compartilhamento de recursos, exclua a associação de acesso ao nome de domínio. Para ter mais informações, consulte [Excluir uma associação de acesso ao nome de domínio](apigateway-private-custom-domains-tutorial.md#apigateway-private-custom-domains-cleanup).

Quando você rejeita uma associação de acesso a um nome de domínio com um endpoint da VPC, se um consumidor de API tentar chamar seu nome de domínio personalizado privado, o API Gateway rejeitará a chamada e retornará um código de status `403`.

------
#### [ Console de gerenciamento da AWS ]

**Como rejeitar uma associação de acesso ao nome de domínio**

1. Faça login no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. No painel de navegação principal, selecione **Nomes de domínio personalizados**.

1. Escolha o nome de domínio personalizado privado que você compartilhou com outras Contas da AWS.

1. Em **Compartilhamento de recursos**, escolha a associação de acesso ao nome de domínio que você deseja rejeitar.

1. Escolha **Rejeitar associação**.

1. Confirme sua escolha e selecione **Rejeitar**.

------
#### [ AWS CLI ]

O comando `reject-domain-name-access-association` indicado abaixo rejeita a associação de acesso ao nome de domínio entre o endpoint da VPC e seu nome de domínio personalizado privado:

```
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
```

------

## Negar ao provedor de API acesso para invocar seu nome de domínio personalizado privado
<a name="apigateway-private-custom-domains-provider-deny-access"></a>

Depois de rejeitar a associação de acesso ao nome de domínio, remova o endpoint da VPC do consumidor de API da sua `policy` referente ao serviço `execute-api`.

------
#### [ Console de gerenciamento da AWS ]

**Como remover o endpoint da VPC do consumidor de API da sua política de recursos**

1. Faça login no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. No painel de navegação principal, selecione **Nomes de domínio personalizados**.

1. Escolha o nome de domínio personalizado privado que você compartilhou com outras Contas da AWS.

1. Na guia **Política de recursos**, escolha **Editar**.

1. Remova o endpoint da VPC da política.

1. Escolha **Salvar alterações**.

------
#### [ AWS CLI ]

O comando [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html) a seguir usa uma operação de patch para atualizar a `policy` referente ao serviço `execute-api` de um nome de domínio personalizado privado. Essa nova `policy` remove um ID de endpoint da VPC adicional acrescentado em [Permita que outras contas invoquem seu nome de domínio personalizado privado](apigateway-private-custom-domains-provider-share.md#apigateway-private-custom-domains-provider-policy-update):

```
aws apigateway update-domain-name
    --domain-name private.example.com \
    --domain-name-id abcd1234 \
    --patch-operations op=replace,path=/policy,value='"{\"Version\": \"2012-10-17\",		 	 	 \"Statement\": [{\"Effect\": \"Allow\",\"Principal\": \"*\",\"Action\": \"execute-api:Invoke\",\"Resource\":[\"execute-api:/*\"]},{\"Effect\": \"Deny\",\"Principal\": \"*\",\"Action\": \"execute-api:Invoke\",\"Resource\":[\"execute-api:/*\"],\"Condition\":{\"StringNotEquals\":{\"aws:SourceVpce\": \"vpce-abcd1234efg\"}}}]}"
```

------

O consumidor de API deve então excluir a associação de acesso ao nome de domínio. Não é possível excluí-lo em nome dele. Para obter mais informações, consulte [Consumidor de API: excluir a associação de acesso ao nome de domínio com um nome de domínio personalizado privado](apigateway-private-custom-domains-consumer-delete-domain-name-access-association.md).

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

------

# Consumidor de API: associar o endpoint da VPC a um nome de domínio personalizado privado compartilhado com você
<a name="apigateway-private-custom-domains-consumer-create"></a>

O procedimento a seguir mostra como consumir um nome de domínio privado em outra Conta da AWS. Dependendo da sua relação de confiança com o provedor de API, o AWS RAM pode concluir algumas tarefas para você.

Quando você está em uma Conta da AWS diferente da conta de um nome de domínio personalizado privado, só é possível associar o endpoint da VPC a um nome de domínio personalizado privado e invocá-lo. Não é possível visualizar a `policy` nem nenhum outro parâmetro do nome de domínio personalizado privado.

## Pré-requisitos
<a name="apigateway-private-custom-domains-consumer-prerequisites"></a>

Para consumir um nome de domínio personalizado privado em outra Conta da AWS, é necessário observar os seguintes pré-requisitos:
+ Uma VPC e um endpoint da VPC para o serviço `execute-api`. A VPC deve ter `enableDnsHostnames` e `enableDnsSupport` configurados como `true`.
+ Recomendamos configurar pelo menos duas zonas de disponibilidade por endpoint da VPC.

## (Opcional) Aceite o compartilhamento de recursos do domínio personalizado privado
<a name="apigateway-private-custom-domains-consumer-accept-resource-share"></a>

Se o provedor de API usou o AWS RAM para criar um compartilhamento de recursos, você tem **12 horas** para aceitá-lo. Se você estiver na mesma organização que está usando o AWS Organizations como provedor de API, o compartilhamento será aceito automaticamente. Se estiver em uma organização que tem recursos compartilhados automáticos habilitados, o recurso será compartilhado automaticamente com você.

------
#### [ Console de gerenciamento da AWS ]

Para usar o Console de gerenciamento da AWS, consulte [Accepting and rejecting resource share invitations](https://docs.aws.amazon.com/ram/latest/userguide/working-with-shared-invitations.html) no *Guia do usuário do AWS RAM*. 

------
#### [ AWS CLI ]

Para encontrar todos os recursos compartilhados com você, use o comando [get-resource-share-invitations](https://docs.aws.amazon.com/cli/latest/reference/ram/get-resource-share-invitations.html) indicado abaixo:

```
aws ram get-resource-share-invitations \
    --region us-west-2
```

Use o ARN de compartilhamento de recursos resultante para aceitar o convite de compartilhamento de recursos. O comando [accept-resource-share-invitation](https://docs.aws.amazon.com/cli/latest/reference/ram/accept-resource-share-invitation.html) a seguir aceita o compartilhamento de recursos.

```
aws ram accept-resource-share-invitation \
    --resource-share-invitation-arn arn:aws:ram:us-west-2:123456789012:resource-share-invitation/1e3477be-4a95-46b4-bbe0-c4001EXAMPLE \
    --region us-west-2
```

------

## Associe o endpoint da VPC a um nome de domínio personalizado privado compartilhado
<a name="apigateway-private-custom-domains-consumer-associate"></a>

Como os nomes de domínio personalizados privados não são exclusivos, você deve associar o endpoint da VPC ao ARN do nome de domínio personalizado exclusivo. Após a criação da associação de acesso ao nome de domínio, pode demorar até 15 minutos para que o endpoint da VPC invoque com sucesso o nome de domínio personalizado privado. Se você usa um endpoint da VPC para acessar um nome de domínio personalizado público, não o use para criar associações de acesso a nomes de domínio. 

------
#### [ Console de gerenciamento da AWS ]

**Como associar o endpoint da VPC a um nome de domínio personalizado privado compartilhado**

1. Faça login no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. No painel de navegação principal, escolha **Associações de acesso a nomes de domínio**.

1. Escolha **Criar uma associação de acesso ao nome de domínio**.

1. Em **ARN do nome de domínio**, selecione o ARN do nome de domínio que o provedor de API compartilhou com você.

   O ARN do nome de domínio pode não aparecer na lista suspensa. Você pode usar o console do AWS RAM para visualizar os nomes de domínio compartilhados com você e, em seguida, copiar o ARN do nome de domínio e inseri-lo nesse campo.

1. Em **IDs de endpoint da VPC**, selecione o ID do endpoint da VPC com o qual você deseja formar a associação de acesso ao nome de domínio.

1. Escolha **Criar uma associação de acesso ao nome de domínio**.

------
#### [ AWS CLI ]

Como os nomes de domínio personalizados privados não são exclusivos, você deve associar o endpoint da VPC ao ARN do nome de domínio personalizado exclusivo. Para localizar o ARN do nome de domínio, use um dos comandos a seguir.

1.   
**AWS RAM**  
Você pode usar o comando [list-resources](https://docs.aws.amazon.com/cli/latest/reference/ram/list-resources.html) a seguir para visualizar os recursos que são compartilhados com você. Para usar esse comando, o provedor de API deve ter usado o AWS RAM para compartilhar o respectivo domínio personalizado privado com você.  

   ```
   aws ram list-resources \
       --resource-owner OTHER-ACCOUNTS \
       --region us-west-2
       --resource-type apigateway:Domainnames
   ```  
**API Gateway**  
O comando `get-domain-names` a seguir lista todos os nomes de domínio personalizados privados pertencentes a outras Contas da AWS com as quais você pode formar associações de acesso a nomes de domínio.  

   ```
   aws apigateway get-domain-names \
       --resource-owner OTHER_ACCOUNTS \
       --region us-west-2
   ```

1.  Depois de recuperar o ARN, use o API Gateway para criar a associação de acesso ao nome de domínio entre o endpoint da VPC e um nome de domínio personalizado privado compartilhado. Use o seguinte comando `create-domain-name-access-association`:

   ```
   aws apigateway create-domain-name-access-association \
       --access-association-source-type VPCE \
       --access-association-source 'vpce-1a2b3c4d5e6f1a2b3' \
       --domain-name-arn arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234"
   ```

   A saída será exibida da seguinte forma:

   ```
   {
       "domainNameAccessAssociationARN": "arn:aws:apigateway:us-west-2:444455556666:/domainnameaccessassociations/domainname/private.example.com+abcd1234/vpcesource/vpce-abcd1234efg", 
       "accessAssociationSource": "vpce-1a2b3c4d5e6f1a2b3",
       "accessAssociationSourceType": "VPCE",
       "domainNameARN" : "arn:aws:apigateway:us-west-1:111122223333:/domainnames/private.example.com+a1b2c3"
   }
   ```

------

Depois de associar o endpoint da VPC ao nome de domínio personalizado privado, confirme se o provedor de API atualizou a política do nome de domínio personalizado privado para permitir que seu endpoint da VPC invoque o nome de domínio. Para obter mais informações, consulte [Permita que outras contas invoquem seu nome de domínio personalizado privado](apigateway-private-custom-domains-provider-share.md#apigateway-private-custom-domains-provider-policy-update).

## Como criar uma zona hospedada no Route 53
<a name="apigateway-private-custom-domains-consumer-create-route-53-private-hosted-zone"></a>

Para resolver o nome de domínio personalizado privado, você precisa criar uma zona hospedada privada do Route 53. Zona hospedada é um contêiner que abriga informações sobre como você deseja rotear o tráfego para um domínio dentro de uma ou mais VPCs sem expor seus recursos à internet. Para obter mais informações, consulte [Como trabalhar com zonas hospedadas privadas](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html).

------
#### [ Console de gerenciamento da AWS ]

Para usar o Console de gerenciamento da AWS, consulte [Creating a private hosted zone](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html) no *Guia do desenvolvedor do Amazon Route 53*.

Em **Name**, use o nome do domínio personalizado privado. Em **ID da VPC**, use a VPC que contém o endpoint da VPC que você usou para a associação de acesso ao nome de domínio.

------
#### [ AWS CLI ]

O comando [create-hosted-zone](https://docs.aws.amazon.com/cli/latest/reference/route53/create-hosted-zone.html) indicado abaixo cria uma zona hospedada privada:

```
aws route53 create-hosted-zone --name private.example.com \
    --caller-reference 2014-04-01-18:47 \
    --hosted-zone-config Comment="command-line version",PrivateZone=true \
    --vpc VPCRegion=us-west-2,VPCId=vpc-abcd1234
```

A saída contém o ID da zona hospedada. Você usa o ID da zona hospedada nas etapas a seguir.

------

## Crie um registro de DNS A do Route 53.
<a name="apigateway-private-custom-domains-consumer-create-route-53-record"></a>

Depois de criar a zona hospedada, crie um registro para resolver o domínio personalizado privado. Neste exemplo, você cria um tipo de registro A. Se estiver usando IPv6 para o endpoint da VPC, crie um tipo de registro AAAA. Se estiver usando pilha dupla para o endpoint da VPC, crie um registro do tipo AAAA e um do tipo A.

------
#### [ Console de gerenciamento da AWS ]

Para usar o Console de gerenciamento da AWS, consulte [Routing traffic to an Amazon API Gateway API by using your domain name](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-api-gateway.html).

Use **Criação rápida** e ative **Alias**. Para o endpoint, use o nome DNS do endpoint da VPC.

------
#### [ AWS CLI ]

Para configurar os registros de DNS para associar o nome de domínio personalizado privado ao nome de host do ID de zona hospedada fornecido, primeiro crie um arquivo JSON que contenha a configuração de um registro de DNS para o nome de domínio privado.

O comando `setup-dns-record.json` a seguir mostra como criar um registro de DNS `A` para associar um nome de domínio personalizado privado ao respectivo nome de host privado. Você fornece o `DNSName` do ID do DNS da VPC e o ID da zona hospedada que você criou na etapa anterior.

```
{
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "private.example.com",
        "Type": "A",
        "AliasTarget": {
          "DNSName": "vpce-abcd1234.execute-api.us-west-2.vpce.amazonaws.com",
          "HostedZoneId": "Z2OJLYMUO9EFXC",
          "EvaluateTargetHealth": false
        }
      }
    }
  ]
}
```

O comando [change-resource-record-sets](https://docs.aws.amazon.com/cli/latest/reference/route53/change-resource-record-sets.html) indicado abaixo cria um registro de DNS para o nome de domínio personalizado privado:

```
aws route53 change-resource-record-sets \
    --hosted-zone-id ZABCDEFG1234 \
    --change-batch file://path/to/your/setup-dns-record.json
```

Substitua `hosted-zone-id` pelo ID da zona hospedada do Route 53 do conjunto de registros DNS na conta. O valor do parâmetro `change-batch` aponta para um arquivo JSON.

------

## Próximas etapas para um consumidor de API
<a name="apigateway-private-custom-domains-consumer-next-steps"></a>

Agora você pode invocar a API privada em sua Conta da AWS. Na VPC, você pode usar o comando curl a seguir para acessar o nome de domínio personalizado privado.

```
curl https://private.example.com/v1
```

Para ter mais informações sobre outras formas de invocar sua API privada, consulte [Invocar uma API privada usando um nome de domínio personalizado](apigateway-private-api-test-invoke-url.md#apigateway-private-custom-domains-provider-invoke).

# Consumidor de API: excluir a associação de acesso ao nome de domínio com um nome de domínio personalizado privado
<a name="apigateway-private-custom-domains-consumer-delete-domain-name-access-association"></a>

Se você for um consumidor de API, poderá excluir o recurso de associação de acesso a qualquer momento. O provedor de API não pode excluir a associação de acesso ao nome de domínio para você.

Recomendamos que você sempre exclua uma associação de acesso ao nome de domínio quando não a estiver mais usando.

------
#### [ Console de gerenciamento da AWS ]

**Como excluir a associação de acesso ao nome de domínio**

1. Faça login no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. No painel de navegação principal, escolha **Associações de acesso a nomes de domínio**.

1. Selecione sua associação de acesso ao nome de domínio e escolha **Excluir**.

1. Confirme sua escolha e selecione **Excluir**.

------
#### [ AWS CLI ]

O comando `delete-access-association` indicado abaixo exclui a associação de acesso:

```
aws apigateway delete-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'
```

------

# Criar um nome de domínio personalizado para APIs privadas usando o CloudFormation
<a name="apigateway-private-custom-domains-cfn"></a>

O modelo de exemplo do CloudFormation a seguir cria uma API privada e um nome de domínio personalizado privado, associa a API privada ao nome de domínio personalizado e, em seguida, cria uma associação de acesso ao nome de domínio. Você precisa fornecer seu endpoint da VPC, nome de domínio e ARN do certificado.

As seguintes considerações podem afetar o uso do CloudFormation para criar um nome de domínio personalizado privado:
+ Não é possível rejeitar uma associação de acesso a um nome de domínio usando o CloudFormation. Para rejeitar uma associação de acesso a um nome de domínio, use o a AWS CLI.
+ Use a propriedade `AWS::ApiGateway::DomainNameV2` do CloudFormation para criar um nome de domínio personalizado privado.
+ Use a propriedade `AWS::ApiGateway:BasePathMappingV2` do CloudFormation para criar um mapeamento de caminho base.

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  EndpointID:
    Type: String
    Default: vpce-abcd1234567efg
    Description: A VPC endpoint with enableDnsHostnames and enableDnsSupport set to true.
  DomainName:
    Type: String
    Default: private.example.com
    Description: A domain name that you own.
  CertificateArn:
    Type: String
    Default: arn:aws:acm:us-west-2:123456789:certificate/abcd-000-1234-0000-000000abcd
    Description: An ACM certificate that covers the domain name.
Resources:
  PrivateApi:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      EndpointConfiguration:
        Types:
          - PRIVATE
        VpcEndpointIds:
          - !Ref EndpointID
      Name: private-api
      Policy:
        Statement:
          - Action: 'execute-api:Invoke'
            Effect: Allow
            Principal: '*'
            Resource: 'execute-api:/*'
          - Action: 'execute-api:Invoke'
            Condition:
              StringNotEquals:
                'aws:SourceVpce': !Ref EndpointID
            Effect: Deny
            Principal: '*'
            Resource: 'execute-api:/*'
        Version: 2012-10-17		 	 	 
  PrivateApiDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    Properties:
      RestApiId: !Ref PrivateApi
      Description: Private API deployment
    DependsOn:
      - PrivateApiMethod
  PrivateApiStage:
    Type: 'AWS::ApiGateway::Stage'
    Properties:
      RestApiId: !Ref PrivateApi
      DeploymentId: !Ref PrivateApiDeployment
      StageName: prod
  PrivateApiMethod: 
    Type: 'AWS::ApiGateway::Method'
    Properties:
      HttpMethod: ANY
      ResourceId: !GetAtt PrivateApi.RootResourceId
      RestApiId: !Ref PrivateApi
      AuthorizationType: NONE
      Integration:
        Type: MOCK
        RequestTemplates:
          application/json: "{\"statusCode\": 200}"
        IntegrationResponses:
          - StatusCode: '200'
      MethodResponses:
        - StatusCode: '200'
  PrivateDomainName:
    Type: AWS::ApiGateway::DomainNameV2
    Properties:
      DomainName: !Ref DomainName
      CertificateArn: !Ref CertificateArn
      EndpointConfiguration:
        Types:
          - PRIVATE
      SecurityPolicy: TLS_1_2
      Policy:
        Statement:
            - Action: 'execute-api:Invoke'
              Effect: Allow
              Principal: '*'
              Resource: 'execute-api:/*'
            - Action: 'execute-api:Invoke'
              Condition:
                StringNotEquals:
                  'aws:SourceVpce': !Ref EndpointID
              Effect: Deny
              Principal: '*'
              Resource: 'execute-api:/*'
        Version: 2012-10-17		 	 	 
  PrivateBasePathMapping:
    Type: AWS::ApiGateway::BasePathMappingV2
    DependsOn:
      - PrivateApiStage
    Properties:
      BasePath: prod
      DomainNameArn: !GetAtt PrivateDomainName.DomainNameArn
      RestApiId: !Ref PrivateApi
      Stage: prod
  DomainNameAccessAssociation: 
    Type: AWS::ApiGateway::DomainNameAccessAssociation
    Properties:
      DomainNameArn: !GetAtt PrivateDomainName.DomainNameArn
      AccessAssociationSource: !Ref EndpointID
      AccessAssociationSourceType: VPCE
```