GunakanAWS CodeBuilddengan server proksi - AWS CodeBuild

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

GunakanAWS CodeBuilddengan server proksi

Anda dapat menggunakanAWS CodeBuilddengan server proxy untuk mengatur lalu lintas HTTP dan HTTPS ke dan dari internet. Untuk menjalankan CodeBuild dengan server proxy, Anda menginstal server proxy di subnet publik dan CodeBuild di subnet pribadi dalam VPC.

Ada dua kasus penggunaan utama untuk menjalankan CodeBuild di server proxy:

  • Ini menghilangkan penggunaan gateway NAT atau instance NAT di VPC Anda.

  • Ini memungkinkan Anda menentukan URL yang instans dalam server proxy dapat mengakses dan URL yang server proxy menolak akses.

Anda dapat menggunakan CodeBuild dengan dua jenis server proxy. Untuk keduanya, server proxy berjalan di subnet publik dan CodeBuild berjalan di subnet pribadi.

Komponen yang diperlukan untuk menjalankan CodeBuild di server proxy

Anda perlu komponen-komponen ini untuk menjalankanAWS CodeBuilddi server proxy transparan atau eksplisit:

  • VPC.

  • Satu subnet publik di VPC Anda untuk server proxy.

  • Satu subnet privat di VPC Anda untuk CodeBuild.

  • Gateway internet yang memungkinkan pergantian antara VPC dan internet.

Diagram berikut menunjukkan bagaimana komponen berinteraksi.

Mengatur VPC, subnet, dan gateway jaringan

Langkah-langkah berikut diperlukan untuk menjalankanAWS CodeBuilddi server proxy transparan atau eksplisit.

  1. Buat sebuah VPC. Untuk informasi, lihatMembuat VPCdiPanduan Pengguna Amazon VPC.

  2. Membuat dua subnet di VPC Anda. Salah satunya adalah subnet publikPublic Subnetdi mana server proxy Anda berjalan. Yang lainnya adalah subnet pribadi bernamaPrivate Subnetdi mana CodeBuild berjalan.

    Untuk informasi, lihatMembuat subnet di VPC.

  3. Buat dan lampirkan gateway internet ke VPC Anda. Untuk informasi selengkapnya, lihat Membuat dan melampirkan gateway internet.

  4. Tambahkan aturan ke tabel rute default yang merutekan lalu lintas keluar dari VPC (0.0.0/0) ke gateway internet. Untuk informasi, lihatMenambahkan dan menghapus rute dari tabel rute.

  5. Tambahkan aturan ke grup keamanan default VPC Anda yang mengizinkan lalu lintas SSH (TCP 22) dari VPC Anda (0.0.0/0).

  6. Ikuti petunjuknyaMeluncurkan menggunakan launch instance wizarddiPanduan Pengguna Amazon EC2untuk meluncurkan instans Amazon Linux. Saat Anda menjalankan wizard, pilih opsi berikut:

    • MasukPilih Jenis Instans, pilih Amazon Linux Machine Image (AMI).

    • MasukSubnet, pilih subnet publik yang Anda buat sebelumnya dalam topik ini. Jika Anda menggunakan nama yang disarankan, ituSubnet publik.

    • MasukMenetapkan IP Publik, pilihAktifkan.

    • PadaKonfigurasi Kelompok Keamanan.halaman, untukMenetapkan grup keamanan, pilihPilih grup keamanan yang sudah ada. Selanjutnya, pilih grup keamanan default.

    • Setelah Anda memilihLuncurkan, pilih key pair yang sudah ada atau membuat.

    Pilih pengaturan default untuk semua opsi lainnya.

  7. Setelah instans EC2 Anda berjalan, nonaktifkan pemeriksaan sumber/tujuan. Untuk informasi, lihatMenonaktifkan pemeriksaan Sumber/TujuandiPanduan Pengguna Amazon VPC.

  8. Buat tabel rute di VPC Anda. Tambahkan aturan ke tabel rute yang mengarahkan lalu lintas yang ditakdirkan untuk internet ke server proxy Anda. Kaitkan tabel rute ini dengan subnet pribadi Anda. Hal ini diperlukan agar permintaan keluar dari instance di subnet pribadi Anda, di mana CodeBuild berjalan, selalu dialihkan melalui server proxy.

Instal dan konfigurasikan server proxy

