Verwenden von AWS CodeBuild mit einem Proxy-Server - AWS CodeBuild

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden von AWS CodeBuild mit einem Proxy-Server

Sie können AWS CodeBuild mit einem Proxy-Server verwenden, um den HTTP- und HTTPS-Datenverkehr in und aus dem Internet zu regeln. Um CodeBuild mit einem Proxy-Server auszuführen, installieren Sie einen Proxy-Server in einem öffentlichen Subnetz und CodeBuild in einem privaten Subnetz in einer VPC.

Es gibt zwei primäre Anwendungsfälle für die Ausführung von CodeBuild in einem Proxy-Server:

  • Damit entfällt die Nutzung eines NAT-Gateways oder einer NAT-Instance in Ihrer VPC.

  • Sie können die URLs angeben, auf welche die Instances in dem Proxy-Server zugreifen können, und die URLs, für die der Proxy-Server den Zugriff verweigert.

Sie können CodeBuild mit zwei Arten von Proxy-Servern verwenden. In beiden Fällen wird der Proxy-Server in einem öffentlichen Subnetz und CodeBuild wird in einem privaten Subnetz ausgeführt.

Erforderliche Komponenten zur Ausführung von CodeBuild in einem Proxy-Server

Für die Ausführung von AWS CodeBuild in einem transparenten oder expliziten Proxy-Server benötigen Sie diese Komponenten:

  • Eine VPC.

  • Ein öffentliches Subnetz in Ihrer VPC für den Proxy-Server

  • Ein privates Subnetz in Ihrer VPC für CodeBuild.

  • Ein Internet-Gateway, das die Kommunikation zwischen der VPC und dem Internet ermöglicht

Das folgende Diagramm zeigt, wie die Komponenten interagieren.

Einrichten eines VPC, von Subnetzen und eines Netzwerk-Gateways

Die folgenden Schritte sind für die Ausführung von AWS CodeBuild in einem transparenten oder expliziten Proxy-Server erforderlich.

  1. Erstellen Sie eine VPC. Weitere Informationen finden Sie unter Erstellen einer VPC im Amazon-VPC-Benutzerhandbuch.

  2. Erstellen Sie zwei Subnetze in Ihrer VPC. Eines ist ein öffentliches Subnetz mit dem Namen Public Subnet, in dem der Proxy-Server ausgeführt wird. Das andere ist ein privates Subnetz mit dem NamenPrivate Subnetin dem CodeBuild läuft.

    Informationen hierzu finden Sie im Abschnitt Erstellen eines Subnetzes in Ihrer VPC.

  3. Erstellen Sie ein Internet-Gateway und ordnen Sie es Ihrer VPC zu. Weitere Informationen finden Sie unter Erstellen und Anfügen eines Internet-Gateways.

  4. Fügen Sie eine Regel zu der Standard-Routing-Tabelle hinzu, die ausgehenden Datenverkehr von der VPC (0.0.0.0/0) an das Internet-Gateway weiterleitet. Informationen hierzu finden Sie unter Hinzufügen und Entfernen von Routen zu und aus einer Routing-Tabelle.

  5. Fügen Sie eine Regel zu der Standard-Sicherheitsgruppe Ihrer VPC hinzu, die eingehenden SSH-Datenverkehr (TCP 22) von Ihrer VPC (0.0.0.0/0) zulässt.

  6. Folgen Sie den Anweisungen inStarten einer Instance mit dem Assistenten zum Starten von InstancesimBenutzerhandbuch für Amazon EC2um eine Amazon Linux-Instance zu starten. Wählen Sie bei Ausführung des Assistenten die folgenden Optionen aus:

    • In :Wählen eines Instance-TypsWählen Sie ein Amazon Linux-Amazon-Systemabbild (AMI) aus.

    • Wählen Sie unter Subnet (Subnetz) das öffentliche Subnetz aus, das Sie zuvor in diesem Thema erstellt haben. Wenn Sie den vorgeschlagenen Namen verwendet haben, heißt dieses Subnetz Public Subnet (Öffentliches Subnetz).

    • Klicken Sie in Auto-assign Public IP auf Enable.

    • Wählen Sie auf der Seite Configure Security Group (Sicherheitsgruppe konfigurieren) für Assign a security group (Sicherheitsgruppe zuweisen) die Option Select an existing security group (Vorhandene Sicherheitsgruppe auswählen) aus. Wählen Sie nun die Standard-Sicherheitsgruppe aus.

    • Nachdem Sie Launch (Starten) ausgewählt haben, wählen Sie ein vorhandenes Schlüsselpaar aus oder erstellen Sie ein neues.

    Wählen Sie für alle anderen Optionen die Standardeinstellungen aus.

  7. Nachdem die EC2-Instance ausgeführt wird, deaktivieren Sie Quell-/Zielprüfungen. Weitere Informationen finden Sie unter Deaktivieren von Quell-/Zielprüfungen im Amazon VPC-Benutzerhandbuch.

  8. Erstellen Sie eine Routing-Tabelle in Ihrer VPC. Fügen Sie eine Regel zu der Routing-Tabelle hinzu, die für das Internet bestimmten Datenverkehr zu Ihrem Proxy-Server leitet. Ordnen Sie diese Routing-Tabelle Ihrem privaten Subnetz zu. Dies ist erforderlich, damit ausgehende Anfragen von Instances in Ihrem privaten Subnetz, in dem CodeBuild ausgeführt wird, immer über den Proxy-Server geleitet werden.

