Consolida la generazione di URL predefiniti di Amazon S3 e il download di oggetti utilizzando un endpoint associato a indirizzi IP statici - Prontuario AWS

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à.

Consolida la generazione di URL predefiniti di Amazon S3 e il download di oggetti utilizzando un endpoint associato a indirizzi IP statici

Song Jin, Eunhye Jo e Jun Soung Lee, Amazon Web Services

Riepilogo

Questo modello semplifica l'accesso ad Amazon Simple Storage Service (Amazon S3) creando file predefiniti sicuri e personalizzati per il download di oggetti. URLs La soluzione fornisce un singolo endpoint con un dominio unico e indirizzi IP statici. È personalizzato per i clienti che richiedono il consolidamento degli endpoint API e Amazon S3 in un dominio unificato con indirizzi IP statici. Il caso d'uso prevede che gli utenti seguano una politica firewall con elenchi di indirizzi IP e domini consentiti, limitando l'accesso delle API a domini e indirizzi IP specifici.

L'architettura utilizza chiavi Servizi AWS, tra cui AWS Global Accelerator Amazon API Gateway AWS Lambda, Application Load Balancer AWS PrivateLink e Amazon S3. Questo design centralizza l'API per la generazione di endpoint predefiniti URLs e Amazon S3 in un unico dominio, collegato a un acceleratore con due indirizzi IP statici. Di conseguenza, gli utenti possono richiedere URLs e scaricare facilmente oggetti Amazon S3 predefiniti tramite un endpoint di dominio unificato con indirizzi IP statici.

Questa architettura è particolarmente vantaggiosa per i clienti con politiche o requisiti di conformità rigorosi, come quelli dei settori pubblico, medico e finanziario.

Prerequisiti e limitazioni

Prerequisiti

  • Un attivo Account AWS

  • Una zona pubblica ospitata per il tuo nome di dominio personalizzato

  • Un dominio importato in AWS Certificate Manager (ACM) in un formato Regione AWS a tua scelta

Limitazioni

  • Il nome del bucket Amazon S3 deve corrispondere al nome di dominio dell'endpoint. Questo requisito serve a garantire che l'endpoint Amazon S3 possa essere servito tramite un unico endpoint API.

  • Il nome di dominio personalizzato utilizzato in API Gateway deve essere allineato al nome di dominio del singolo endpoint API.

  • Alcuni Servizi AWS non sono disponibili in tutti. Regioni AWS Per la disponibilità regionale, vedi AWS Servizi per regione. Per endpoint specifici, consulta Endpoints and quotas del servizio e scegli il link relativo al servizio.

Architettura

Il diagramma seguente mostra l'architettura e il flusso di lavoro di destinazione per questo modello.

Componenti e flusso di lavoro per la generazione di URL predefiniti e il download di oggetti.

Il diagramma illustra il concetto e il flusso di lavoro seguenti:

  1. Un utente avvia una richiesta per generare un URL predefinito utilizzando l'endpoint personalizzato fornito tramite AWS Global Accelerator, utilizzando il nome di dominio personalizzato e gli indirizzi IP associati.

  2. Una funzione Lambda genera l'URL predefinito, che punta all'endpoint personalizzato. Risponde con un reindirizzamento 301 che contiene l'URL prefirmato generato. Tramite l'URL prefirmato reindirizzato, l'utente scarica automaticamente l'oggetto utilizzando l'endpoint personalizzato fornito tramite Global Accelerator.

I componenti dell'architettura generale per la generazione di URL predefiniti e il flusso di lavoro per il download degli oggetti sono i seguenti:

  • Fornitura di indirizzi IP statici da parte di Global Accelerator.

  • Registrazione dell'alias dell'acceleratore come record A nella zona ospitata pubblica di Amazon Route 53 con il nome di dominio personalizzato.

  • Creazione di un bucket Amazon S3 con un nome di bucket che corrisponda al nome di dominio personalizzato registrato.

  • Creazione di endpoint VPC per API Gateway e il servizio Amazon S3.

  • Configurazione di un Application Load Balancer con interfaccia interna per la connessione a Global Accelerator.

  • Assegnazione di un nome di dominio personalizzato per API Gateway con un certificato ACM allegato.

  • Implementazione di un API Gateway privato integrato con una funzione Lambda.

  • La funzione Lambda è dotata di un ruolo AWS Identity and Access Management (IAM) associato (con GetObjectautorizzazioni).