Ada banyak server proxy yang bisa dipilih. Server proxy open-source, Squid, digunakan di sini untuk menunjukkan bagaimanaAWS CodeBuildberjalan di server proxy. Anda dapat menerapkan konsep yang sama ke server proxy lainnya.

Untuk menginstal Squid, gunakan repo yum dengan menjalankan perintah berikut:

sudo yum update -y sudo yum install -y squid

Setelah Anda menginstal Squid, mengedit nyasquid.confmenggunakan petunjuk nanti dalam topik ini.

Mengkonfigurasi Squid untuk lalu lintas HTTPS

Untuk HTTPS, lalu lintas HTTP dikemas dalam koneksi Transport Layer Security (TLS). Squid menggunakan fitur yang disebutSslPeekAndSpliceuntuk mengambil Server Name Indication (SNI) dari inisiasi TLS yang berisi host internet yang diminta. Hal ini diperlukan agar Squid tidak perlu unencrypt lalu lintas HTTPS. Untuk mengaktifkan SslPeekAndSplice, Squid memerlukan sertifikat. Buat sertifikat ini menggunakan 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
catatan

Untuk HTTP, Squid tidak memerlukan konfigurasi. Dari semua pesan permintaan HTTP/1.1, dapat mengambil kolom header host, yang menentukan host internet yang sedang diminta.

Jalankan CodeBuild di server proxy eksplisit

Untuk menjalankanAWS CodeBuilddi server proxy eksplisit, Anda harus mengkonfigurasi server proxy untuk mengizinkan atau menolak lalu lintas ke dan dari situs eksternal, dan kemudian mengkonfigurasiHTTP_PROXYdanHTTPS_PROXYvariabel lingkungan.

Mengkonfigurasi Squid sebagai server proxy eksplisit

Untuk mengkonfigurasi server proxy Squid menjadi eksplisit, Anda harus membuat modifikasi berikut untuk nya/etc/squid/squid.confFile:

  • Hapus aturan daftar kontrol akses default berikut.

    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

    Tambahkan yang berikut di tempat aturan ACL default yang Anda hapus. Baris pertama memungkinkan permintaan dari VPC Anda. Dua baris berikutnya memberikan akses server proxy Anda ke URL tujuan yang mungkin digunakan olehAWS CodeBuild. Mengedit ekspresi reguler di baris terakhir untuk menentukan ember S3 atau repositori CodeCommit dalam sebuahAWSWilayah. Misalnya:

    • Jika sumber Anda adalah Amazon S3, gunakan perintahacl download_src dstdom_regex .*s3\.us-west-1\.amazonaws\.comuntuk memberikan akses ke ember S3 dius-west-1Wilayah.

    • Jika sumber AndaAWS CodeCommit, menggunakangit-codecommit.<your-region>.amazonaws.comuntuk menambahkanAWSWilayah ke daftar izinkan.

    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
  • Gantihttp_access allow localnetdengan hal berikut:

    http_access allow localnet allowed_sites http_access allow localnet download_src
  • Jika Anda ingin mengunggah log dan artefak, lakukan salah satu hal berikut:

    1. Sebelumhttp_access deny allpernyataan, masukkan pernyataan berikut. Mereka memungkinkan CodeBuild untuk mengakses CloudWatch dan Amazon S3. Akses ke CloudWatch diperlukan agar CodeBuild dapat membuat log CloudWatch. Akses ke Amazon S3 diperlukan untuk mengunggah artefak dan caching 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
      • Setelah Anda menyimpansquid.conf, jalankan perintah berikut:

        sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3130 sudo service squid restart
    2. Tambahkanproxyke file buildspec Anda. Untuk informasi selengkapnya, lihat Sintaks Buildspec.

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

Jika Anda menerima kesalahan timeout RequestError, lihat RequestError kesalahan batas waktu saat berjalan CodeBuild di server proxy.

Untuk informasi selengkapnya, lihat Contoh server proksisquid.conffail dalam topik ini.

Membuat proyek CodeBuild

Untuk menjalankanAWS CodeBuilddengan server proxy eksplisit Anda, aturHTTP_PROXYdanHTTPS_PROXYvariabel lingkungan dengan alamat IP pribadi instans EC2 yang Anda buat untuk server proxy dan port 3128 di tingkat proyek. Alamat IP pribadi terlihat sepertihttp://your-ec2-private-ip-address:3128. Untuk informasi selengkapnya, lihat Membuat proyek pembangunan diAWS CodeBuild dan Mengubah pengaturan proyek build diAWS CodeBuild.