Installieren und Konfigurieren eines Proxy-Servers

Es stehen viele Proxy-Server zur Auswahl. Um die Ausführung von AWS CodeBuild in einem Proxy-Server zu demonstrieren, wird hier ein Open-Source-Proxy-Server, Squid, verwendet. Dasselbe Konzept gilt auch für andere Proxy-Server.

Verwenden Sie für die Installation von Squid ein yum-Repository. Führen Sie dazu die folgenden Befehle aus:

sudo yum update -y sudo yum install -y squid

Nachdem Sie Squid installiert haben, bearbeiten Sie die squid.conf-Datei mit den Anweisungen weiter unten in diesem Thema.

Konfigurieren von Squid für HTTPS-Datenverkehr

Bei HTTPS ist der HTTP-Datenverkehr in einer Transport Layer Security (TLS)-Verbindung gekapselt. Squid verwendet eine Funktion namens SslPeekAndSplice zum Abrufen der SNI (Server Name Indication, Servernamensanzeige) von der TLS-Initiierung, die den angeforderten Internet-Host enthält. Dies ist erforderlich, damit Squid den HTTPS-Datenverkehr nicht entschlüsseln muss. Zum Aktivieren von SslPeekAndSplice benötigt Squid ein Zertifikat. Erstellen Sie dieses Zertifikat mit 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
Anmerkung

Für HTTP muss Squid nicht konfiguriert werden. Von allen HTTP/1.1-Anforderungsnachrichten kann die Funktion das Host-Header-Feld abrufen, das den angeforderten Internet-Host angibt.

Führen Sie CodeBuild in einem expliziten Proxy-Server aus

Um AWS CodeBuild in einem expliziten Proxy-Server auszuführen, müssen Sie den Proxy-Server so konfigurieren, dass Datenverkehr zu und von externen Standorten zugelassen oder abgelehnt wird, und anschließend die Umgebungsvariablen HTTPS_PROXY und HTTP_PROXY konfigurieren.

Konfigurieren von Squid als expliziter Proxy-Server

