Halaman ini menjelaskan cara menyertakan informasi sensitif seperti sandi dan kunci API di Cloud Build.
Secret Manager adalah layanan Google Cloud yang menyimpan kunci API, sandi, dan data sensitif lainnya dengan aman. Untuk menyertakan informasi sensitif dalam build, Anda dapat menyimpan informasi tersebut di Secret Manager, lalu mengonfigurasi build untuk mengakses informasi tersebut dari Secret Manager.
Sebelum memulai
-
Aktifkan API Cloud Build and Secret Manager.
Untuk menggunakan contoh command line dalam panduan ini, instal dan konfigurasi Google Cloud CLI.
Pastikan Anda sudah menyimpan rahasia di Secret Manager. Untuk mengetahui petunjuknya, lihat Membuat secret.
- Catat nama rahasia dan versi rahasianya. Anda akan memerlukan informasi ini untuk mengonfigurasi Cloud Build agar dapat mengakses secret.
Izin IAM yang diperlukan
Berikan peran IAM Secret Manager Secret Accessor (roles/secretmanager.secretAccessor
) untuk secret ke akun layanan Cloud Build:
Buka halaman Secret Manager di konsol Google Cloud:
Pilih kotak centang rahasia yang ingin Anda gunakan dalam build.
Jika belum terbuka, klik Tampilkan panel info untuk membuka panel.
Di panel, pada Izin, klik Tambahkan akun utama.
Di kotak teks New principals, masukkan alamat email akun layanan Cloud Build dengan format
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
.PROJECT_NUMBER
adalah nomor project tempat Anda menjalankan build. Anda dapat menemukan nomor project di halaman Setelan project.Di kotak drop-down Select a role, pilih Secret Manager Secret Accessor.
Klik Simpan.
Mengonfigurasi build untuk mengakses secret UTF-8 dari Secret Manager
Di direktori utama project, buat file konfigurasi Cloud Build bernama
cloudbuild.yaml
ataucloudbuild.json
.Dalam file konfigurasi build:
- Setelah semua build
steps
, tambahkan kolomavailableSecrets
untuk menentukan versi secret dan variabel lingkungan yang akan digunakan untuk secret Anda. Anda dapat menyertakan variabel substitusi dalam nilai kolomsecretVersion
. Anda dapat menentukan lebih dari satu secret dalam build. - Pada langkah build tempat Anda ingin menentukan secret:
- Tambahkan kolom
entrypoint
yang mengarah kebash
untuk menggunakan alat bash di langkah build. Ini diperlukan untuk merujuk ke variabel lingkungan untuk secret. - Tambahkan kolom
secretEnv
yang menentukan variabel lingkungan. - Di kolom
args
, tambahkan tanda-c
sebagai argumen pertama. Setiap string yang Anda teruskan setelah-c
akan diperlakukan sebagai perintah. Untuk mengetahui informasi selengkapnya tentang cara menjalankan perintah bash dengan-c
, lihat dokumentasi bash. - Saat menentukan secret di kolom
args
, tentukan menggunakan variabel lingkungan yang diawali dengan$$
.
- Tambahkan kolom
Contoh file konfigurasi build berikut menunjukkan cara login ke Docker menggunakan nama pengguna dan sandi Docker yang disimpan di Secret Manager.
YAML
steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker login --username=$$USERNAME --password=$$PASSWORD'] secretEnv: ['USERNAME', 'PASSWORD'] availableSecrets: secretManager: - versionName: projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION env: 'PASSWORD' - versionName: projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION env: 'USERNAME'
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=$$USERNAME --password=$$PASSWORD" ], "secretEnv": [ "USERNAME", "PASSWORD" ] } ], "availableSecrets": { "secretManager": [{ "versionName": "projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION", "env": "PASSWORD" }, { "versionName": "projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION", "env": "USERNAME" }] } }
Ganti nilai placeholder dalam perintah di atas dengan perintah berikut:
PROJECT_ID
: ID project Google Cloud tempat Anda menyimpan secret.DOCKER_USERNAME_SECRET_NAME
: Nama rahasia yang sesuai dengan nama pengguna Docker Anda. Anda bisa mendapatkan nama rahasia dari halaman Secret Manager di konsol Google Cloud.DOCKER_USERNAME_SECRET_VERSION
: Versi rahasia nama pengguna Docker Anda. Anda bisa mendapatkan versi secret dengan mengklik nama secret di halaman Secret Manager di konsol Google Cloud.DOCKER_PASSWORD_SECRET_NAME
: Nama rahasia yang sesuai dengan sandi Docker Anda. Anda bisa mendapatkan nama rahasia dari halaman Secret Manager di konsol Google Cloud.DOCKER_PASSWORD_SECRET_VERSION
: Versi rahasia sandi Docker Anda. Anda bisa mendapatkan versi secret dengan mengklik nama secret di halaman Secret Manager di konsol Google Cloud.
- Setelah semua build
Gunakan file konfigurasi build untuk memulai build menggunakan command line atau untuk mengotomatiskan build menggunakan pemicu.
Contoh: Mengakses secret dari skrip dan proses
Kolom secretEnv
menambahkan nilai secret ke lingkungan, dan Anda dapat mengakses nilai ini melalui variabel lingkungan dari skrip atau proses:
YAML
steps:
- name: python:slim
entrypoint: python
args: ['main.py']
secretEnv: ['MYSECRET']
availableSecrets:
secretManager:
- versionName: projects/$PROJECT_ID/secrets/mySecret/versions/latest
env: 'MYSECRET'
JSON
{
"steps": [
{
"name": "python:slim",
"entrypoint": "python",
"args": [
"main.py"
],
"secretEnv": [
"MYSECRET"
]
}
],
"availableSecrets": {
"secretManager": [
{
"versionName": "projects/$PROJECT_ID/secrets/mySecret/versions/latest",
"env": "MYSECRET"
}
]
}
}
Konten main.py
berikut akan mencetak lima karakter pertama secret:
import os
print(os.environ.get("MYSECRET", "Not Found")[:5], "...")
Contoh: mengautentikasi ke Docker
Dalam beberapa situasi, sebelum berinteraksi dengan image Docker, build Anda perlu melakukan autentikasi ke Docker. Misalnya, autentikasi Docker diperlukan agar build dapat mengambil image pribadi dan mengirim image pribadi atau publik ke Docker Hub. Dalam kasus ini, Anda dapat menyimpan nama pengguna dan sandi Docker di Secret Manager, lalu mengonfigurasi Cloud Build untuk mengakses nama pengguna dan sandi dari Secret Manager. Untuk mengetahui petunjuk cara melakukannya, lihat bagian Berinteraksi dengan image Docker Hub.
Contoh: Pembuatan permintaan pull GitHub
Contoh lain yang memungkinkan Anda mengonfigurasi build untuk mengakses informasi sensitif dari Secret Manager adalah dengan membuat permintaan pull GitHub sebagai respons terhadap build. Untuk melakukan ini:
- Buat token GitHub.
- Simpan token GitHub di Secret Manager.
- Di file konfigurasi build:
- Setelah semua build
steps
, tambahkan kolomavailableSecrets
untuk menentukan versi secret dan variabel lingkungan yang akan digunakan untuk token GitHub. - Tambahkan langkah build untuk memanggil perintah untuk membuat permintaan pull GitHub.
- Setelah semua build
- Buat pemicu aplikasi GitHub dan gunakan file konfigurasi build untuk memanggil pemicu.
Contoh file konfigurasi berikut menunjukkan cara membuat permintaan pull GitHub menggunakan token GitHub:
YAML
steps:
- name: 'launcher.gcr.io/google/ubuntu1604'
id: Create GitHub pull request
entrypoint: bash
args:
- -c
- curl -X POST -H "Authorization:Bearer $$GH_TOKEN" -H 'Accept:application/vnd.github.v3+json' https://api.github.com/repos/GITHUB_USERNAME/REPO_NAME/pulls -d '{"head":"HEAD_BRANCH","base":"BASE_BRANCH", "title":"NEW_PR"}'
secretEnv: ['GH_TOKEN']
availableSecrets:
secretManager:
- versionName: projects/PROJECT_ID/secrets/GH_TOKEN_SECRET_NAME/versions/latest
env: GH_TOKEN
JSON
{
"steps": [
{
"name": "launcher.gcr.io/google/ubuntu1604",
"id": "Create GitHub pull request",
"entrypoint": "bash",
"args": [
"-c",
"curl -X POST -H \"Authorization:Bearer $$GH_TOKEN\" -H 'Accept:application/vnd.github.v3+json' https://api.github.com/repos/GITHUB_USERNAME/REPO_NAME -d '{\"head\":\"HEAD_BRANCH\",\"base\":\"BASE_BRANCH\", \"title\":\"NEW_PR\"}'
],
"secretEnv": ['GH_TOKEN']
}
],
"availableSecrets": {
"secretManager": [
{
"versionName": "projects/PROJECT_ID/secrets/GH_TOKEN_SECRET_NAME/versions/latest",
"env": "GH_TOKEN"
}
]
}
}
Ganti nilai placeholder dalam perintah di atas dengan perintah berikut:
PROJECT_ID
: ID project Google Cloud tempat Anda menyimpan secret.GITHUB_USERNAME
: Nama pengguna GitHub dari pemilik repositori.REPO_NAME
: Nama repositori GitHub.HEAD_BRANCH
: Nama cabang tempat perubahan diimplementasikan. Untuk permintaan pull lintas repositori dalam jaringan yang sama, beri namespacehead
dengan pengguna seperti ini:username:branch
.BASE_BRANCH
: Nama cabang tempat Anda ingin menarik perubahan. Ini harus berupa cabang yang ada pada repositori saat ini. Anda tidak dapat mengirimkan permintaan pull ke satu repositori yang meminta penggabungan ke basis repositori lain.GH_TOKEN_SECRET_NAME
: Nama rahasia yang sesuai dengan token GitHub Anda.NEW_PR
: Permintaan pull baru yang ingin Anda buat.
Mengonfigurasi build untuk mengakses secret non-UTF-8 dari Secret Manager
Dalam file konfigurasi build, tambahkan langkah build untuk mengakses versi secret di Secret Manager dan menyimpannya dalam file. Langkah build berikut mengakses secret-name dan menyimpannya dalam file bernama decrypted-data.txt:
YAML
steps: - name: gcr.io/cloud-builders/gcloud entrypoint: 'bash' args: [ '-c', "gcloud secrets versions access latest --secret=secret-name --format='get(payload.data)' | tr '_-' '/+' | base64 -d > decrypted-data.txt" ]
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/gcloud", "entrypoint": "bash", "args": [ "-c", "gcloud secrets versions access latest --secret=secret-name --format='get(payload.data)' | tr '_-' '/+' | base64 -d > decrypted-data.txt" ] } ] }
Menggunakan file dengan data yang didekripsi dalam langkah build. Cuplikan kode berikut menggunakan decrypted-data.txt untuk login ke registry Docker pribadi:
YAML
steps: - name: gcr.io/cloud-builders/gcloud entrypoint: 'bash' args: [ '-c', "gcloud secrets versions access latest --secret=secret-name --format='get(payload.data)' | tr '_-' '/+' | base64 -d > decrypted-data.txt" ] - name: gcr.io/cloud-builders/docker entrypoint: 'bash' args: [ '-c', 'docker login --username=my-user --password-stdin < decrypted-data.txt']
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/gcloud", "entrypoint": "bash", "args": [ "-c", "gcloud secrets versions access latest --secret=secret-name --format='get(payload.data)' | tr '_-' '/+' | base64 -d > password.txt" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=my-user --password-stdin < decrypted-data.txt" ] } ] }
Gunakan file konfigurasi build untuk memulai build menggunakan command line atau untuk mengotomatiskan build menggunakan pemicu.
Langkah selanjutnya
- Pelajari cara menggunakan kredensial terenkripsi dalam build.
- Pelajari cara mengakses repositori GitHub pribadi.