Mengakses GitHub dari build melalui kunci SSH


Tutorial ini menunjukkan cara menggunakan Secret Manager dengan Cloud Build untuk mengakses repositori GitHub pribadi dari build. Secret Manager adalah layanan yang menyimpan kunci API, sandi, dan data sensitif lainnya dengan aman. Google Cloud

Tujuan

  • Siapkan kunci SSH GitHub.
  • Tambahkan kunci SSH publik ke kunci deployment repositori pribadi.
  • Simpan kunci SSH pribadi di Secret Manager.
  • Kirimkan build yang mengakses kunci dari Secret Manager dan menggunakannya untuk mengakses repositori pribadi.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

  • Secret Manager
  • Cloud Build

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Build and Secret Manager APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  7. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Build and Secret Manager APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  13. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  14. Opsional. Selesaikan panduan memulai Secret Manager untuk memahami produk ini.
  15. Membuat kunci SSH

    1. Buka jendela terminal.

    2. Buat direktori baru bernama workingdir dan buka direktori tersebut:

      mkdir workingdir
      cd workingdir
      
    3. Buat kunci SSH GitHub baru, dengan github-email adalah alamat email GitHub Anda:

      ssh-keygen -t rsa -b 4096 -N '' -f id_github -C github-email
      

      Perintah ini membuat kunci SSH workingdir/id_github baru tanpa frasa sandi untuk kunci SSH Anda. Cloud Build tidak dapat menggunakan kunci SSH Anda jika dilindungi dengan frasa sandi.

    Simpan kunci SSH pribadi di Secret Manager

    Saat Anda membuat kunci SSH, file id_github akan dibuat di lingkungan Anda. Karena siapa pun dapat mengautentikasi akun Anda dengan file ini, Anda harus menyimpan file di Secret Manager sebelum menggunakannya dalam build.

    1. Untuk menyimpan kunci SSH Anda di Secret Manager:

      1. Buka halaman Secret Manager di konsol Google Cloud :

        Buka halaman Secret Manager

      2. Di halaman Secret Manager, klik Buat Secret.

      3. Di halaman Buat secret, di bagian Nama, masukkan nama untuk secret tersebut.

      4. Di kolom Nilai rahasia, klik Upload dan upload file workingdir/id_github Anda.

      5. Jangan ubah bagian Wilayah.

      6. Klik tombol Buat secret.

    Tindakan ini akan mengupload file id_github Anda ke Secret Manager.

    Menambahkan kunci SSH publik ke kunci deployment repositori pribadi Anda

    1. Login ke GitHub.

    2. Di sudut kanan atas, klik foto profil Anda, lalu klik Profil Anda.

    3. Di halaman profil Anda, klik Repositories, lalu klik nama repositori Anda.

    4. Dari repositori Anda, klik Setelan.

    5. Di sidebar, klik Deploy Keys, lalu klik Add deploy key.

    6. Berikan judul, tempel kunci SSH publik Anda dari workingdir/id_github.pub.

    7. Pilih Izinkan akses tulis jika Anda ingin kunci ini memiliki akses tulis ke repositori. Kunci deployment dengan akses tulis memungkinkan deployment melakukan push ke repositori.

    8. Klik Add key.

    9. Hapus kunci SSH dari disk Anda:

      rm id_github*
      

    Memberikan izin

    Anda harus memberikan izin untuk mengakses Secret Manager ke akun layanan yang Anda gunakan untuk build.

    1. Buka halaman Setelan Cloud Build:

      Buka halaman Setelan Cloud Build

    2. Dari menu drop-down, pilih akun layanan yang perannya ingin Anda ubah.

    3. Tetapkan status peran Secret Manager Secret Accessor ke Aktifkan.

    Menambahkan kunci SSH publik ke host yang dikenal

    Sebagian besar komputer berisi file bernama known_hosts, yang berisi kunci yang diketahui untuk host jarak jauh. Kunci sering kali dikumpulkan dari host jarak jauh saat menghubungkan ke host tersebut untuk pertama kalinya, tetapi juga dapat ditambahkan secara manual. Kunci dalam file ini digunakan untuk memverifikasi identitas host jarak jauh dan melindungi dari peniruan identitas.

    Agar Cloud Build dapat terhubung ke GitHub, Anda harus menambahkan kunci SSH publik ke file known_hosts di lingkungan build Cloud Build. Anda dapat melakukannya dengan menambahkan kunci ke file known_hosts.github sementara, lalu menyalin konten known_hosts.github ke file known_hosts di lingkungan build Cloud Build.

    Di direktori workingdir, buat file bernama known_hosts.github dan tambahkan kunci SSH publik ke file ini:

    ssh-keyscan -t rsa github.com > known_hosts.github
    

    Di bagian berikutnya saat mengonfigurasi build, Anda akan menambahkan petunjuk dalam file konfigurasi Cloud Build untuk menyalin konten known_hosts.github ke file known_hosts di lingkungan build Cloud Build.

    Mengonfigurasi build

    Untuk mengonfigurasi build:

    1. Buat file konfigurasi build bernama cloudbuild.yaml dengan dua langkah: langkah pertama gcloud mengakses kunci SSH di Secret Manager dan menyimpannya sebagai id_rsa dalam volume bernama ssh, bersama dengan salinan known_hosts.github. Volume digunakan untuk mempertahankan file di seluruh langkah build. Langkah git kedua menggunakan kunci di id_rsa untuk terhubung ke repositori di git@github.com:git-username/git-repository.

      # Access the id_github file from Secret Manager, and setup SSH
      steps:
      - name: 'gcr.io/cloud-builders/git'
        secretEnv: ['SSH_KEY']
        entrypoint: 'bash'
        args:
        - -c
        - |
          echo "$$SSH_KEY" >> /root/.ssh/id_rsa
          chmod 400 /root/.ssh/id_rsa
          cp known_hosts.github /root/.ssh/known_hosts
        volumes:
        - name: 'ssh'
          path: /root/.ssh
      
      # Clone the repository
      - name: 'gcr.io/cloud-builders/git'
        args:
        - clone
        - --recurse-submodules
        - git@github.com:GIT_USERNAME/GIT_REPOSITORY
        volumes:
        - name: 'ssh'
          path: /root/.ssh
      
      availableSecrets:
        secretManager:
        - versionName: projects/PROJECT_ID/secrets/SECRET_NAME/versions/latest
          env: 'SSH_KEY'
      

    Ganti nilai placeholder dalam perintah di atas dengan nilai berikut:

    • GIT_USERNAME: Nama pengguna GitHub pemilik repositori.
    • GIT_REPOSITORY: Nama repositori GitHub yang ingin Anda akses.
    • PROJECT_ID: ID project Google Cloud tempat Anda menyimpan secret.
    • SECRET_NAME: Nama secret yang Anda buat di Secret Manager.

    Untuk mempelajari string multiline YAML yang digunakan dalam cuplikan di atas, lihat Multiline YAML.

    Kirimkan build

    Untuk mengirimkan build, jalankan perintah berikut:

    gcloud builds submit --config=cloudbuild.yaml .
    

    Outputnya mirip dengan hal berikut ini:

    Creating temporary tarball archive of 3 file(s) totalling 4.1 KiB before compression.
    Uploading tarball of [.] to [gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz]
    Created [https://cloudbuild.googleapis.com/v1/projects/[PROJECT-ID]/builds/871b68bc---].
    Logs are available at [https://console.cloud.google.com/cloud-build/builds/871b68bc---?project=[PROJECT-ID]].
    ----------------------------- REMOTE BUILD OUTPUT ------------------------------
    starting build "871b68bc-cefc-4411-856c-2a2b7c7d2487"
    
    FETCHSOURCE
    Fetching storage object: gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz#1504288640827178
    Copying gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz#1504288640827178...
    / [1 files][  3.9 KiB/  3.9 KiB]
    Operation completed over 1 objects/3.9 KiB.
    BUILD
    Step #0: Already have image (with digest): gcr.io/cloud-builders/gcloud
    Starting Step #0
    Finished Step #0
    Step #1: Already have image (with digest): gcr.io/cloud-builders/git
    Starting Step #1
    Step #1: # github.com SSH-2.0-libssh_0.7.0
    Finished Step #1
    Step #2: Already have image (with digest): gcr.io/cloud-builders/git
    Starting Step #2
    Step #2: Cloning into '[REPOSITORY-NAME]'...
    Step #2: Warning: Permanently added the RSA host key for IP address 'XXX.XXX.XXX.XXX' to the list of known hosts.
    Finished Step #2
    PUSH
    DONE
    -----------------------------------------------------------------------------------------------------------------
    
    ID                                    CREATE_TIME                DURATION  SOURCE                                                                              IMAGES  STATUS
    871b68bc-cefc-4411-856c-2a2b7c7d2487  XXXX-XX-XXT17:57:21+00:00  13S       gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz  -                                 SUCCESS
    

    Pembersihan

    Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

    Menghapus project

    Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

    Untuk menghapus project:

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    Menghapus kunci deployment dari repositori Anda

    1. Di GitHub, buka halaman utama repositori.

    2. Di bagian nama repositori Anda, klik Settings.

    3. Di sidebar kiri, klik Deploy keys.

    4. Di halaman Deploy keys, cari kunci deployment yang terkait dengan repositori Anda, lalu klik Delete.

    Langkah berikutnya