Um Squid als expliziten Proxy-Server zu konfigurieren, müssen Sie die folgenden Änderungen an der Datei /etc/squid/squid.conf vornehmen:

  • Entfernen Sie die folgenden Standard-ACL-Regeln (ACL = Access Control List, Zugriffskontrollliste).

    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

    Fügen Sie anstelle der von Ihnen entfernten Standard-ACL-Regeln Folgendes hinzu. Die erste Zeile lässt Anforderungen von Ihrer VPC zu. Die nächsten beiden Zeilen gewähren Ihrem Proxy-Server Zugriff auf die Ziel-URLs, die von AWS CodeBuildverwendet werden könnten. Ändern Sie den regulären Ausdruck in der letzten Zeile, um S3-Buckets oder ein CodeCommit--Repository in einerAWSRegion : z. B.:

    • Wenn Ihre Quelle Amazon S3 ist, gehen Sie nach dem Befehl voracl download_src dstdom_regex .*s3\.us-west-1\.amazonaws\.comum Zugriff auf S3-Buckets in derus-west-1Region :

    • Wenn Ihre QuelleAWS CodeCommitVerwendung von Verwendung vongit-codecommit.<your-region>.amazonaws.comSo fügen Sie eine hinzuAWSRegion einer Genehmigungsliste.

    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
  • Ersetzen Sie http_access allow localnet durch Folgendes:

    http_access allow localnet allowed_sites http_access allow localnet download_src
  • Wenn Sie möchten, dass Ihr Build Protokolle und Artefakte hochlädt, führen Sie einen der folgenden Schritte aus:

    1. Fügen Sie vor der Anweisung http_access deny all die folgenden Anweisungen ein. Sie ermöglichen CodeBuild den Zugriff auf CloudWatch und Amazon S3. Der Zugriff auf CloudWatch ist erforderlich, damit CodeBuild CloudWatch-Protokolle erstellen kann. Zugriff auf Amazon S3 ist für das Hochladen von Artefakten und Amazon S3 S3-Caching erforderlich.

      • 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
      • Nach dem Speichernsquid.confFühren Sie den folgenden Befehl aus:

        sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3130 sudo service squid restart
    2. Fügen Sie Ihrer Buildspec-Datei proxy hinzu. Weitere Informationen finden Sie unter Syntax der Build-Spezifikation.

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

Wenn Sie einen RequestError-Timeout-Fehler erhalten, beachten Sie die Informationen im Abschnitt RequestError Timeout-Fehler beim Ausführen von CodeBuild auf einem Proxy-Server.

Weitere Informationen finden Sie unter Expliziter Proxy-Server – squid.conf-Beispieldatei an späterer Stelle in diesem Thema.

Erstellen eines CodeBuild-Projekts

Wenn Sie AWS CodeBuild mit Ihrem expliziten Proxy-Server ausführen möchten, legen Sie für die Umgebungsvariablen HTTP_PROXY und HTTPS_PROXY die private IP-Adresse der EC2-Instance fest, die Sie für Ihren Proxy-Server und Port 3128 auf Projektebene erstellt haben. Die private IP-Adresse sieht folgendermaßen aus: http://your-ec2-private-ip-address:3128. Weitere Informationen finden Sie unter Erstellen eines Build-Projekts in AWS CodeBuild und Ändern der Einstellungen eines Build-Projekts in AWS CodeBuild.

Verwenden Sie den folgenden Befehl, um das Zugriffsprotokoll des Squid-Proxys anzuzeigen:

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

Expliziter Proxy-Server – squid.conf-Beispieldatei

Im Folgenden sehen Sie ein Beispiel für eine squid.conf-Datei, die für einen expliziten Proxy-Server konfiguriert wurde.

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

Führen Sie CodeBuild in einem transparenten Proxy-Server aus

Um AWS CodeBuild in einem transparenten Proxy-Server auszuführen, müssen Sie den Proxy-Server mit Zugriff auf die Websites und Domänen konfigurieren, mit denen er interagiert.

Konfigurieren von Squid als transparenter Proxy-Server

