Come faccio a distribuire artefatti in Amazon S3 in un altro account AWS utilizzando CodePipeline e una lista di controllo degli accessi (ACL) preimpostata?

6 minuti di lettura
0

Desidero distribuire artefatti in un bucket Amazon Simple Storage Service (Amazon S3) di un altro account. Esiste un modo per farlo utilizzando AWS CodePipeline con un provider di azioni di distribuzione Amazon S3 e una lista di controllo degli accessi (ACL) preimpostata?

Risoluzione

Nota: la procedura di esempio seguente presuppone quanto segue:

  • Hai due account AWS: un account di sviluppo e un account di produzione.
  • Il nome del bucket di input nell'account di sviluppo è codepipeline-input-bucket (con controllo delle versioni attivato).
  • Il nome del bucket artefatto predefinito nell'account di sviluppo è codepipeline-us-east-1-0123456789.
  • Il nome del bucket di output nell'account di produzione è codepipeline-output-bucket.
  • Stai distribuendo artefatti dall'account di sviluppo a un bucket S3 nell'account di produzione.
  • Stai utilizzando una lista di controllo degli accessi (ACL) preimpostata per fornire al proprietario del bucket nell'account di produzione l'accesso agli oggetti di proprietà dell'account di sviluppo.
    Nota: per distribuire gli artefatti e impostare l'account di produzione come proprietario dell'oggetto, consulta How do I deploy artifacts to Amazon S3 in a different AWS account using CodePipeline?

Creazione di un CodePipeline nell'account di sviluppo

1.    Apri la console CodePipeline. Quindi, scegli Crea pipeline.

2.    In Nome pipeline, inserisci un nome per la pipeline. Ad esempio: crossaccountdeploy.

Nota: la casella di testo Nome ruolo viene compilata automaticamente con il nome del ruolo di servizio AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy. Puoi anche scegliere un altro ruolo di servizio esistente.

3.    Espandi la sezione Impostazioni avanzate.

4.    In Archivio artefatto, scegli Posizione predefinita.
Nota: puoi anche selezionare Posizione personalizzata se necessario per le tue esigenze.

5.    In Chiave di crittografia, seleziona Chiave predefinita gestita da AWS.

6.    Scegli Avanti.

7.    Nella pagina Aggiungi fase di origine, in Provider di origine, scegli Amazon S3.

8.    In Bucket, inserisci il nome del bucket S3 di input di sviluppo. Ad esempio: codepipeline-input-bucket.
Importante: per funzionare con CodePipeline, è necessario che il controllo delle versioni del bucket di input sia attivato.

9.    In Chiave oggetto S3, inserisci sample-website.zip.

Importante: per utilizzare un sito Web AWS di esempio anziché il tuo sito Web, consulta Tutorial: Create a pipeline that uses Amazon S3 as a deployment provider. Quindi, cerca “sito web statico di esempio” nei Prerequisiti della sezione 1: Deploy Static Website Files to Amazon S3.

10.    In Modifica le opzioni di rilevamento, scegli Amazon CloudWatch Events (consigliato).

11.    Scegli Avanti.

12.    Nella pagina Aggiungi fase di creazione di compilazione, scegli Salta fase di creazione di build. Quindi, scegli Salta.

13.    Nella pagina Aggiungi fase di distribuzione, in Distribuisci provider, scegli Amazon S3.

14.    In Regione, scegli la regione AWS in cui si trova il bucket S3 di output. Ad esempio: Stati Uniti orientali (Virginia settentrionale).

15.    In Bucket, inserisci il nome del bucket S3 di output di produzione. Ad esempio: codepipeline-output-bucket.

16.    Seleziona la casella di controllo Estrai il file prima di distribuire.
Nota: se necessario, inserisci un percorso in Percorso di distribuzione.

17.    Espandi Configurazione aggiuntiva.

18.    In ACL fisso, scegli bucket-owner-fullcontrol.
Nota: bucket-owner-fullcontrol offre al proprietario del bucket nell'account di produzione l'accesso completo agli oggetti distribuiti e di proprietà dell'account di sviluppo. Per ulteriori informazioni, consulta ACL predefinita.