Gunakan perintah berikut untuk menampilkan log akses proxy Squid:

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

Contoh server proksisquid.conffail

Berikut ini adalah contohsquid.conffile yang dikonfigurasi untuk server proxy eksplisit.

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

Jalankan CodeBuild di server proxy transparan

Untuk menjalankanAWS CodeBuilddi server proxy transparan, Anda harus mengkonfigurasi server proxy dengan akses ke situs web dan domain yang berinteraksi dengannya.

Mengkonfigurasi Squid sebagai server proxy transparan

Untuk mengkonfigurasi server proxy agar transparan, Anda harus memberikannya akses ke domain dan situs web yang ingin Anda akses. Untuk menjalankanAWS CodeBuilddengan server proxy transparan, Anda harus memberikan akses keamazonaws.com. Anda juga harus memberikan akses ke situs web lain CodeBuild menggunakan. Ini bervariasi, tergantung pada bagaimana Anda membuat proyek CodeBuild Anda. Contoh website adalah mereka untuk repositori seperti GitHub, Bitbucket, Yum, dan Maven. Untuk memberikan akses Squid ke domain dan situs web tertentu, gunakan perintah yang serupa dengan berikut ini untuk memperbaruisquid.conffile. Perintah sampel ini memberikan akses keamazonaws.com,github.com, danbitbucket.com. Anda dapat mengedit contoh ini untuk memberikan akses ke situs web lain.

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

Permintaan masuk dari instance di subnet pribadi harus dialihkan ke port Squid. Squid mendengarkan pada port 3129 untuk lalu lintas HTTP (bukan 80) dan 3130 untuk lalu lintas HTTPS (bukan 443). Menggunakaniptablesperintah untuk rute lalu lintas:

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

Membuat proyek CodeBuild

Setelah Anda mengkonfigurasi server proxy Anda, Anda dapat menggunakannya denganAWS CodeBuilddalam subnet pribadi tanpa konfigurasi lainnya. Setiap permintaan HTTP dan HTTPS berjalan melalui server proxy publik. Gunakan perintah berikut untuk menampilkan log akses proxy Squid:

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

Menjalankan pengelola paket dan alat lain di server proxy

Untuk menjalankan alat, seperti manajer paket, di server proxy
  1. Tambahkan alat ke daftar izinkan di server proxy Anda dengan menambahkan pernyataan kesquid.conffile.

  2. Tambahkan baris ke file buildspec Anda yang menunjuk ke titik akhir pribadi server proxy Anda.

Contoh-contoh berikut mendemonstrasikan cara melakukannyaapt-get,curl, danmaven. Jika Anda menggunakan alat yang berbeda, prinsip yang sama berlaku. Menambahkannya ke daftar memungkinkan disquid.conffile dan tambahkan perintah ke file buildspec Anda untuk membuat CodeBuild menyadari endpoint server proxy Anda.

Untuk menjalankanapt-getdi server proksi
  1. Tambahkan pernyataan berikutsquid.conffile untuk ditambahkanapt-getke daftar memungkinkan di server proxy Anda. Tiga baris pertama memungkinkanapt-getuntuk berjalan di lingkungan membangun.

    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. Tambahkan pernyataan berikut di file buildspec Anda sehinggaapt-getperintah mencari konfigurasi proxy di/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
Untuk menjalankancurldi server proksi
  1. Tambahkan yang berikut ini kesquid.conffile untuk ditambahkancurlke daftar memungkinkan di lingkungan build Anda.

    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. Tambahkan pernyataan berikut di file buildspec Andacurlmenggunakan server proxy pribadi untuk mengakses situs web yang Anda tambahkan kesquid.conf. Dalam contoh ini, situs webgoogle.com.

    curl -x <private-ip-of-proxy-server>:3128 https://www.google.com
Untuk menjalankanmavendi server proksi
  1. Tambahkan yang berikut ini kesquid.conffile untuk ditambahkanmavenke daftar memungkinkan di lingkungan build Anda.

    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. Tambahkan pernyataan berikut ke file buildspec Anda.

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