Um einen transparenten Proxy-Server zu konfigurieren, müssen Sie ihm Zugriff auf die Domänen und Websites erteilen, auf die er zugreifen soll. Um AWS CodeBuild mit einem transparenten Proxy-Server auszuführen, müssen Sie Zugriff auf amazonaws.com erteilen. Sie müssen auch Zugriff auf andere Websites erteilen, die CodeBuild verwendet. Diese hängen davon ab, wie Sie Ihre CodeBuild--Projekte erstellen. Beispiele sind die Websites für Repositorys wie GitHub, Bitbucket, Yum und Maven. Um Squid Zugriff auf bestimmte Domains und Websites zu erteilen, aktualisieren Sie die squid.conf-Datei mit einem Befehl ähnlich dem folgenden: Dieser Beispielbefehl gewährt Zugriff auf amazonaws.com, github.com und bitbucket.com. Sie können dieses Beispiel bearbeiten, um Zugriff auf andere Websites zu erteilen.

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

Eingehende Anforderungen von Instances im privaten Subnetz muss zu den Squid-Ports umgeleitet werden. Squid ist an Port 3129 für HTTP-Datenverkehr (anstelle von 80) und an Port 3130 für HTTPS-Datenverkehr (anstelle von 443) empfangsbereit. Verwenden Sie den Befehl iptables, um Datenverkehr weiterzuleiten:

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

Erstellen eines CodeBuild-Projekts

Nach der Konfiguration können Sie Ihren Proxy-Server ohne weitere Konfiguration mit AWS CodeBuild in einem privaten Subnetz verwenden. Jede HTTP- und HTTPS-Anforderung durchläuft den öffentlichen Proxy-Server. Verwenden Sie den folgenden Befehl, um das Zugriffsprotokoll des Squid-Proxys anzuzeigen:

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

Ausführung eines Paket-Managers und anderer Tools in einem Proxy-Server

So führen Sie ein Tool wie z. B. einen Paket-Manager in einem Proxy-Server aus
  1. Fügen Sie das Tool der Genehmigungsliste auf Ihrem Proxy-Server hinzu, indem Sie Ihrer squid.conf-Datei Anweisungen hinzufügen.

  2. Fügen Sie eine Zeile zu Ihrer buildspec-Datei hinzu, die auf den privaten Endpunkt Ihres Proxy-Servers verweist.

Die folgenden Beispiele veranschaulichen dies für apt-get, curl und maven. Wenn Sie ein anderes Tool verwenden, gelten die gleichen Prinzipien. Fügen Sie es einer Zulassungsliste in dersquid.confDatei und fügen Sie Ihrer Build-Spezifikationsdatei (buildspec) einen Befehl hinzu, um CodeBuild auf den Endpunkt Ihres Proxy-Servers zu hinzuweisen.

Ausführen von apt-get in einem Proxy-Server
  1. Fügen Sie der squid.conf-Datei die folgenden Anweisungen hinzu, um apt-get einer Genehmigungsliste in Ihrem Proxy-Server hinzuzufügen. Die ersten drei Zeilen erlaubenapt-getum in der Build-Umgebung zu laufen.

    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. Nehmen Sie die folgende Anweisung in Ihre buildspec Datei auf, damit apt-get-Befehle in /etc/apt/apt.conf.d/00proxy nach der Proxy-Konfiguration suchen.

    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
Ausführen von curl in einem Proxy-Server
  1. Fügen Sie der Datei squid.conf Folgendes hinzu, um curl einer Genehmigungsliste in Ihrer Build-Umgebung hinzuzufügen.

    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. Nehmen Sie die folgende Anweisung in Ihre buildspec-Datei auf, damit curl den privaten Proxy-Server für den Zugriff auf die Website verwendet, die Sie squid.conf hinzugefügt haben. In diesem Beispiel ist die Website google.com.

    curl -x <private-ip-of-proxy-server>:3128 https://www.google.com
Ausführen von maven in einem Proxy-Server
  1. Fügen Sie der Datei squid.conf Folgendes hinzu, um maven einer Genehmigungsliste in Ihrer Build-Umgebung hinzuzufügen.

    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. Fügen Sie ihrer buildspec-Datei die folgende Anweisung hinzu.

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