Utilizzo di AWS CodeBuild con un server proxy - AWS CodeBuild

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

Utilizzo di AWS CodeBuild con un server proxy

È possibile utilizzare AWS CodeBuild con un server proxy per regolamentare il traffico HTTP e HTTPS per e da Internet. Per eseguire CodeBuild con un server proxy, installa un server proxy in una sottorete pubblica e CodeBuild in una sottorete privata in un VPC.

Esistono due casi d'uso principali per l'esecuzione di CodeBuild in un server proxy:

  • Elimina la necessità di utilizzare un gateway NAT o un'istanza NAT nel VPC.

  • Consente di specificare gli URL a cui le istanze del server proxy possono accedere e quelli a cui il server proxy nega l'accesso.

È possibile utilizzare CodeBuild con due tipi di server proxy. Per entrambi i casi, il server proxy viene eseguito in una sottorete pubblica e CodeBuild viene eseguito in una sottorete privata.

Componenti necessari per eseguire CodeBuild in un server proxy

Per eseguire AWS CodeBuild in un server proxy trasparente o esplicito occorrono questi componenti:

  • Un VPC.

  • Una sottorete pubblica nel VPC per il server proxy.

  • Una sottorete privata nel VPC per CodeBuild.

  • Un gateway Internet che consente la comunicazione tra il VPC e Internet.

Il diagramma riportato di seguito illustra l'interazione tra i componenti.

Configura un VPC, sottoreti e un gateway di rete

Per eseguire AWS CodeBuild in un server proxy esplicito o trasparente sono necessari i seguenti passaggi.

  1. Crea un VPC. Per informazioni, consulta Creazione di un VPC nella Guida per l'utente di Amazon VPC.

  2. Crea due sottoreti nel VPC. Una è una sottorete pubblica denominata Public Subnet in cui viene eseguito il server proxy. e l'altra è una sottorete privata denominataPrivate Subnetin cui viene eseguito CodeBuild.

    Per ulteriori informazioni, consulta Creazione di una sottorete nel VPC.

  3. Crea e collega un gateway Internet al VPC. Per ulteriori informazioni, consulta l'argomento relativo alla creazione e all'associazione di un gateway Internet.

  4. Aggiungi una regola alla tabella di routing predefinita che instrada il traffico in uscita dal VPC (0.0.0.0/0) al gateway Internet. Per ulteriori informazioni, consulta Aggiunta e rimozione di route da una tabella di routing.

  5. Aggiungi una regola al gruppo di sicurezza predefinito del VPC che consente l'ingresso del traffico SSH (TCP 22) proveniente dal VPC (0.0.0.0/0).

  6. Segui le istruzioni riportate inAvvio di un'istanza tramite la procedura guidata di lancionellaGuida per l'utente di Amazon EC2per lanciare un'istanza Amazon Linux Durante la procedura guidata, scegli le seguenti opzioni:

    • Nello statoScegli il tipo di istanza., scegliere un'Amazon Machine Image (AMI) di Amazon Linux.

    • In Subnet (Sottorete), scegli la sottorete pubblica precedentemente creata in questo argomento. Se è stato utilizzato il nome suggerito, è Public Subnet (Sottorete pubblica).

    • In Auto-assign Public IP (Assegna automaticamente IP pubblico), scegli Enable (Abilita).

    • Nella pagina Configure Security Group (Configura il gruppo di sicurezza), in Assign a security group (Assegna un gruppo di sicurezza), scegli Select an existing security group (Seleziona un gruppo di sicurezza esistente). A questo punto, seleziona il gruppo di sicurezza predefinito.

    • Dopo aver selezionato Launch (Avvia), scegli una coppia di chiavi esistente o creane una.

    Seleziona le impostazioni predefinite per tutte le altre opzioni.

  7. Quando l'istanza EC2 è in esecuzione, disabilita i controlli dell'origine/della destinazione. Per informazioni, consulta Disabilitazione dei controlli dell'origine/della destinazione nella Guida per l'utente di Amazon VPC.

  8. Crea una tabella di routing nel VPC. Aggiungi alla tabella di routing una regola che consente di instradare il traffico destinato a Internet al server proxy. Associa la tabella di routing alla sottorete privata. Questa operazione garantisce che le richieste in uscita dalle istanze nella sottorete privata, in cui viene eseguito CodeBuild, siano sempre inviate attraverso il server proxy.

Installa e configura un server proxy

Esistono vari server proxy tra cui scegliere. In questo caso, per dimostrare la modalità di esecuzione di AWS CodeBuild in un server proxy viene utilizzato Squid, un server proxy open-source. Gli stessi concetti sono applicabili ad altri server proxy.

