

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Creazione di un'API privata
<a name="apigateway-private-api-create"></a>

Prima di creare un'API privata, devi creare un endpoint VPC per Gateway API. Quindi devi creare la tua API privata e collegarvi una policy delle risorse. Facoltativamente, puoi associare il tuo endpoint VPC alla tua API privata per semplificare l'invocazione dell'API. Infine, implementa la tua API.

Nelle seguenti procedure viene descritto come effettuare questa operazione. Puoi creare un'API REST privata utilizzando AWS CLI o un AWS SDK. Console di gestione AWS

## Prerequisiti
<a name="apigateway-private-api-create-interface-vpc-prerequisites"></a>

Per eseguire questi passaggi, devi disporre di un VPC completamente configurato. Per informazioni su come creare un VPC, consulta [Creare solo un VPC](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html#create-vpc-only) nella *Guida per l'utente di Amazon VPC*. Per seguire tutti i passaggi consigliati durante la creazione del VPC, abilita il DNS privato. In questo modo puoi invocare la tua API all'interno di un VPC senza dover passare l'host o l'intestazione `x-apigw-api-id`.

Per abilitare il DNS privato, è necessario che gli attributi `enableDnsSupport` e `enableDnsHostnames` del VPC siano impostati su `true`. Per ulteriori informazioni, consulta [DNS Support in Your VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support) e [Updating DNS Support for Your VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-updating).

## Passaggio 1: creare un endpoint VPC per Gateway API nel VPC
<a name="apigateway-private-api-create-interface-vpc-endpoint"></a>

La procedura seguente descrive come creare un endpoint VPC per Gateway API. Per creare un endpoint VPC per API Gateway, devi specificare il `execute-api` dominio Regione AWS in cui creare l'API privata. Il dominio `execute-api` è il servizio del componente Gateway API per l'esecuzione dell'API.

Quando crei l'endpoint VPC per Gateway API, devi specificare le impostazioni DNS. Se disattivi il DNS privato, puoi accedere all'API solo tramite DNS pubblico. Per ulteriori informazioni, consulta [Problema: non riesco a connettermi alla mia API pubblica da un endpoint VPC di Gateway API](#apigateway-private-api-troubleshooting-public-access).

------
#### [ Console di gestione AWS ]

**Per creare un endpoint VPC dell'interfaccia per Gateway API**

1. Accedi Console di gestione AWS e apri la console Amazon VPC all'indirizzo. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)

1. Dal riquadro di navigazione, in **Cloud privato virtuale**, scegli **Endpoint**.

1. Seleziona **Crea endpoint**.

1. (Facoltativo) Per **Tag nome**, immetti un nome che consenta di identificare l'endpoint VPC.

1. Per **Service category (Categoria servizio)**, scegli **AWS services**.

1. In **Servizi**, sulla barra di ricerca, inserisci **execute-api**. Quindi, scegli l'endpoint del servizio API Gateway in Regione AWS cui creerai la tua API. Il nome del servizio deve essere simile a `com.amazonaws.us-east-1.execute-api` e il **Tipo** deve essere **Interfaccia**.

1. Per **VPC**, scegliere il VPC in cui si desidera creare l'endpoint.

1. (Facoltativo) Per disattivare **Abilita nome DNS privato**, scegli **Impostazioni aggiuntive** e quindi deseleziona **Abilita nome DNS privato**.

1. In **Sottoreti**, scegli le zone di disponibilità in cui hai creato le interfacce di rete dell'endpoint. Per migliorare la disponibilità della tua API, scegli più sottoreti.

1. In **Security group (Gruppo di sicurezza)**, selezionare il gruppo di sicurezza da associare alle interfacce di rete dell'endpoint VPC.

   Il gruppo di sicurezza scelto deve essere impostato in modo da consentire il traffico HTTPS in entrata sulla porta TCP 443 da un range di IP nel VPC o da un altro gruppo di sicurezza nel tuo VPC.

1. Per **Policy**, esegui una delle seguenti operazioni:
   + Se non hai creato la tua API privata o non desideri configurare una policy personalizzata degli endpoint VPC, scegli **Accesso completo**.
   + Se hai già creato un'API privata e desideri configurare una policy personalizzata degli endpoint VPC, puoi inserire tale policy. Per ulteriori informazioni, consulta [Usa le policy degli endpoint VPC per uso privato APIs in API Gateway](apigateway-vpc-endpoint-policies.md).

   Puoi aggiornare la policy degli endpoint VPC dopo aver creato l'endpoint VPC. Per ulteriori informazioni, consulta [Update a VPC endpoint policy](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html#update-vpc-endpoint-policy).

1. Seleziona **Crea endpoint**.

1. Copia l'ID dell'endpoint VPC risultante, poiché potresti utilizzarlo nei passaggi successivi.

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

Il [create-vpc-endpoint](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-vpc-endpoint.html)comando seguente crea un endpoint VPC:

```
aws ec2 create-vpc-endpoint \
    --vpc-id vpc-1a2b3c4d \
    --vpc-endpoint-type Interface \
    --service-name com.amazonaws.us-east-1.execute-api \
    --subnet-ids subnet-7b16de0c \
    --security-group-id sg-1a2b3c4d
```

Copia l'ID dell'endpoint VPC risultante, poiché potresti utilizzarlo nei passaggi successivi.

------

## Fase 2: creare un'API privata
<a name="apigateway-private-api-create-using-console"></a>

Dopo aver creato l'endpoint VPC, creerai una REST API privata. La procedura seguente mostra come creare un'API privata. 

------
#### [ Console di gestione AWS ]

**Per creare un'API privata**

1. Accedi alla console API Gateway all'indirizzo [https://console.aws.amazon.com/apigateway.](https://console.aws.amazon.com/apigateway)

1. Seleziona **Create API** (Crea API).

1. In **API REST**, scegliere **Crea**.

1. In **Nome**, immetti un nome.

1.  (Facoltativo) In **Descrizione**, immetti una descrizione. 

1. Per **Tipo di endpoint API** scegli **Privato**.

1. (Facoltativo) Per l'endpoint **VPC IDs, inserisci un ID endpoint** VPC.

   Se associ un ID endpoint VPC alla tua API privata, puoi invocarla dall'interno del VPC senza sostituire un'intestazione `Host` o passare un `x-apigw-api-id header`. Per ulteriori informazioni, consulta [(Facoltativo) Associazione o dissociazione di un endpoint VPC da una REST API privata](#associate-private-api-with-vpc-endpoint).

1. Per **Tipo di indirizzo IP**, scegli **Dualstack**.

1. Seleziona **Create API** (Crea API).

 Dopo aver completato i passaggi precedenti, puoi seguire le istruzioni indicate alla sezione [Nozioni di base sulla console REST API](getting-started-rest-new-console.md) per configurare i metodi e le integrazioni per l'API. Per distribuire l'API, segui il passaggio 3 e collega una policy delle risorse all'API. 

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

Il [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html)comando seguente crea un'API privata:

```
aws apigateway create-rest-api \
        --name 'Simple PetStore (AWS CLI, Private)' \
        --description 'Simple private PetStore API' \
        --region us-west-2 \
        --endpoint-configuration '{ "types": ["PRIVATE"], "ipAddressType": "dualstack" }'
```

In caso di esito positivo, la chiamata restituisce un output simile al seguente:

```
{
    "createdDate": "2017-10-13T18:41:39Z",
    "description": "Simple private PetStore API",
    "endpointConfiguration": {
        "types": [
            "PRIVATE"
        ],
        "ipAddressType": "dualstack"
    },
    "id": "0qzs2sy7bh",
    "name": "Simple PetStore (AWS CLI, Private)"
}
```

 Dopo aver completato i passaggi precedenti, puoi seguire le istruzioni indicate alla sezione [Tutorial: crea un'API REST utilizzando AWS SDKs o AWS CLI](api-gateway-create-api-cli-sdk.md) per configurare i metodi e le integrazioni per l'API. Per distribuire l'API, segui il passaggio 3 e collega una policy delle risorse all'API. 

------
#### [ SDK JavaScript v3 ]

L'esempio seguente mostra come creare un'API privata utilizzando l' AWS SDK per la JavaScript versione 3:

```
import {APIGatewayClient, CreateRestApiCommand} from "@aws-sdk/client-api-gateway";
const apig = new APIGatewayClient({region:"us-east-1"});

const input = { // CreateRestApiRequest
  name: "Simple PetStore (JavaScript v3 SDK, private)", // required
  description: "Demo private API created using the AWS SDK for JavaScript v3",
  version: "0.00.001",
  endpointConfiguration: { // EndpointConfiguration
    types: [ "PRIVATE"],
  },  
};

export const handler = async (event) => {
const command = new CreateRestApiCommand(input);
try {
  const result = await apig.send(command);
  console.log(result);
} catch (err){
  console.error(err)
 }
};
```

In caso di esito positivo, la chiamata restituisce un output simile al seguente:

```
{
  apiKeySource: 'HEADER',
  createdDate: 2024-04-03T17:56:36.000Z,
  description: 'Demo private API created using the AWS SDK for JavaScript v3',
  disableExecuteApiEndpoint: false,
  endpointConfiguration: { types: [ 'PRIVATE' ] },
  id: 'abcd1234',
  name: 'Simple PetStore (JavaScript v3 SDK, private)',
  rootResourceId: 'efg567',
  version: '0.00.001'
}
```

 Dopo aver completato i passaggi precedenti, puoi seguire le istruzioni indicate alla sezione [Tutorial: crea un'API REST utilizzando AWS SDKs o AWS CLI](api-gateway-create-api-cli-sdk.md) per configurare i metodi e le integrazioni per l'API. Per distribuire l'API, segui il passaggio 3 e collega una policy delle risorse all'API. 

------
#### [ Python SDK ]

L'esempio seguente mostra come creare un'API privata utilizzando l' AWS SDK per Python:

```
import json
import boto3
import logging

logger = logging.getLogger()
apig = boto3.client('apigateway')

def lambda_handler(event, context):
    try:
      result = apig.create_rest_api(
      name='Simple PetStore (Python SDK, private)',
      description='Demo private API created using the AWS SDK for Python',
      version='0.00.001',
      endpointConfiguration={
          'types': [
             'PRIVATE',
          ],
      },
      )
    except botocore.exceptions.ClientError as error:
            logger.exception("Couldn't create private API %s.", error)
            raise
    attribute=["id", "name", "description", "createdDate", "version", "apiKeySource", "endpointConfiguration"]
    filtered_data ={key:result[key] for key in attribute}
    result = json.dumps(filtered_data, default=str, sort_keys='true')
    return result
```

In caso di esito positivo, la chiamata restituisce un output simile al seguente:

```
"{\"apiKeySource\": \"HEADER\", \"createdDate\": \"2024-04-03 17:27:05+00:00\", \"description\": \"Demo private API created using the AWS SDK for \", \"endpointConfiguration\": {\"types\": [\"PRIVATE\"]}, \"id\": \"abcd1234\", \"name\": \"Simple PetStore (Python SDK, private)\", \"version\": \"0.00.001\"}"
```

 Dopo aver completato i passaggi precedenti, puoi seguire le istruzioni indicate alla sezione [Tutorial: crea un'API REST utilizzando AWS SDKs o AWS CLI](api-gateway-create-api-cli-sdk.md) per configurare i metodi e le integrazioni per l'API. Per distribuire l'API, segui il passaggio 3 e collega una policy delle risorse all'API. 

------

## Passaggio 3: impostare una policy delle risorse per un'API privata.
<a name="apigateway-private-api-set-up-resource-policy"></a>

La tua attuale API privata è inaccessibile a tutti. VPCs Utilizza una politica delle risorse per concedere a te VPCs e agli endpoint VPC l'accesso ai tuoi endpoint privati. APIs Puoi concedere l'accesso a un endpoint VPC in qualsiasi account. AWS 

La tua policy delle risorse deve contenere le condizioni `aws:SourceVpc` o `aws:SourceVpce` per limitare l'accesso. Ti consigliamo di identificare endpoint specifici VPCs e VPC e di non creare una politica delle risorse che consenta l'accesso a tutti gli endpoint VPCs VPC e a tutti gli endpoint.

La procedura seguente descrive come collegare una policy delle risorse all'API.

------
#### [ Console di gestione AWS ]

1. Accedi alla console API Gateway all'indirizzo [https://console.aws.amazon.com/apigateway.](https://console.aws.amazon.com/apigateway)

1. Scegliere una REST API.

1. Nel riquadro di navigazione principale, scegli **Policy delle risorse**.

1. Scegli **Crea policy**.

1. Scegli **Seleziona un modello** e quindi **VPC di origine**.

1. Sostituisci `{{vpcID}}` (incluse le parentesi graffe) con l’ID VPC.

1. Scegli **Save changes** (Salva modifiche).

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

Il [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html)comando seguente allega una politica delle risorse a un'API esistente:

```
aws apigateway update-rest-api \
    --rest-api-id a1b2c3 \
    --patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"'
```

------

Può essere utile anche controllare quali risorse hanno accesso al tuo endpoint VPC. Per controllare quali risorse hanno accesso all'endpoint VPC, collega una policy di endpoint all'endpoint VPC. Per ulteriori informazioni, consulta [Usa le policy degli endpoint VPC per uso privato APIs in API Gateway](apigateway-vpc-endpoint-policies.md).

## (Facoltativo) Associazione o dissociazione di un endpoint VPC da una REST API privata
<a name="associate-private-api-with-vpc-endpoint"></a>

Quando si associa un endpoint VPC all'API privata, Gateway API genera un nuovo record DNS alias di Route 53. Puoi usare questo record per richiamare il tuo nome privato APIs proprio come fai con quello pubblico APIs senza sovrascrivere un'`Host`intestazione o passare un'intestazione. `x-apigw-api-id`

L'URL di base generato è nel formato seguente:

```
https://{rest-api-id}-{vpce-id}.execute-api.{region}.amazonaws.com/{stage}
```

------
#### [ Associate a VPC endpoint (Console di gestione AWS) ]

Puoi associare un endpoint VPC alla tua API privata durante o dopo la sua creazione. La procedura seguente spiega come associare un endpoint VPC a un'API creata in precedenza. 

**Per associare un endpoint VPC a un'API privata**

1. Accedi alla console API Gateway all'indirizzo [https://console.aws.amazon.com/apigateway.](https://console.aws.amazon.com/apigateway)

1. Scegli l'API privata.

1. Nel riquadro di navigazione principale, scegli **Policy delle risorse**.

1. Modifica la policy delle risorse per consentire le chiamate dall'endpoint VPC aggiuntivo.

1. Nel riquadro di navigazione principale, scegli **Impostazioni API**.

1. Nella sezione **Dettagli API**, scegli **Modifica**.

1. Per endpoint **VPC IDs, seleziona un endpoint** VPC aggiuntivo. IDs

1. Scegli **Save** (Salva).

1. Implementa nuovamente l'API per rendere effettive le modifiche.

------
#### [ Dissociate a VPC endpoint (Console di gestione AWS) ]

**Per annullare l'associazione di endpoint VPC da una REST API privata**

1. Accedi alla console API Gateway all'indirizzo [https://console.aws.amazon.com/apigateway.](https://console.aws.amazon.com/apigateway)

1. Scegli l'API privata.

1. Nel riquadro di navigazione principale, scegli **Policy delle risorse**.

1. Modifica la policy delle risorse per rimuovere le menzioni dell'endpoint VPC di cui desideri annullare l'associazione all'API privata.

1. Nel riquadro di navigazione principale, scegli **Impostazioni API**.

1. Nella sezione **Dettagli API**, scegli **Modifica**.

1. Per l'**endpoint VPC IDs**, scegli la **X** per dissociare l'endpoint VPC.

1. Scegli **Save** (Salva).

1. Implementa nuovamente l'API per rendere effettive le modifiche.

------
#### [ Associate a VPC endpoint (AWS CLI) ]

Il [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html)comando seguente associa gli endpoint VPC al momento della creazione dell'API:

```
aws apigateway create-rest-api \
    --name Petstore \
    --endpoint-configuration '{ "types": ["PRIVATE"], "vpcEndpointIds" : ["vpce-0212a4ababd5b8c3e", "vpce-0393a628149c867ee"] }' \
    --region us-west-2
```

L'output sarà simile al seguente:

```
{
    "apiKeySource": "HEADER",
    "endpointConfiguration": {
        "types": [
            "PRIVATE"
        ],
        "vpcEndpointIds": [
            "vpce-0212a4ababd5b8c3e",
            "vpce-0393a628149c867ee"
        ]
    },
    "id": "u67n3ov968",
    "createdDate": 1565718256,
    "name": "Petstore"
}
```

Il [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html)comando seguente associa gli endpoint VPC a un'API già creata:

```
aws apigateway update-rest-api \
    --rest-api-id u67n3ov968 \
    --patch-operations "op='add',path='/endpointConfiguration/vpcEndpointIds',value='vpce-01d622316a7df47f9'" \
    --region us-west-2
```

L'output sarà simile al seguente:

```
{
    "name": "Petstore",
    "apiKeySource": "1565718256",
    "tags": {},
    "createdDate": 1565718256,
    "endpointConfiguration": {
        "vpcEndpointIds": [
            "vpce-0212a4ababd5b8c3e",
            "vpce-0393a628149c867ee",
            "vpce-01d622316a7df47f9"
        ],
        "types": [
            "PRIVATE"
        ]
    },
    "id": "u67n3ov968"
}
```

Implementa nuovamente l'API per rendere effettive le modifiche.

------
#### [ Disassociate a VPC endpoint (AWS CLI) ]

Il [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html)comando seguente dissocia un endpoint VPC da un'API privata:

```
aws apigateway update-rest-api \
    --rest-api-id u67n3ov968 \
    --patch-operations "op='remove',path='/endpointConfiguration/vpcEndpointIds',value='vpce-0393a628149c867ee'" \
    --region us-west-2
```

L'output sarà simile al seguente:

```
{
    "name": "Petstore",
    "apiKeySource": "1565718256",
    "tags": {},
    "createdDate": 1565718256,
    "endpointConfiguration": {
        "vpcEndpointIds": [
            "vpce-0212a4ababd5b8c3e",
            "vpce-01d622316a7df47f9"
        ],
        "types": [
            "PRIVATE"
        ]
    },
    "id": "u67n3ov968"
}
```

Implementa nuovamente l'API per rendere effettive le modifiche.

------

## Passaggio 4: implementare un'API privata
<a name="apigateway-private-api-deploy-using-console"></a>

Per implementare la tua API, crea un'implementazione API e associala a una fase. La procedura seguente mostra come implementare la tua API privata.

------
#### [ Console di gestione AWS ]

**Per distribuire un'API privata**

1. Scegliere l'API.

1. Seleziona **Deploy API (Distribuisci API)**.

1. In **Fase**, seleziona **Nuova fase**.

1. Per **Nome fase** immetti il nome di una fase.

1. (Facoltativo) In **Descrizione**, immetti una descrizione.

1. Seleziona **Implementa**.

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

Il comando [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html) seguente implementa un’API privata:

```
aws apigateway create-deployment --rest-api-id a1b2c3 \ 
  --stage-name test \
  --stage-description 'Private API test stage' \
  --description 'First deployment'
```

------

## Risoluzione dei problemi relativi all'API privata
<a name="apigateway-private-api-troubleshooting"></a>

Di seguito sono forniti alcuni consigli per la risoluzione dei problemi relativi a errori e problemi che potrebbero verificarsi durante la creazione di un'API privata.

### Problema: non riesco a connettermi alla mia API pubblica da un endpoint VPC di Gateway API
<a name="apigateway-private-api-troubleshooting-public-access"></a>

Durante la creazione del VPC puoi configurare le impostazioni DNS. È consigliabile attivare il DNS privato per il VPC. Se decidi di disattivare il DNS privato, puoi accedere all'API solo tramite DNS pubblico.

Se abiliti il DNS privato, non puoi accedere all'endpoint predefinito di un'API pubblica di Gateway API dal tuo endpoint VPC. Puoi accedere a un'API con un nome di dominio personalizzato.

Se crei un nome di dominio personalizzato regionale utilizzi un record alias di tipo A, mentre se crei un nome di dominio personalizzato ottimizzato per l'edge non ci sono restrizioni per il tipo di record. Puoi accedere a questi server pubblici APIs con il DNS privato abilitato. Per ulteriori informazioni, consulta [Problema: non riesco a connettermi alla mia API pubblica da un endpoint VPC di Gateway API](https://repost.aws/knowledge-center/api-gateway-vpc-connections).

### Problema: la mia API restituisce `{"Message":"User: anonymous is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:us-east-1:********/****/****/"}`
<a name="apigateway-private-api-troubleshooting-principal"></a>

Nella politica delle risorse, se imposti il Principal su un AWS principale, come segue:

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/developer",
                    "arn:aws:iam::111122223333:role/Admin"
                ]
            },
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/stage/GET/pets"
            ]
        }
    ]
}
```

------

Devi utilizzare l'autorizzazione `AWS_IAM` per ogni metodo dell'API, altrimenti l'API restituirà il messaggio di errore precedente. Per ulteriori indicazioni su come attivare l'autorizzazione `AWS_IAM` per un metodo, consulta [Metodi per REST APIs in API Gateway](how-to-method-settings.md).

### Problema: non riesco a capire se il mio endpoint VPC è associato alla mia API
<a name="apigateway-private-api-troubleshooting-associate-wait-time"></a>

Se associ o dissoci un endpoint VPC dalla tua API privata, devi implementarla nuovamente. Il completamento dell'operazione di aggiornamento potrebbe richiedere alcuni minuti a causa della propagazione DNS. Durante questo periodo, l'API è disponibile, ma la propagazione DNS per il DNS appena generato URLs potrebbe essere ancora in corso. Se dopo alcuni minuti i nuovi dati non URLs vengono risolti nel DNS, ti consigliamo di ridistribuire l'API.