Cloud Key Management Service adalah layanan Google Cloud yang memungkinkan Anda mengelola dan menggunakan kunci kriptografis. Halaman ini menjelaskan cara menggunakan informasi terenkripsi dari Cloud KMS di Cloud Build.
Sebelum memulai
-
Aktifkan API Cloud Build and Cloud KMS.
Untuk menggunakan contoh command line dalam panduan ini, instal dan konfigurasi Google Cloud CLI.
Enkripsi informasi sensitif menggunakan Cloud KMS. Cloud KMS menyimpan konten terenkripsi Anda dalam file.
[OPSIONAL] Untuk mengonfigurasi build agar menggunakan data terenkripsi, konversikan ENCRYPTED_FILE menjadi base64 (langkah ini tidak diperlukan untuk konfigurasi build yang menggunakan file terenkripsi):
base64 ENCRYPTED_FILE
Izin IAM yang diperlukan
Berikan peran IAM Cloud KMS Bigtable Decrypter (roles/cloudkms.cryptoKeyDecrypter
) ke akun layanan Cloud Build:
Di konsol Google Cloud, buka halaman Settings Cloud Build:
Cari baris dengan peran Cloud KMS Bigtable Decrypter dan tetapkan Statusnya ke ENABLED.
Mengonfigurasi build untuk menggunakan data terenkripsi
Di direktori utama project, buat file konfigurasi build Cloud Build dengan nama
cloudbuild.yaml
ataucloudbuild.json
.Dalam file konfigurasi build Anda:
- Setelah semua build
steps
, tambahkan kolomavailableSecrets
untuk menentukan nilai terenkripsi sebagai variabel lingkungan dankmsKeyName
yang akan digunakan untuk mendekripsinya. Anda dapat menggunakan variabel substitusi dalam nilaikmsKeyName
. - 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 rahasia. - Tambahkan kolom
secretEnv
yang menentukan variabel lingkungan untuk nilai terenkripsi. - Di kolom
args
, tambahkan tanda-c
sebagai argumen pertama. Setiap string yang Anda teruskan setelah -c diperlakukan sebagai perintah. Untuk mengetahui informasi selengkapnya tentang menjalankan perintah bash dengan -c, lihat dokumentasi bash. - Saat menentukan nilai yang dienkripsi di kolom
args
, tentukan nilai tersebut menggunakan variabel lingkungan yang diawali dengan$$
.
- Tambahkan kolom
Contoh file konfigurasi build berikut menunjukkan cara login ke Docker dan mengambil image pribadi:
YAML
steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker login --username=$$USERNAME --password=$$PASSWORD'] secretEnv: ['USERNAME', 'PASSWORD'] - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker pull $$USERNAME/IMAGE:TAG'] secretEnv: ['USERNAME'] availableSecrets: inline: - kmsKeyName: projects/PROJECT_ID/locations/global/keyRings/USERNAME_KEYRING_NAME/cryptoKeys/USERNAME_KEY_NAME envMap: USERNAME: 'ENCRYPTED_USERNAME' - kmsKeyName: projects/PROJECT_ID/locations/global/keyRings/PASSWORD_KEYRING_NAME/cryptoKeys/PASSWORD_KEY_NAME envMap: PASSWORD: 'ENCRYPTED_PASSWORD'
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=$$USERNAME --password=$$PASSWORD" ], "secretEnv": [ "USERNAME", "PASSWORD" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker pull $$USERNAME/REPOSITORY:TAG" ], "secretEnv": [ "USERNAME" ] } ], "availableSecrets": { "inline": [{ "kmsKeyName": "projects/PROJECT_ID/locations/global/keyRings/USERNAME_KEYRING_NAME/cryptoKeys/USERNAME_KEY_NAME", "envMap": { "USERNAME": "ENCRYPTED_USERNAME" } }, { "kmsKeyName": "projects/PROJECT_ID/locations/global/keyRings/PASSWORD_KEYRING_NAME/cryptoKeys/PASSWORD_KEY_NAME", "envMap": { "PASSWORD": "ENCRYPTED_PASSWORD" } }] } }
Ganti nilai placeholder dalam perintah di atas dengan perintah berikut:
PROJECT_ID
: ID project Google Cloud yang berisi layanan Cloud KMS Anda.USERNAME_KEYRING_NAME
: Nama key ring dari nama pengguna Docker Anda.USERNAME_KEY_NAME
: Nama kunci nama pengguna Docker Anda.ENCRYPTED_USERNAME
: Nama pengguna Docker terenkripsi dalam format base64.PASSWORD_KEYRING_NAME
: Nama key ring sandi Docker Anda.PASSWORD_KEY_NAME
: Nama kunci sandi Docker Anda.ENCRYPTED_PASSWORD
: Sandi Docker terenkripsi dalam format base64.REPOSITORY
: Nama repositori Docker tempat Anda mengambil image.TAG
: Nama tag gambar Anda.
- Setelah semua build
Gunakan file konfigurasi build untuk memulai build secara manual atau untuk mengotomatiskan build menggunakan pemicu.
Mengonfigurasi build untuk menggunakan file terenkripsi
Di direktori utama project, buat file konfigurasi build Cloud Build dengan nama
cloudbuild.yaml
ataucloudbuild.json
.Pada file konfigurasi build, sebelum langkah build apa pun yang berinteraksi dengan file yang didekripsi, tambahkan langkah build
gcloud
untuk mendekripsi file terenkripsi menggunakan kunci enkripsi. Contoh file konfigurasi build berikut menunjukkan cara login ke Docker menggunakan file terenkripsi dengan sandi Docker:YAML
steps: - name: gcr.io/cloud-builders/gcloud args: - kms - decrypt - "--ciphertext-file=ENCRYPTED_PASSWORD_FILE" - "--plaintext-file=PLAINTEXT_PASSWORD_FILE" - "--location=global" - "--keyring=KEYRING_NAME" - "--key=KEY_NAME" - name: gcr.io/cloud-builders/docker entrypoint: bash args: - "-c" - docker login --username=DOCKER_USERNAME --password-stdin < PLAINTEXT_PASSWORD_FILE
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/gcloud", "args": [ "kms", "decrypt", "--ciphertext-file=ENCRYPTED_PASSWORD_FILE", "--plaintext-file=PLAINTEXT_PASSWORD_FILE", "--location=global", "--keyring=KEYRING_NAME", "--key=KEY_NAME" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=DOCKER_USERNAME --password-stdin < PLAINTEXT_PASSWORD_FILE" ] } ] }
Ganti nilai placeholder dalam perintah di atas dengan perintah berikut:
KEYRING_NAME
: Nama key ring sandi Docker Anda.KEY_NAME
: Nama kunci sandi Docker Anda.ENCRYPTED_PASSWORD_FILE
: File terenkripsi dengan sandi Docker Anda.PLAINTEXT_PASSWORD_FILE
: File teks biasa dengan sandi Docker Anda.
Gunakan file konfigurasi build untuk memulai build secara manual atau untuk mengotomatiskan build menggunakan pemicu.
Mengonfigurasi build untuk menggunakan data terenkripsi (lama)
Untuk mengenkripsi data sensitif menggunakan Cloud KMS dan menggunakan data tersebut dalam file konfigurasi build:
Di file konfigurasi build, tambahkan kolom
secrets
untuk menentukan nilai yang dienkripsi danCryptoKey
yang akan digunakan untuk mendekripsinya. Kemudian, pada langkah build tempat Anda ingin menggunakan variabel terenkripsi, tambahkan kolomsecretEnv
untuk menentukan variabel sebagai variabel lingkungan. Sertakan nama variabel di kolomsecretEnv
. Jika Anda menentukan nilai variabel, atau variabel lingkungan non-rahasia dengan nama yang sama, Cloud Build akan menampilkan error.YAML
steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker login --username=user-name --password=$$PASSWORD'] secretEnv: ['PASSWORD'] - name: 'gcr.io/cloud-builders/docker' args: ['push', 'user-name/myubuntu'] secrets: - kmsKeyName: projects/project-id/locations/global/keyRings/keyring-name/cryptoKeys/key-name secretEnv: PASSWORD: 'encrypted-password'
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=user-name --password=$$PASSWORD" ], "secretEnv": [ "PASSWORD" ] }, { "name": "gcr.io/cloud-builders/docker", "args": [ "push", "user-name/myubuntu" ] } ], "secrets": [ { "kmsKeyName": "projects/project-id/locations/global/keyRings/keyring-name/cryptoKeys/key-name", "secretEnv": { "PASSWORD": "encrypted-password" } } ] }
Langkah selanjutnya
- Pelajari cara mengonfigurasi build untuk mengakses secret dari Secret Manager.
- Pelajari cara mengakses repositori GitHub pribadi.