Per installare Squid, utilizza un repository yum eseguendo i seguenti comandi:

sudo yum update -y sudo yum install -y squid

Dopo aver installato Squid, modifica il squid.conf utilizzando le istruzioni riportate più avanti in questo argomento.

Configura Squid per il traffico HTTPS

Per HTTPS, il traffico HTTP viene incapsulato in una connessione Transport Layer Security (TLS). Per recuperare la Server Name Indication (SNI) dall'inizializzazione TLS che contiene l'host Internet richiesto, Squid utilizza una caratteristica chiamata SslPeekAndSplice. In questo modo, Squid non è obbligato a decrittografare il traffico HTTPS. Per abilitare SslPeekAndSplice, Squid richiede un certificato. Crea il certificato utilizzando OpenSSL:

sudo mkdir /etc/squid/ssl cd /etc/squid/ssl sudo openssl genrsa -out squid.key 2048 sudo openssl req -new -key squid.key -out squid.csr -subj "/C=XX/ST=XX/L=squid/O=squid/CN=squid" sudo openssl x509 -req -days 3650 -in squid.csr -signkey squid.key -out squid.crt sudo cat squid.key squid.crt | sudo tee squid.pem
Nota

Per HTTP, la configurazione di Squid non è richiesta. Da tutti i messaggi di richiesta HTTP/1.1 è possibile recuperare il campo dell'intestazione dell'host, che indica l'host Internet richiesto.

Esecuzione di CodeBuild in un server proxy esplicito

Per eseguire AWS CodeBuild in un server proxy esplicito, è necessario configurare il server proxy in modo che consenta o rifiuti il traffico da e verso siti esterni e quindi configurare le variabili di ambiente HTTPS_PROXY e HTTP_PROXY.

Configura Squid come server proxy esplicito

Per configurare il server proxy Squid in modo che sia esplicito, devi apportare al file /etc/squid/squid.conf le seguenti modifiche:

  • Rimuovi le seguenti regole della lista di controllo accessi (ACL) predefinita.

    acl localnet src 10.0.0.0/8 acl localnet src 172.16.0.0/12 acl localnet src 192.168.0.0/16 acl localnet src fc00::/7 acl localnet src fe80::/10

    Sostituisci le regole ACL predefinite rimosse con quelle riportate di seguito. La prima riga consente le richieste dal VPC. La due righe successive permettono al server proxy di accedere agli URL di destinazione che potrebbero essere utilizzati da AWS CodeBuild. Per specificare i bucket S3 o un repository CodeCommit, modifica l'espressione regolare nell'ultima rigaAWSRegione . Ad esempio:

    • Se l'origine è Amazon S3, utilizza il comandoacl download_src dstdom_regex .*s3\.us-west-1\.amazonaws\.comper concedere l'accesso ai bucket S3 nelus-west-1Regione .

    • Se la fonte èAWS CodeCommit, utilizzaregit-codecommit.<your-region>.amazonaws.comper aggiungere unAWSRegione di un elenco consentiti.

    acl localnet src 10.1.0.0/16 #Only allow requests from within the VPC acl allowed_sites dstdomain .github.com #Allows to download source from GitHub acl allowed_sites dstdomain .bitbucket.com #Allows to download source from Bitbucket acl download_src dstdom_regex .*\.amazonaws\.com #Allows to download source from Amazon S3 or CodeCommit
  • Sostituisci http_access allow localnet con i seguenti:

    http_access allow localnet allowed_sites http_access allow localnet download_src
  • Se desideri che la compilazione carichi log e artefatti, esegui una delle operazioni seguenti:

    1. Prima dell'istruzione http_access deny all, inserisci le istruzioni riportate di seguito, Consentono a CodeBuild di accedere a CloudWatch e Amazon S3. L'accesso a CloudWatch è necessario affinché CodeBuild possa creare log di CloudWatch. L'accesso ad Amazon S3 è necessario per il caricamento degli artefatti e il caching di Amazon S3.

      • https_port 3130 cert=/etc/squid/ssl/squid.pem ssl-bump intercept acl SSL_port port 443 http_access allow SSL_port acl allowed_https_sites ssl::server_name .amazonaws.com acl step1 at_step SslBump1 acl step2 at_step SslBump2 acl step3 at_step SslBump3 ssl_bump peek step1 all ssl_bump peek step2 allowed_https_sites ssl_bump splice step3 allowed_https_sites ssl_bump terminate step2 all
      • Dopo aver salvatosquid.conf, eseguire il comando riportato di seguito:

        sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3130 sudo service squid restart
    2. Aggiungi proxy al file di specifiche di compilazione. Per ulteriori informazioni, consulta Sintassi buildspec.

      version: 0.2 proxy: upload-artifacts: yes logs: yes phases: build: commands: - command
