

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

------