

# Proveedor de API: compartir su nombre de dominio personalizado privado mediante la AWS CLI de API Gateway
<a name="apigateway-private-custom-domains-provider-share-cli"></a>

Puede compartir un nombre de dominio personalizado privado mediante la AWS CLI de API Gateway, pero le recomendamos que utilice AWS RAM para reducir la sobrecarga operativa. Para obtener instrucciones sobre cómo usar AWS RAM para compartir su nombre de dominio personalizado privado, consulte [Proveedor de API: compartir su nombre de dominio personalizado privado mediante AWS RAM](apigateway-private-custom-domains-provider-share.md).

Para compartir un nombre de dominio personalizado privado mediante la AWS CLI de API Gateway, debe conceder a otra Cuentas de AWS acceso para crear asociaciones de acceso a nombres de dominio e invocar su nombre de dominio personalizado privado. Para ello, actualice la `managementPolicy` del servicio API Gateway Management y la `policy` del servicio `execute-api` de su nombre de dominio personalizado privado. También debe conceder acceso al punto de conexión de VPC del consumidor de API en la política de recursos para cualquier API privada asignada a su nombre de dominio personalizado privado.

El consumidor de API aún deberá crear una asociación de acceso a nombres de dominio en su propia cuenta, entre su punto de conexión de VPC y su nombre de dominio personalizado privado. Usted no puede hacerlo en su nombre.

## Concesión de acceso a su nombre de dominio personalizado privado
<a name="apigateway-private-custom-domains-provider-share-cli-allow"></a>

**Para conceder acceso a su nombre de dominio personalizado privado**

1. Para actualizar la `managementPolicy` del servicio API Gateway Management, cree un archivo JSON que contenga la operación de parche para actualizar la política. El siguiente `patch-managementPolicy.json` sustituye la actual `managementPolicy` por una política de ejemplo que concede a las Cuentas de AWS 111122223333 y 444455556666 acceso para crear asociaciones de acceso a nombres de dominio con el nombre de dominio 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\"}]}"
   }]
   ```

    El siguiente comando [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html) permite actualizar la `managementPolicy` mediante `patch-managementPolicy.json`. 

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

   Una vez que conceda el acceso, debe notificar al consumidor de API que puede formar la asociación de acceso a nombres de dominio. Si utiliza AWS RAM, AWS RAM llevará a cabo este paso en su nombre.

1. Para actualizar la `policy` del servicio `execute-api`, debe crear un archivo JSON que contenga la operación de parche para actualizar la política. El siguiente `patch-policy.json` sustituye la actual `policy` por una política de ejemplo que concede acceso a dos puntos de conexión de VPC para invocar el nombre de dominio 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\"]}}}]}"
   }]
   ```

    Utilice el siguiente comando [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html) para actualizar la `policy` mediante `patch-policy.json`. 

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

## Denegación del acceso a su nombre de dominio personalizado privado
<a name="apigateway-private-custom-domains-provider-share-cli-deny"></a>

Para dejar de compartir su nombre de dominio personalizado privado, debe rechazar la asociación de acceso a nombres de dominio entre su nombre de dominio personalizado privado y el punto de conexión de VPC del consumidor de API.

**Para denegar el acceso a su nombre de dominio personalizado privado**

1. El siguiente comando `reject-domain-name-access-association` rechaza la asociación de acceso a nombres de dominio.

   ```
   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 el `patch-managementPolicy.json` para eliminar el acceso a la cuenta del proveedor de API a fin de crear una asociación de acceso a nombres de dominio con su nombre de dominio personalizado privado. El siguiente `patch-managementPolicy.json` elimina una cuenta de la `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\"}]}"
   }]
   ```

   El siguiente comando [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html) permite actualizar la `managementPolicy` mediante `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 el `patch-policy.json` para eliminar el acceso del punto de conexión de VPC del proveedor de API para invocar su nombre de dominio personalizado privado. El siguiente `patch-policy.json` elimina el ID del punto de conexión de VPC de la `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\"}}}]}"
   }]
   ```

   El siguiente comando [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html) permite actualizar la `policy` mediante `patch-policy.json`. 

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

## Políticas de ejemplo utilizadas en este procedimiento
<a name="apigateway-private-custom-domains-provider-share-cli-policies"></a>

En la siguiente sección se muestran las políticas de ejemplo que se utilizan en el procedimiento anterior.

La siguiente política de ejemplo corresponde a la `managementPolicy` del servicio Amazon API Gateway Management. Esta política concede a las Cuentas de AWS 111122223333 y 444455556666 acceso para crear asociaciones de acceso a nombres de dominio con el nombre de dominio 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"
        }
    ]
}
```

------

La siguiente política de ejemplo corresponde a la `policy` del servicio `execute-api`. Esta política concede a los puntos de conexión de VPC `vpce-abcd1234` y `vpce-xyzz0000` acceso para invocar el nombre de dominio 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"
                    ]
                }
            }
        }
    ]
}
```

------