Nota

Se visualizzi un errore di timeout RequestError, consulta RequestError errore di timeout durante l'esecuzione CodeBuild in un server proxy.

Per ulteriori informazioni, consultare Esempio di file squid.conf del server proxy esplicito più avanti in questo argomento.

Creazione di un progetto CodeBuild

Per eseguire AWS CodeBuild con il server proxy esplicito, imposta nelle relative variabili di ambiente HTTP_PROXY e HTTPS_PROXY l'indirizzo IP privato dell'istanza di EC2 creata per il server proxy e la porta 3128 a livello di progetto. L'indirizzo IP privato è simile a questo http://your-ec2-private-ip-address:3128. Per ulteriori informazioni, consultare Creazione di un progetto di compilazione in AWS CodeBuild e Modifica delle impostazioni di un progetto di compilazione in AWS CodeBuild.

Per visualizzare il log degli accessi del proxy Squid, utilizza il comando seguente:

sudo tail -f /var/log/squid/access.log

Esempio di file squid.conf del server proxy esplicito

Di seguito è riportato un esempio di file squid.conf configurato per un server proxy esplicito.

acl localnet src 10.0.0.0/16 #Only allow requests from within the VPC # add all URLS to be whitelisted for download source and commands to be run in build environment acl allowed_sites dstdomain .github.com #Allows to download source from github acl allowed_sites dstdomain .bitbucket.com #Allows to download source from bitbucket acl allowed_sites dstdomain ppa.launchpad.net #Allows to run apt-get in build environment acl download_src dstdom_regex .*\.amazonaws\.com #Allows to download source from S3 or CodeCommit acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT # # Recommended minimum Access Permission configuration: # # Deny requests to certain unsafe ports http_access deny !Safe_ports # Deny CONNECT to other than secure SSL ports http_access deny CONNECT !SSL_ports # Only allow cachemgr access from localhost http_access allow localhost manager http_access deny manager # We strongly recommend the following be uncommented to protect innocent # web applications running on the proxy server who think the only # one who can access services on "localhost" is a local user #http_access deny to_localhost # # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # # Example rule allowing access from your local networks. # Adapt localnet in the ACL section to list your (internal) IP networks # from where browsing should be allowed http_access allow localnet allowed_sites http_access allow localnet download_src http_access allow localhost # Add this for CodeBuild to access CWL end point, caching and upload artifacts S3 bucket end point https_port 3130 cert=/etc/squid/ssl/squid.pem ssl-bump intercept acl SSL_port port 443 http_access allow SSL_port acl allowed_https_sites ssl::server_name .amazonaws.com acl step1 at_step SslBump1 acl step2 at_step SslBump2 acl step3 at_step SslBump3 ssl_bump peek step1 all ssl_bump peek step2 allowed_https_sites ssl_bump splice step3 allowed_https_sites ssl_bump terminate step2 all # And finally deny all other access to this proxy http_access deny all # Squid normally listens to port 3128 http_port 3128 # Uncomment and adjust the following to add a disk cache directory. #cache_dir ufs /var/spool/squid 100 16 256 # Leave coredumps in the first cache dir coredump_dir /var/spool/squid # # Add any of your own refresh_pattern entries above these. # refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320

Esecuzione di CodeBuild in un server proxy trasparente

Per eseguire AWS CodeBuild in un server proxy trasparente, è necessario configurare il server proxy con accesso ai siti Web e ai domini con cui interagisce.

Configura di Squid come server proxy trasparente

Per configurare un server proxy in modo che sia trasparente, deve poter accedere ai domini e ai siti web a cui desideri accedere. Per eseguire AWS CodeBuild con un server proxy trasparente, deve poter accedere ad amazonaws.com. È inoltre necessario concedere l'accesso ad altri siti Web utilizzati da da CodeBuild. Questi variano a seconda di come crei i i progetti CodeBuild. Esempi di siti Web sono quelli per i repository come GitHub, Bitbucket, YUM e Maven. Per concedere a Squid l'accesso a domini e siti Web specifici, aggiorna il file squid.conf utilizzando un comando simile a quello riportato di seguito. Questo comando di esempio consente l'accesso a amazonaws.com, github.com e bitbucket.com e può essere modificato in modo da garantire l'accesso ad altri siti Web.