Strumenti

Servizi AWS

  • Amazon API Gateway ti aiuta a creare, pubblicare, gestire, monitorare e proteggere REST, HTTP e WebSocket APIs su qualsiasi scala.

  • Gli Application Load Balancer distribuiscono il traffico delle applicazioni in entrata su più destinazioni, come le istanze Amazon Elastic Compute Cloud (Amazon EC2), in più zone di disponibilità.

  • AWS Certificate Manager (ACM) ti aiuta a creare, archiviare e rinnovare certificati e chiavi SSL/TLS X.509 pubblici e privati che proteggono i tuoi siti Web e le tue applicazioni. AWS

  • AWS Cloud Development Kit (AWS CDK)è un framework di sviluppo software che consente di definire e fornire Cloud AWS l'infrastruttura in codice.

  • AWS Global Acceleratorè un servizio globale che supporta endpoint multipli Regioni AWS. È possibile creare acceleratori che indirizzano il traffico verso endpoint ottimali sulla AWS rete globale. Questo migliora la disponibilità e le prestazioni delle applicazioni Internet utilizzate da un pubblico globale.

  • AWS Identity and Access Management (IAM) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.

  • AWS Lambda è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.

  • AWS PrivateLinkti aiuta a creare connessioni private unidirezionali dai tuoi cloud privati virtuali (VPCs) a servizi esterni al VPC.

  • Amazon Route 53 è un servizio Web DNS altamente scalabile e disponibile.

  • Amazon Simple Storage Service (Amazon S3) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.

Altri strumenti

  • Terraform è uno strumento di infrastruttura come codice (IaC) HashiCorp che ti aiuta a creare e gestire risorse cloud e locali.

Archivio di codici

Puoi implementare questo modello utilizzando AWS CDK o Terraform in base alle tue preferenze. La sezione Epics contiene istruzioni per entrambi i metodi di distribuzione. Il codice per questo pattern è disponibile nei seguenti GitHub repository:

Best practice

  • Per migliorare la sicurezza nell'ambiente di produzione, è fondamentale implementare meccanismi di autorizzazione, come Amazon Cognito, per limitare l'accesso all'API di PresignedUrl generazione.

  • Segui il principio del privilegio minimo e concedi le autorizzazioni minime necessarie per eseguire un'attività. Per ulteriori informazioni, consulta le best practice relative alla concessione dei privilegi minimi e alla sicurezza nella documentazione IAM.

Epiche

AttivitàDescrizioneCompetenze richieste

Scegli un nome di dominio.

Scegli un nome di dominio pubblico per l'endpoint Amazon S3 unificato. Il nome di dominio viene utilizzato anche come nome del bucket Amazon S3.

Amministratore AWS, amministratore di rete

Crea una zona ospitata pubblica

Crea una zona pubblica ospitata in Amazon Route 53. Il nome di dominio deve corrispondere al nome di dominio utilizzato in API Gateway.

Amministratore AWS, amministratore di rete

Prepara un certificato SSL.

Utilizza AWS Certificate Manager (ACM) per richiedere o importare un certificato SSL per il dominio della tua applicazione web.

Amministratore AWS, amministratore di rete
AttivitàDescrizioneCompetenze richieste

Configura l'ambiente di sviluppo Terraform.

Per configurare l'ambiente di sviluppo, procedi come segue:

  1. Installa Terraform versione 1.0 o successiva.

  2. Clona il repository GitHub s3- presignedurl-staticips-endpoint-with -terraform eseguendo il seguente comando in una finestra di terminale:

    git clone https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-terraform.git

