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 secara aman. Google Cloud
Tujuan
- Menyiapkan kunci SSH GitHub.
- Menambahkan kunci SSH publik ke kunci deployment repositori pribadi.
- Menyimpan kunci SSH pribadi di Secret Manager.
- Mengirim build yang mengakses kunci dari Secret Manager dan menggunakannya untuk mengakses repositori pribadi.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen yang dapat ditagih berikut Google Cloud:
- Secret Manager
- Cloud Build
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
- Login keakun Anda. Google Cloud Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Build and Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Build and Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init - Opsional. Selesaikan panduan memulai Secret Manager untuk memahami produk ini.
Membuat kunci SSH
Buka jendela terminal.
Buat direktori baru bernama
workingdirdan buka direktori tersebut:mkdir workingdir cd workingdirBuat kunci SSH GitHub yang baru, dengan github-email adalah alamat email GitHub Anda:
ssh-keygen -t rsa -b 4096 -N '' -f id_github -C github-emailPerintah ini membuat kunci SSH baru
workingdir/id_githubtanpa frasa sandi untuk kunci SSH Anda. Cloud Build tidak dapat menggunakan kunci SSH Anda jika dilindungi dengan frasa sandi.
Menyimpan kunci SSH pribadi di Secret Manager
Saat Anda membuat kunci SSH,
file id_github akan dibuat di lingkungan Anda. Karena siapa pun dapat melakukan autentikasi ke akun Anda dengan file ini, Anda harus menyimpan file di Secret Manager sebelum menggunakannya dalam build.
Untuk menyimpan kunci SSH di Secret Manager, lakukan hal berikut:
Buka halaman Secret Manager di Google Cloud konsol:
Di halaman Secret Manager, klik Create Secret.
Di halaman Create secret, di bagian Name, masukkan nama untuk secret tersebut.
Di kolom Secret value, klik Upload dan upload file
workingdir/id_githubAnda.Jangan ubah bagian Regions.
Klik tombol Create secret.
Tindakan ini akan mengupload file id_github Anda ke Secret Manager.
Menambahkan kunci SSH publik ke kunci deployment repositori pribadi Anda
Login ke GitHub.
Di sudut kanan atas, klik foto profil Anda, lalu klik Your profile.
Di halaman profil Anda, klik Repositories, lalu klik nama repositori Anda.
Dari repositori Anda, klik Settings.
Di sidebar, klik Deploy Keys, lalu klik Add deploy key.
Berikan judul, tempel kunci SSH publik Anda dari
workingdir/id_github.pub.Pilih Allow write access jika Anda ingin kunci ini memiliki akses tulis ke repositori. Kunci deployment dengan akses tulis memungkinkan deployment melakukan push ke repositori.
Klik Add key.
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.
-
Di Google Cloud konsol, buka halaman Permissions Cloud Build settings:
Dari menu drop-down, pilih akun layanan yang perannya ingin Anda ubah.
Tetapkan status peran
Secret Manager Secret Accessorke Enable.
Menambahkan kunci SSH publik ke host yang dikenal
Sebagian besar mesin berisi file bernama known_hosts, yang berisi kunci yang dikenal untuk host jarak jauh. Kunci sering kali dikumpulkan dari host jarak jauh saat terhubung ke host 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 (direktori yang sama dengan lokasi cloudbuild.yaml), buat file bernama known_hosts.github. File ini harus disertakan dalam kode sumber yang Anda kirimkan ke Cloud Build agar tersedia selama eksekusi build. Jika Anda menggunakan repositori Git dengan pemicu, Anda harus meng-commit file ini ke repositori Anda. Tambahkan kunci SSH publik ke file ini:
ssh-keyscan -t rsa github.com > known_hosts.github
Di bagian berikutnya saat Anda 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:
Buat file konfigurasi build bernama
cloudbuild.yamldengan dua langkah: langkahgcloudpertama mengakses kunci SSH di Secret Manager dan menyimpannya sebagaiid_rsadalam volume bernamassh, bersama dengan salinanknown_hosts.github. Volume digunakan untuk mempertahankan file di seluruh langkah build. Langkahgitkedua menggunakan kunci diid_rsauntuk terhubung ke repositori digit@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 sebelumnya dengan yang berikut ini:
GIT_USERNAME: Nama pengguna GitHub dari pemilik repositori.GIT_REPOSITORY: Nama repositori GitHub yang ingin Anda akses.PROJECT_ID: ID project tempat Anda menyimpan secret. Google CloudSECRET_NAME: Nama secret yang Anda buat di Secret Manager.
Untuk mempelajari string multiline YAML yang digunakan dalam cuplikan sebelumnya, lihat YAML multiline.
Mengirim build
Untuk mengirim 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:
- Di Google Cloud konsol, buka halaman Manage resources.
- Pada daftar project, pilih project yang Anda ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Menghapus kunci deployment dari repositori Anda
Di GitHub, buka halaman utama repositori.
Di bagian nama repositori Anda, klik Settings.
Di sidebar kiri, klik Deploy keys.
Di halaman Deploy keys , cari kunci deployment yang terkait dengan repositori Anda, lalu klik Delete.
Langkah berikutnya
- Pelajari cara membuat pemicu GitHub.
- Pelajari lebih lanjut cara menggunakan resource terenkripsi di Cloud Build.
- Pelajari lebih lanjut Secret Manager.