cat | sudo tee /etc/squid/squid.conf ≪EOF visible_hostname squid #Handling HTTP requests http_port 3129 intercept acl allowed_http_sites dstdomain .amazonaws.com #acl allowed_http_sites dstdomain domain_name [uncomment this line to add another domain] http_access allow allowed_http_sites #Handling HTTPS requests https_port 3130 cert=/etc/squid/ssl/squid.pem ssl-bump intercept acl SSL_port port 443 http_access allow SSL_port acl allowed_https_sites ssl::server_name .amazonaws.com acl allowed_https_sites ssl::server_name .github.com acl allowed_https_sites ssl::server_name .bitbucket.com #acl allowed_https_sites ssl::server_name [uncomment this line to add another website] acl step1 at_step SslBump1 acl step2 at_step SslBump2 acl step3 at_step SslBump3 ssl_bump peek step1 all ssl_bump peek step2 allowed_https_sites ssl_bump splice step3 allowed_https_sites ssl_bump terminate step2 all http_access deny all EOF

Le richieste in entrata da istanze nella sottorete privata devono essere reindirizzate alle porte di Squid. Squid è in ascolto sulla porta 3129 per il traffico HTTP (anziché 80) e 3130 per il traffico HTTPS (anziché 443). Utilizza il comando iptables per instradare il traffico:

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3129 sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3130 sudo service iptables save sudo service squid start

Creazione di un progetto CodeBuild

Dopo aver configurato il server proxy, puoi utilizzarlo con AWS CodeBuild in una sottorete privata senza ulteriori configurazioni. Ogni richiesta HTTP e HTTPS passa attraverso il server proxy pubblico. Per visualizzare il log degli accessi del proxy Squid, utilizza il comando seguente:

sudo tail -f /var/log/squid/access.log

Esegui un programma di gestione dei pacchetti e di altri strumenti in un server proxy

Per eseguire uno strumento, ad esempio un programma di gestione dei pacchetti, in un server proxy
  1. Aggiungi lo strumento all'elenco di elementi consentiti nel server proxy inserendo le istruzioni nel file squid.conf.

  2. Aggiungi una riga al file di specifiche di compilazione in modo che punti all'endpoint privato del server proxy.

Gli esempi riportati di seguito spiegano come eseguire questa operazione per apt-get, curl e maven. Se utilizzi uno strumento diverso, si applicano gli stessi principi. Aggiungilo a un elenco di autorizzazioni nelsquid.confe aggiungere un comando al file buildspec per rendere consapevole di CodeBuild dell'endpoint del server proxy.

Per eseguire apt-get in un server proxy
  1. Aggiungi le seguenti istruzioni al file squid.conf per inserire apt-get nell'elenco di elementi consentiti nel server proxy. Le prime tre righe consentonoapt-getda eseguire nell'ambiente di compilazione.

    acl allowed_sites dstdomain ppa.launchpad.net # Required for apt-get to run in the build environment acl apt_get dstdom_regex .*\.launchpad.net # Required for CodeBuild to run apt-get in the build environment acl apt_get dstdom_regex .*\.ubuntu.com # Required for CodeBuild to run apt-get in the build environment http_access allow localnet allowed_sites http_access allow localnet apt_get
  2. Aggiungi l'istruzione riportata di seguito al file di specifiche di compilazione, in modo che i comandi apt-get cerchino la configurazione proxy in /etc/apt/apt.conf.d/00proxy.

    echo 'Acquire::http::Proxy "http://<private-ip-of-proxy-server>:3128"; Acquire::https::Proxy "http://<private-ip-of-proxy-server>:3128"; Acquire::ftp::Proxy "http://<private-ip-of-proxy-server>:3128";' > /etc/apt/apt.conf.d/00proxy
Per eseguire curl in un server proxy
  1. Aggiungi quanto segue al file squid.conf per inserire curl in un elenco di elementi consentiti nell'ambiente di compilazione.

    acl allowed_sites dstdomain ppa.launchpad.net # Required to run apt-get in the build environment acl allowed_sites dstdomain google.com # Required for access to a webiste. This example uses www.google.com. http_access allow localnet allowed_sites http_access allow localnet apt_get
  2. Aggiungi l'istruzione riportata di seguito al file di specifiche di compilazione, in modo che curl acceda al sito Web aggiunto a squid.conf utilizzando il server proxy privato. In questo esempio, il sito Web è google.com.

    curl -x <private-ip-of-proxy-server>:3128 https://www.google.com
Per eseguire maven in un server proxy
  1. Aggiungi quanto segue al file squid.conf per inserire maven in un elenco di elementi consentiti nell'ambiente di compilazione.

    acl allowed_sites dstdomain ppa.launchpad.net # Required to run apt-get in the build environment acl maven dstdom_regex .*\.maven.org # Allows access to the maven repository in the build environment http_access allow localnet allowed_sites http_access allow localnet maven
  2. Aggiungi al file di specifiche di compilazione l'istruzione seguente.

    maven clean install -DproxySet=true -DproxyHost=<private-ip-of-proxy-server> -DproxyPort=3128