Amministratore AWS, amministratore cloud

Modifica i provider.tffile .tfvars and.

  1. Crea i .tfvars file richiesti: crea apg.tfvars file in entrambe le 2.apigw_s3_lambda directory 1.vpc_alb_ga e. Questi file conterranno i valori delle variabili specifiche dell'ambiente.

    • Per1.vpc_alb_ga/apg.tfvars, crea un file con il seguente modello:

      hcl environment_name = "test" domain = "your-domain.com" s3_bucket_prefix = "your-bucket-prefix" aws_region = "ap-northeast-2" # Change to your preferred region
    • Per 2.apigw_s3_lambda/apg.tfvars esempio, crea un file con il seguente modello (dovrai aggiornarlo vpc_id dopo aver completato il passaggio 1):

      hcl vpc_id = "vpc-xxxxxxxxx" # Update this with the VPC ID output from step 1 environment_name = "test" domain = "your-domain.com" s3_bucket_prefix = "your-bucket-prefix" aws_region = "ap-northeast-2" # Change to your preferred region
  2. Modifica i provider.tf file: in entrambe le 2.apigw_s3_lambda cartelle 1.vpc_alb_ga e, modifica i provider.tf file in modo che corrispondano alla AWS configurazione locale:

    hcl provider "aws" { region = "ap-northeast-2" # Change to your preferred region profile = "apg" # Change to your AWS profile name }

Tieni presente quanto segue:

  • Sostituisci i valori segnaposto nei .tfvars file con i tuoi valori effettivi.

  • Dopo aver completato la prima implementazione di Terraform (1.vpc_alb_ga), aggiorna il vpc_id valore 2.apigw_s3_lambda/apg.tfvars con l'ID VPC dall'output.

  • Assicurati che il nome AWS del tuo profilo nel provider.tf file corrisponda a un profilo esistente nel file~/.aws/credentials.

  • Il valore del dominio deve corrispondere al dominio della zona ospitata di Route 53.

  • Il dominio s3_bucket_prefix combinato con formerà il nome del bucket Amazon S3 (ad esempio,). your-bucket-prefix.your-domain.com

  • In caso di modificaaws_region, potrebbe essere necessario aggiornare anche le zone di disponibilità codificate nei main.tf file in modo che corrispondano a quelle scelte. Regione AWS

Amministratore AWS, amministratore cloud

Fornisci risorse di rete.

Per effettuare il provisioning delle risorse di rete, esegui i seguenti comandi:

cd ./2.vpc_alb_ga terraform init terraform plan --var-file=apg.tfvars terraform apply --var-file=apg.tfvars

Durante l'esecuzione del apply comando, digitate yes quando richiesto.

Amministratore AWS, amministratore cloud

Esegui il provisioning di API Gateway, Amazon S3 e Lambda.

Per effettuare il provisioning delle risorse di rete, utilizza i seguenti comandi:

cd ./2.apigw_s3_lambda terraform init terraform plan --var-file=apg.tfvars terraform apply --var-file=apg.tfvars
Amministratore AWS, amministratore cloud
AttivitàDescrizioneCompetenze richieste

Configura l'ambiente di AWS CDK sviluppo.

Per configurare l'ambiente di sviluppo, procedi come segue:

  1. Installa il AWS CDK.

  2. Clona il repository GitHub s3- presignedurl-staticips-endpoint-with -cdk eseguendo il seguente comando in una finestra di terminale:

    git clone https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-cdk.git

Amministratore AWS, amministratore cloud

Configura le impostazioni del dominio nel config/index.ts file.

Per modificare le opzioni della variabile costante, utilizzate i seguenti comandi:

export const options = { certificateArn: '{arn of the acm which created before}', dnsAttr: { zoneName: '{public hosted zone name}', hostedZoneId: 'hosted zone Id', }, domainNamePrefix: '{Prefix for the domain}', presignPath: 'presign', objectsPath: 'objects', };

Nei comandi, sostituisci ogni segnaposto con le tue informazioni:

  • Sostituisci '{arn of the acm which created before}' con il tuo certificato ACM Amazon Resource Name (ARN).

  • Sostituiscilo '{public hosted zone name}' con il tuo nome di dominio.

  • 'hosted zone Id'Sostituiscilo con l'ID della tua zona ospitata su Route 53.

  • Sostituiscilo '{Prefix for the domain}' con il prefisso di dominio che desideri utilizzare.

  • Facoltativamente, puoi modificare 'objects' i percorsi 'presign' e, se necessario, per il tuo caso d'uso specifico.

Amministratore AWS, amministratore cloud

Distribuisci gli stack.

Per distribuire due stack, uno per il cloud privato virtuale (VPC) e l'altro per l'applicazione, usa il seguente comando:

$ npm install $ cdk synth $ cdk deploy --all
Amministratore AWS, amministratore cloud
AttivitàDescrizioneCompetenze richieste

Verifica gli indirizzi IP dell'endpoint.

Per verificare che il dominio per questo pattern abbia indirizzi IP statici, utilizzate il seguente comando:

nslookup ${s3-bucket-prefix}.${domain}
Amministratore di rete

Carica un file di test che potrai scaricare in seguito.

Carica il file di test nella '/objects' cartella del bucket Amazon S3.

Amministratore AWS, amministratore cloud

Richiama l'API per generare un URL predefinito.

Per generare un URL predefinito, richiamate l'URL da un browser o da un client API (ad esempio, Postman) utilizzando il seguente formato:

https://${s3-bucket-prefix}.${domain}/presign/objects/${uploaded-filename}

Sostituisci i valori segnaposto in ${s3-bucket-prefix} e ${domain} con i valori impostati nei passaggi precedenti.

Proprietario dell'app

Controlla il risultato.

Il risultato previsto è che dovresti ricevere un codice di stato di reindirizzamento 301 (Spostato permanentemente). Questa risposta conterrà l'URL predefinito, che dovrebbe avviare automaticamente il download del file di test.

Tecnico di test
AttivitàDescrizioneCompetenze richieste

Distruggi le risorse API Gateway, Amazon S3 e Lambda.

Per eliminare le risorse, usa i seguenti comandi:

cd ./2.apigw_s3_lambda terraform init terraform plan --destroy --var-file=apg.tfvars terraform destroy --var-file=apg.tfvars
Amministratore AWS, amministratore cloud

Distruggi le risorse di rete.

Per eliminare le risorse di rete, utilizzate i seguenti comandi:

cd ./1.vpc_alb_ga terraform init terraform plan --destroy --var-file=apg.tfvars terraform destroy --var-file=apg.tfvars
Amministratore AWS, amministratore cloud
AttivitàDescrizioneCompetenze richieste

Distruggi le pile.

Per distruggere sia il VPC che lo stack delle applicazioni, usa il seguente comando:

$ cdk destroy --all
Amministratore AWS, amministratore cloud

Svuota ed elimina i bucket Amazon S3.

Svuota ed elimina il bucket Amazon S3 oggetto e il bucket Amazon S3 di log che non vengono eliminati per impostazione predefinita.

I nomi dei bucket Amazon S3 sono e. ${s3-bucket-prefix}.${domain} ${s3-bucket-prefix}.${domain}-logs

Se preferisci usare il AWS Command Line Interface (AWS CLI) per eliminare i bucket, usa i seguenti comandi:

$ aws s3 rm s3://${s3-bucket-prefix}.${domain} --recursive $ aws s3 rb s3://${s3-bucket-prefix}.${domain} --force $ aws s3 rm s3://${s3-bucket-prefix}.${domain}-logs --recursive $ aws s3 rb s3://${s3-bucket-prefix}.${domain}-logs --force

Sostituite ${s3-bucket-prefix} e ${domain} con i valori impostati nei passaggi precedenti. , /p>

Amministratore AWS, amministratore cloud

Risorse correlate

AWS Blog