Tutorial: creazione e invocazione di un nome di dominio personalizzato per API private
In questo tutorial creerai un nome di dominio personalizzato privato da invocare in un VPC nel tuo account. A questo scopo, sei il provider e il consumatore di API. Per completare questo tutorial devi disporre di un'API privata e di un endpoint VPC. Se disponi di un endpoint VPC che utilizzi per accedere a un nome di dominio personalizzato pubblico, non utilizzarlo per questo tutorial o per creare associazioni di accesso a nomi di dominio.
Passaggio 1: creare un nome di dominio personalizzato privato
Puoi creare un nome di dominio personalizzato privato specificando il nome di dominio, il certificato ACM e la policy per il servizio execute-api per controllare quali endpoint VPC possono invocarlo.
- AWS Management Console
-
Per creare un nome di dominio personalizzato privato
Accedere alla console API Gateway all'indirizzo https://console.aws.amazon.com/apigateway.
-
Nel pannello di navigazione principale, scegli Nomi di dominio personalizzati.
-
Scegli Aggiungi nome di dominio.
-
In Domain name (Nome di dominio), immettere un nome di dominio.
Il certificato ACM deve coprire questo nome di dominio, ma non è necessario che il nome di dominio sia univoco.
-
Seleziona Privato.
Per Modalità di routing, scegli Solo mappature API.
-
Per Certificato ACM, seleziona un certificato.
Scegli Aggiungi nome di dominio.
Gateway API effettua il provisioning di un nome di dominio con una policy deny per tutte le risorse. Questa è la policy delle risorse per il servizio execute-api. Devi aggiornare questa policy delle risorse per concedere l'accesso agli endpoint VPC per invocare il tuo nome di dominio personalizzato privato.
Per aggiornare la policy delle risorse
-
Scegli la scheda Policy delle risorse, quindi scegli Modifica policy delle risorse.
-
Inserisci la policy delle risorse seguente nell'editor di codice. Sostituisci l'endpoint VPC vpce-abcd1234efg con il tuo ID endpoint 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"
}
}
}
]
}
Scegli Salva modifiche.
- AWS CLI
Quando crei un nome di dominio personalizzato privato utilizzando la AWS CLI, fornisci una policy delle risorse affinché il servizio execute-api conceda l'accesso agli endpoint VPC per invocare il tuo nome di dominio personalizzato privato, utilizzando il parametro --policy
file://policy.json. È possibile modificare questa policy in un secondo momento.
In questo esempio si collega la seguente policy di risorse come policy caricando i parametri da un file. Copia e salva questo file come policy.json. Questa policy consente solo il traffico in entrata verso un nome di dominio personalizzato privato dall'endpoint 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"
}
}
}
]
}
Il seguente comando create-domain-name crea un nome di dominio personalizzato privato:
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
L'output sarà simile al seguente:
{
"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": "..."
}
Passaggio 2: creare una mappatura del percorso di base per mappare l'API privata al nome di dominio personalizzato privato
Dopo aver creato il nome di dominio personalizzato privato, mappa un'API privata a tale nome. Con una mappatura del percorso di base, un'API è accessibile tramite la combinazione di nome di dominio personalizzato privato e percorso di base associato. È consigliabile usare un singolo nome di dominio personalizzato privato come nome host di più API.
Tutti i provider di API devono creare una mappatura del percorso di base, anche se non hai intenzione di invocare la tua API. Inoltre, devi concedere l'accesso agli endpoint VPC per invocare qualsiasi API privata mappata al tuo nome di dominio personalizzato privato.
- AWS Management Console
Per creare una mappatura del percorso di base
Accedere alla console API Gateway all'indirizzo https://console.aws.amazon.com/apigateway.
-
Nel pannello di navigazione principale, scegli Nomi di dominio personalizzati.
Scegli un nome di dominio personalizzato privato.
Nella scheda Mappature API scegli Configura mappature.
Scegliere Add new mapping (Aggiungi nuova mappatura).
Immettere un'API, uno Stage (Fase)e, facoltativamente, un Path (Percorso).
Selezionare Salva.
- AWS CLI
Il seguente comando create-base-path-mapping crea una mappatura tra un'API privata e un nome di dominio personalizzato privato:
aws apigateway create-base-path-mapping \
--domain-name-id abcd1234 \
--domain-name 'private.example.com' \
--rest-api-id a1b2c3 \
--stage prod \
--base-path v1
L'output sarà simile al seguente.
{
"basePath": "v1",
"restApiId": "a1b2c3",
"stage": "prod"
}
Per una maggiore flessibilità su come instradare il traffico alle API, è possibile modificare la modalità di routing in ROUTING_RULE_ONLY o ROUTING_RULE_THEN_API_MAPPING e creare una regola di routing. Per ulteriori informazioni, consulta Invio del traffico alle API tramite il nome di dominio personalizzato in Gateway API.
Passaggio 3: creare un'associazione di accesso al nome di dominio tra il nome di dominio personalizzato e un endpoint VPC
A questo punto, creerai un'associazione di accesso al nome di dominio tra il nome di dominio personalizzato privato e l'endpoint VPC. L'endpoint VPC utilizza l'associazione di accesso al nome di dominio per invocare il nome di dominio personalizzato privato mentre è isolato dalla rete Internet pubblica.
- AWS Management Console
-
Per creare un'associazione di accesso al nome di dominio
Accedere alla console API Gateway all'indirizzo https://console.aws.amazon.com/apigateway.
-
Nel pannello di navigazione principale, scegli Nomi di dominio personalizzati.
-
Scegli un nome di dominio personalizzato privato.
-
Nella scheda Condivisione delle risorse, per le Associazioni di accesso ai nomi di dominio, scegli Crea associazione di accesso al nome di dominio.
-
In ARN del nome di dominio digita il tuo nome di dominio.
-
In ID endpoint VPC seleziona l'ID endpoint VPC a cui hai fornito l'accesso nel passaggio 1.
-
Scegli Associazione di accesso al nome di dominio.
Puoi anche creare l'associazione di accesso al nome di dominio utilizzando la pagina Associazioni di accesso ai nomi di dominio della console.
- AWS CLI
Il seguente comando create-domain-name-access-association crea un'associazione di accesso al nome di dominio tra il nome di dominio personalizzato privato e l'endpoint 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
L'output sarà simile al seguente.
{
"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"
}
Affinché l'associazione di accesso al nome di dominio sia pronta sono necessari circa 15 minuti. Durante l'attesa, puoi eseguire i passaggi seguenti.
Passaggio 4: creare una zona ospitata Route 53
Dopo aver aggiornato la policy delle risorse e associato il nome di dominio personalizzato privato all'endpoint VPC, crea una zona ospitata privata in Route 53 per risolvere il nome di dominio personalizzato. Una zona ospitata è un container che contiene informazioni su come instradare il traffico per un dominio all'interno di uno o più VPC senza esporre le risorse su Internet. Per ulteriori informazioni, consulta Utilizzo delle zone ospitate private.
- AWS Management Console
-
Per utilizzare la AWS Management Console, consulta Creating a private hosted zone nella Guida per gli sviluppatori di Amazon Route 53.
Per Nome, usa il tuo nome di dominio personalizzato privato. Per ID VPC, usa il VPC contenente l'endpoint VPC utilizzato nei passaggi precedenti.
- AWS CLI
Il seguente comando create-hosted-zone crea una zona ospitata privata:
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
L'output contiene l'ID della zona ospitata. L'ID della zona ospitata viene utilizzato nei passaggi seguenti.
Passaggio 5: creare un record DNS di Route 53
Dopo aver creato la zona ospitata, devi creare un record per risolvere il tuo nome di dominio personalizzato privato. Userai l'ID della zona ospitata che hai creato nel passaggio precedente. In questo esempio viene creato un tipo di record A. Se utilizzi IPv6 per il tuo endpoint VPC, crea un tipo di record AAAA. Se utilizzi dualstack per il tuo endpoint VPC, crea un tipo di record sia AAAA che A.
- AWS Management Console
-
Per utilizzare la AWS Management Console, consulta Routing traffic to an Amazon API Gateway API by using your domain name.
Usa Creazione rapida e attiva Alias. Per l'endpoint, utilizza il nome DNS dell'endpoint VPC.
- AWS CLI
-
Per configurare i record DNS in modo da mappare il nome di dominio personalizzato privato al relativo nome host dell'ID della zona ospitata, devi creare un file JSON contenente la configurazione per configurare un record DNS per il nome di dominio privato.
Il seguente setup-dns-record.json mostra come creare un record A DNS per mappare un nome di dominio personalizzato privato al relativo nome host privato. Fornisci il DNSName del tuo ID DNS VPC e l'ID della zona ospitata che hai creato nel passaggio precedente.
{
"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
}
}
}
]
}
Il seguente comando change-resource-record-sets crea un record DNS per il nome di dominio personalizzato privato:
aws route53 change-resource-record-sets \
--hosted-zone-id ZABCDEFG1234 \
--change-batch file://path/to/your/setup-dns-record.json
Sostituisci hosted-zone-id con l'ID della zona ospitata di Route 53 del record DNS impostato nel tuo account. Il valore del parametro change-batch punta a un file JSON.
Se non intendi invocare il tuo nome di dominio personalizzato privato, dopo aver verificato che il nome di dominio personalizzato privato funzioni, puoi eliminare queste risorse.
Passaggio 6: invocare il nome di dominio personalizzato privato
Ora puoi invocare il tuo nome di dominio personalizzato privato nel tuo Account AWS. Nel tuo VPC, usa il seguente comando curl per accedere al tuo nome di dominio personalizzato privato.
curl https://private.example.com/v1
Per ulteriori informazioni su altri modi per invocare la tua API privata, consulta Invocazione di un'API privata utilizzando un nome di dominio personalizzato.
Passaggio 7: eseguire l'eliminazione
Per evitare costi inutili, elimina l'associazione tra l'endpoint VPC e il nome di dominio personalizzato privato, quindi elimina il nome di dominio personalizzato privato.
- AWS Management Console
-
Per eliminare l'associazione di accesso al nome di dominio
Accedere alla console API Gateway all'indirizzo https://console.aws.amazon.com/apigateway.
-
Nel pannello di navigazione principale, scegli Associazioni di accesso ai nomi di dominio.
-
Seleziona l'associazione di accesso al nome di dominio, quindi scegli Elimina.
-
Conferma la tua scelta, quindi scegli Elimina.
Dopo aver eliminato l'associazione di accesso al nome di dominio, puoi eliminare il tuo nome di dominio personalizzato privato.
Per eliminare il nome di dominio personalizzato privato
Accedere alla console API Gateway all'indirizzo https://console.aws.amazon.com/apigateway.
-
Nel pannello di navigazione principale, scegli Nomi di dominio personalizzati.
-
Scegli il tuo nome di dominio personalizzato privato.
-
Scegliere Delete (Elimina).
-
Conferma la tua scelta, quindi scegli Elimina.
Se necessario, puoi anche eliminare il tuo endpoint VPC. Per ulteriori informazioni, consulta Eliminazione di un endpoint dell'interfaccia.
- AWS CLI
Per eliminare
-
Il seguente comando delete-access-association elimina l'associazione di accesso al nome di dominio:
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
-
Il seguente comando delete-domain-name elimina il nome di dominio personalizzato privato. Questo comando rimuove anche tutte le mappature dei percorsi di base.
aws apigateway delete-domain-name \
--domain-name test.private.com \
--domain-name-id abcd1234
Se necessario, puoi anche eliminare il tuo endpoint VPC. Per ulteriori informazioni, consulta Eliminazione di un endpoint dell'interfaccia.
Best practice
Di seguito sono riportate le best practice consigliate per la creazione di un nome di dominio personalizzato privato:
-
Si utilizza la mappatura percorso di base o le regole di routing per inviare il traffico da un nome di dominio privato personalizzato a più API private.
-
Quando un endpoint VPC non ha più bisogno di accedere a un nome di dominio personalizzato privato, elimina l'associazione. Inoltre, rimuovi l'endpoint VPC da execute-api per il servizio policy per il dominio personalizzato privato.
-
Configura almeno due zone di disponibilità per endpoint VPC.
-
Disabilita l'endpoint predefinito. È consigliabile disabilitare l'endpoint predefinito per consentire ai consumatori dell'API di chiamare l'API solo dal nome di dominio personalizzato. Per ulteriori informazioni, consulta Disabilitazione dell'endpoint predefinito per REST API.
-
È consigliabile effettuare il provisioning di una zona ospitata privata di Route 53 e di un record di tipo A durante la configurazione del nome di dominio personalizzato privato. Se non hai intenzione di invocare il tuo nome di dominio personalizzato privato, puoi eliminare queste risorse in un secondo momento.