19.    Scegli Avanti.

20.    Scegli Crea pipeline. La pipeline viene eseguita, ma si interrompe durante la fase di origine. Viene visualizzato il seguente errore: "The object with key 'sample-website.zip' does not exist."

La sezione Caricamento del sito Web di esempio nel bucket di input di questo articolo spiega come risolvere questo errore.

Configurazione di un ruolo di servizio CodePipeline con una policy AWS Identity and Access Management (IAM) che aggiunge l'accesso S3 per il bucket di output dell'account di produzione

1.    Apri la console IAM nell'account di sviluppo.

2.    Nel riquadro di navigazione, scegli Policy. Quindi, scegli Crea policy.

3.    Scegli la scheda JSON. Quindi, inserisci la seguente policy nell'editor JSON:

Importante: sostituisci codepipeline-output-bucket con il nome del bucket S3 di output di produzione.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::codepipeline-output-bucket/*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::codepipeline-output-bucket"
    }
  ]
}

4.    Scegli Verifica policy.

5.    In Nome, inserisci un nome per la policy. Ad esempio: prodbucketaccess.

6.    Scegli Crea policy.

7.    Nel riquadro di navigazione, scegliRuoli.

8.    Nell'elenco dei ruoli, scegli AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy. Questo è il ruolo di servizio CodePipeline.
Nota: puoi utilizzare il tuo ruolo di servizio, se necessario per le tue esigenze.

9.    Scegli Collega policy.

10.    Seleziona la policy che hai creato (prodbucketaccess). Quindi, scegli Collega policy per concedere a CodePipeline l'accesso al bucket S3 di output di produzione.

Configurazione del bucket di output nell'account di produzione per consentire l'accesso dall'account di sviluppo

1.    Apri la console Amazon S3 nell'account di produzione.

2.    Nell'elenco Nome bucket, scegli il bucket S3 di output di produzione. Ad esempio: codepipeline-output-bucket.

3.    Scegli Autorizzazioni. Quindi scegli la Policy del bucket.

4.    Nell'editor di testo, inserisci la seguente policy, quindi scegli Salva:

Importante: sostituisci dev-account-id con l'ID dell’account AWS del tuo ambiente di sviluppo. Sostituisci codepipeline-output-bucket con il nome del bucket S3 di output di produzione.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::dev-account-id:root"
      },
      "Action": "s3:Put*",
      "Resource": "arn:aws:s3:::codepipeline-output-bucket/*"
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::dev-account-id:root"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::codepipeline-output-bucket"
    }
  ]
}

Caricamento del sito Web di esempio nel bucket di input

1.    Apri la console Amazon S3 nell'account di sviluppo.

2.    Nell'elenco Nome bucket, scegli il bucket S3 di input di sviluppo. Ad esempio: codepipeline-input-bucket.

3.    Scegli Carica. Quindi, scegli Aggiungi file.

4.    Seleziona il file sample-website.zip che hai scaricato.

5.    Scegli Carica per eseguire la pipeline. Quando la pipeline viene eseguita, si verifica quanto segue:

  • L'azione di origine seleziona sample-website.zip dal bucket S3 di input di sviluppo (codepipeline-input-bucket). Quindi, l'azione di origine inserisce il file zip come artefatto sorgente all'interno del bucket artefatto predefinito nell'account di sviluppo (codepipeline-us-east-1-0123456789).
  • Nell'azione di distribuzione, il ruolo di servizio CodePipeline ( AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy) utilizza il suo accesso per eseguire la distribuzione nel bucket S3 di output di produzione ( codepipeline-output-bucket). L'azione di distribuzione applica anche la ACL predefinita bucket-owner-full-control.

Nota: l'account di sviluppo è il proprietario degli oggetti estratti nel bucket S3 di output di produzione ( codepipeline-output-bucket). Il proprietario del bucket nell'account di produzione ha inoltre pieno accesso agli artefatti distribuiti.


AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa