
Bạn muốn login vào 1 service nào đó khi build. Service đó yêu cầu mật khẩu nhưng bạn lại không muốn mọi người biết mật khẩu của mình. KMS là cách bạn bảo vệ mật khẩu khi build với GCP CloudBuild
Tóm tắt nội dung:
- Sử dụng KMS mã hoá mật khẩu
- Dùng mật khẩu đã mã hoá vào CloudBuild
1. Sử dụng KMS mã hoá mật khẩu
Thông tin về KMS các bạn có thể xem tại https://cloud.google.com/security-key-management
1.1 Sử dụng câu lệnh sau để tạo keyring-name
(ví dụ: password) :
gcloud kms keyrings create password --location global
1.2 Sau đó tạo key-name
(ví dụ: classfunc-expo-password ) trong keyring-name
đã tạo ở 1.1:
gcloud kms keys create classfunc-expo-password \ --location global --keyring password \ --purpose encryption
1.3 Có key-name
và keyring-name
rồi mình đi mã hoá password (ví dụ: password=my_pass_123)
echo -n my_pass_123 | gcloud kms encrypt --plaintext-file=- \ --ciphertext-file=- --location=global --keyring=password \ --key=classfunc-expo-password | base64
Sau đó trên terminal của bạn sẽ xuất hiện 1 đoạn base64 có dạng như CiQAlgNzMeYBOrMeZzddaUhyBG0ep...
, đó chính là mật khẩu đã được mã hoá của bạn.
2. Dùng mật khẩu đã mã hoá vào CloudBuild
2.1 Thêm trường secrets
vào cloudbuild.yaml
. Có thể thay PASSWORD
bằng bất kỳ tên nào khác.
steps: ... secrets: - kmsKeyName: projects/project-id/locations/global/keyRings/password/cryptoKeys/classfunc-expo-password secretEnv: PASSWORD: 'đoạn mã base64 trên'
2.2 Sử dụng trong các steps
như sau:
steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker login --username=user-name --password=$$PASSWORD'] secretEnv: ['PASSWORD']
Hoặc ví dụ như khi login expo sẽ có sẵn các biến môi trường mà expo-cli định sẵn thì có thể dùng như sau (giả sử có secrectEnv là EXPO_CLI_PASSWORD
):
steps: - name: 'gcr.io/classfunc-com/expo' args: [ 'login','-u','classfunc' ] # expo login secretEnv: [ 'EXPO_CLI_PASSWORD' ]
Để kiểm tra thành quả của mình:
gcloud builds submit .
Chúc các bạn thành công. 👍