Tutorial ini menunjukkan cara menggunakan Secret Manager dengan Cloud Build untuk mengakses repositori GitHub pribadi dari build. Secret Manager adalah layanan Google Cloud yang menyimpan kunci API, sandi, dan data sensitif lainnya dengan aman.
Tujuan
- Siapkan kunci SSH GitHub.
- Menambahkan kunci SSH publik ke kunci deploy repositori pribadi.
- Simpan kunci SSH pribadi di Secret Manager.
- Kirim build yang mengakses kunci dari Secret Manager dan gunakan untuk mengakses repositori pribadi.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
- Secret Manager
- Cloud Build
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
- 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Cloud Build and Secret Manager.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Cloud Build and Secret Manager.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Opsional. Selesaikan panduan memulai Secret Manager untuk memahami produk ini.
Membuat kunci SSH
Buka jendela terminal.
Buat direktori baru bernama
workingdir
lalu bukalah:mkdir workingdir cd workingdir
Buat kunci SSH GitHub baru, dengan github-email sebagai alamat email GitHub Anda:
ssh-keygen -t rsa -b 4096 -N '' -f id_github -C github-email
Perintah ini akan membuat kunci SSH baru
workingdir/id_github
tanpa frasa sandi untuk kunci SSH Anda. Cloud Build tidak dapat menggunakan kunci SSH jika dilindungi dengan frasa sandi.
Menyimpan kunci SSH pribadi di Secret Manager
Saat 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 di build.
Untuk menyimpan kunci SSH di Secret Manager:
Buka halaman Secret Manager di konsol Google Cloud:
Di halaman Secret Manager, klik Create Secret.
Di halaman Buat rahasia, di bagian Nama, masukkan nama untuk rahasia tersebut.
Di kolom Secret value, klik Upload dan upload file
workingdir/id_github
Anda.Jangan ubah bagian Regions.
Klik tombol Buat secret.
Tindakan ini akan mengupload file id_github
Anda ke Secret Manager.
Menambahkan kunci SSH publik ke kunci deploy repositori pribadi
Login ke GitHub.
Di sudut kanan atas, klik foto profil Anda, lalu klik Profil Anda.
Di halaman profil, 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 Izinkan akses tulis jika Anda ingin kunci ini memiliki akses tulis ke repositori. Kunci deploy dengan akses tulis memungkinkan pengiriman deployment ke repositori.
Klik Tambahkan Kunci.
Hapus kunci SSH dari disk Anda:
rm id_github*
Memberikan izin
Anda perlu memberikan izin kepada akun layanan Cloud Build untuk mengakses Secret Manager selama proses build.
Buka halaman IAM di Konsol Google Cloud:
Pilih project Anda lalu klik Buka.
Di tabel izin, temukan akhiran email dengan
@cloudbuild.gserviceaccount.com
, lalu klik ikon pensil.Tambahkan peran
Secret Manager Secret Accessor
.Klik Save.
Menambahkan kunci SSH publik ke host yang dikenal
Sebagian besar mesin berisi file bernama known_hosts
, yang berisi kunci yang diketahui untuk host jarak jauh. Kunci sering kali dikumpulkan dari host jarak jauh saat terhubung
ke host tersebut untuk pertama kalinya, tetapi kunci tersebut 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.
Dalam 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:
Buat file konfigurasi build bernama
cloudbuild.yaml
dengan dua langkah: langkahgcloud
pertama mengakses kunci SSH di Secret Manager dan menyimpannya sebagaiid_rsa
dalam volume bernamassh
, beserta salinanknown_hosts.github
. Volume digunakan untuk mempertahankan file di seluruh langkah build. Langkahgit
kedua menggunakan kunci diid_rsa
untuk 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 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 rahasia.SECRET_NAME
: Nama rahasia yang Anda buat di Secret Manager.
Untuk mempelajari string multibaris YAML yang digunakan dalam cuplikan di atas, lihat Multiline YAML.
Mengirim 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:
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Menghapus kunci deploy 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 deploy yang terkait dengan repositori Anda, lalu klik Delete.
Langkah selanjutnya
- Pelajari cara membuat pemicu GitHub.
- Pelajari lebih lanjut cara menggunakan resource terenkripsi di Cloud Build.
- Pelajari Secret Manager lebih lanjut.