๊ธฐ๋ณธ์ ์ผ๋ก Secret Manager๋ ์ ์ฅ ์ค ๊ณ ๊ฐ ์ฝํ ์ธ ๋ฅผ ์ํธํํฉ๋๋ค. Secret Manager๋ ์ฌ์ฉ์ ์ธก์ ์ถ๊ฐ ์์ ์์ด ์๋์ผ๋ก ์ํธํ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ด ์ต์ ์ Google ๊ธฐ๋ณธ ์ํธํ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์ํธํ ํค๋ฅผ ์ ์ดํ๋ ค๋ฉด Secret Manager๋ฅผ ํฌํจํ CMEK ํตํฉ ์๋น์ค์ ํจ๊ป Cloud KMS์์ ๊ณ ๊ฐ ๊ด๋ฆฌ ์ํธํ ํค(CMEK)๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. Cloud KMS ํค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณดํธ ์์ค, ์์น, ์ํ ์ผ์ , ์ฌ์ฉ ๋ฐ ์ก์ธ์ค ๊ถํ, ์ํธํ ๊ฒฝ๊ณ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. Cloud KMS๋ฅผ ์ฌ์ฉํ๋ฉด ํค ์ฌ์ฉ์ ์ถ์ ํ๊ณ , ๊ฐ์ฌ ๋ก๊ทธ๋ฅผ ๋ณด๊ณ , ํค ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ ์ดํ ์๋ ์์ต๋๋ค. Google์์ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๋ ๋์นญ ํค ์ํธํ ํค(KEK)๋ฅผ ์์ ํ๊ณ ๊ด๋ฆฌํ๋ ๋์ ์ฌ์ฉ์๊ฐ Cloud KMS์์ ์ด๋ฌํ ํค๋ฅผ ์ ์ดํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
CMEK๋ก ๋ฆฌ์์ค๋ฅผ ์ค์ ํ ํ Secret Manager ๋ฆฌ์์ค์ ์ก์ธ์คํ๋ ํ๊ฒฝ์ Google ๊ธฐ๋ณธ ์ํธํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ์ ์ฌํฉ๋๋ค. ์ํธํ ์ต์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ณ ๊ฐ ๊ด๋ฆฌ ์ํธํ ํค(CMEK)๋ฅผ ์ฐธ์กฐํ์ธ์.
Secret Manager๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ ์ฅ, ๊ด๋ฆฌ, ์ก์ธ์คํ ์ ์๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
Cloud KMS Autokey๋ฅผ ์ฌ์ฉํ๋ CMEK
CMEK๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด Secret Manager ๋ฆฌ์์ค๋ฅผ ๋ณดํธํ๊ฑฐ๋ Cloud KMS Autokey๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. Autokey๋ฅผ ์ฌ์ฉํ๋ฉด Secret Manager์์ ๋ฆฌ์์ค๋ฅผ ๋ง๋ค ๋ ํ์์ ๋ฐ๋ผ ํค๋ง๊ณผ ํค๊ฐ ์์ฑ๋ฉ๋๋ค. ์ํธํ ๋ฐ ๋ณตํธํ ์์ ์ ํค๋ฅผ ์ฌ์ฉํ๋ ์๋น์ค ์์ด์ ํธ๊ฐ ์์ผ๋ฉด ์์ฑ๋๋ฉฐ, ํ์ํ Identity and Access Management(IAM) ์ญํ ์ด ๋ถ์ฌ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ Autokey ๊ฐ์๋ฅผ ์ฐธ์กฐํ์ธ์.
Secret Manager๋ Terraform ๋๋ REST API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๋ฅผ ๋ง๋ค ๋๋ง Cloud KMS Autokey์ ํธํ๋ฉ๋๋ค.
์๋์ผ๋ก ์์ฑ๋ CMEK๋ฅผ ์ฌ์ฉํ์ฌ Secret Manager ๋ฆฌ์์ค๋ฅผ ๋ณดํธํ๋ ๋ฐฉ๋ฒ์ ์ด ํ์ด์ง์ ์๋ ๋ณต์ ๊ธฐ๋ฅ์ด ์๋ CMEK ๋ฐ ์ฌ์ฉ์ ๊ด๋ฆฌ ๋ณต์ ๊ธฐ๋ฅ์ด ์๋ CMEK๋ฅผ ์ฐธ๊ณ ํ์ธ์.
Cloud KMS Autokey์์ ๋ง๋ CMEK๋ฅผ ์ฌ์ฉํ์ฌ Secret Manager ๋ฆฌ์์ค๋ฅผ ๋ณดํธํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋ ค๋ฉด Secret Manager ๋ฆฌ์์ค์ Autokey ์ฌ์ฉ์ ์ฐธ๊ณ ํ์ธ์.
Secret Manager์์ CMEK ์๋ ๋ฐฉ์
Secret Manager๋ ํน์ ์์น์ ์๋ ์๊ตฌ ์คํ ๋ฆฌ์ง์ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ ์์ฑํ๊ธฐ ์ ์ ๊ณ ์ ํ ๋ฐ์ดํฐ ์ํธํ ํค(DEK)๋ก ๋ฐ์ดํฐ๋ฅผ ์ํธํํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด DEK๋ Secret Manager ์๋น์ค์์ ์์ ํ ํค ์ํธํ ํค(KEK)๋ผ๋ ๋ณต์ ๋ณธ๋ณ ํค๋ก ์ํธํ๋ฉ๋๋ค.
Secret Manager์ CMEK๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ KEK๋ CMEK ํค๋ผ๊ณ ํ๋ฉฐ Cloud KMS ๋ด์์ ๊ด๋ฆฌํ๋ ๋์นญ ํค์ ๋๋ค. CMEK ํค๋ ์ํธํํ๋ ๋ณด์ ๋น๋ฐ ๋ฒ์ ๋ณต์ ๋ณธ๊ณผ ๋์ผํ Google Cloud ์์น์ ์์ด์ผ ํฉ๋๋ค. ์ํธํ ๋ฐ ๋ณตํธํ์ ๋ํ CMEK ์ ์ฑ ์ Cloud EKM ํค๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
์ด ๊ฐ์ด๋์์๋ CMEK๋ฅผ ์ฌ์ฉํ๋๋ก Secret Manager๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. CMEK๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ ์๊ธฐ์ ์ด์ ๋ฅผ ํฌํจํ ์ผ๋ฐ์ ์ธ CMEK์ ๋ํ ์์ธํ ๋ด์ฉ์ Cloud Key Management Service ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
์ ํ์ฌํญ
CMEK๋ Secret Manager v1
API ๋ฐ Google Cloud CLI์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ํ๊ธฐ ์ ์
๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ๋์ผํ ํ๋ก์ ํธ์ ์ ์ฅํ๊ฑฐ๋ ๋ณด์ ๋น๋ฐ๊ณผ ํค๋ฅผ ๋ณ๋์ ํ๋ก์ ํธ์ ์ ์ฅํ ์ ์์ต๋๋ค. ์ด ๊ฒฐ์ ์ ๋์ฑ ์ ์ดํดํ๋ ค๋ฉด Cloud KMS ์ ๋ฌด ๋ถ์ฅ์ ์ฐธ์กฐํ์ธ์.
๋ค์ ๊ธฐ๋ณธ ์๊ฑด์ ์๋ฃํ์ฌ Secret Manager์ Cloud KMS๋ฅผ ์ค์ ํฉ๋๋ค.
Secret Manager:
- ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ฑฐ๋ ๊ธฐ์กด ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ Secret Manager ๋ฆฌ์์ค๋ฅผ ๋ณด์กดํฉ๋๋ค.
- ํ์ํ ๊ฒฝ์ฐ Secret Manager ๋น ๋ฅธ ์์์ Secret Manager ๊ตฌ์ฑ ์น์ ์ ๋จ๊ณ๋ฅผ ์๋ฃํฉ๋๋ค.
Cloud KMS:
- ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ฑฐ๋ ๊ธฐ์กด ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ Cloud KMS ๋ฆฌ์์ค๋ฅผ ๋ณด์กดํฉ๋๋ค.
- ํ์ํ ๊ฒฝ์ฐ Cloud KMS API๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
๋ค์ ๋ณ์๋ฅผ Secret Manager ๋ฐ Cloud KMS ํ๋ก์ ํธ์ ํ๋ก์ ํธ ID๋ก ์ค์ ํฉ๋๋ค.
This is an editable variable. Set it to your Secret Manager project ID and the
value will be used in all commands on this page.
SM_PROJECT_ID
This is an editable variable. Set it to your Cloud KMS project ID and the value
will be used in all commands on this page.
KMS_PROJECT_ID
Google Cloud์ ์ธ์ฆํฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud auth login
์๋น์ค ์์ด์ ํธ ID ๋ง๋ค๊ธฐ
๊ณ ๊ฐ ๊ด๋ฆฌ ์ํธํ ํค๊ฐ ํ์ํ ๊ฐ ํ๋ก์ ํธ์ ์๋น์ค ์์ด์ ํธ ID๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
Google Cloud CLI๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ID๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ธ์.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud beta services identity create \
--service "secretmanager.googleapis.com" \
--project "SM_PROJECT_ID"
๊ทธ๋ฌ๋ฉด ๋ค์ ํ์์ผ๋ก ์๋น์ค ID ์ด๋ฆ์ด ๋ฐํ๋ฉ๋๋ค.
service-PROJECT_NUMBER@gcp-sa-secretmanager.iam.gserviceaccount.com
์๋น์ค ID ์ด๋ฆ์ ์ ์ฅํฉ๋๋ค.
The following variable is editable. Click on it to update the value, and it will
be reflected throughout this documentation page.
SM_SERVICE_IDENTITY
์ด ์๋น์ค ID์ ๋ณด์ ๋น๋ฐ์ ์ํธํํ๊ณ ๋ณตํธํํ๋ ๋ฐ ์ฌ์ฉ๋๋ CMEK Cloud KMS ํค์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.
์๋ ๋ณต์ ๊ธฐ๋ฅ์ด ์๋ CMEK
์ด ์น์ ์์๋ ์๋ ๋ณต์ ์ ์ฑ ์ ํตํด ๊ตฌ์ฑ๋ ๋ณด์ ๋น๋ฐ์ ์ค๋ช ํฉ๋๋ค.
์๋ ๋ณต์ ์ ์ฑ
์ ์ฌ์ฉํ๋ ๋ณด์ ๋น๋ฐ์ ๊ฒฝ์ฐ CMEK ํค๋ global
Cloud KMS ๋ฉํฐ ๋ฆฌ์ ์ ์์ด์ผ ํฉ๋๋ค. Cloud EKM ํค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ global
๋ฆฌ์ ์์ Cloud EKM ํค๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์๋ ๋ณต์ ๋ฅผ ์ฌ์ฉํ๋๋ก ๋ณด์ ๋น๋ฐ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. Cloud EKM ํค ์ฌ์ฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ CMEK ์ ์ฑ
์ Cloud EKM ํค ์ถ๊ฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
global
Cloud KMS ๋ฆฌ์ ์์ ๋์นญ Cloud KMS ํค๋ฅผ ๋ง๋ค๊ฑฐ๋ ๊ธฐ์กด ํค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ์์์์๋ secret-manager-cmek
๋ผ๋ ์ ํค๋ง์ ๋ง๋ ํ my-cmek-key
๋ผ๋ ์ ํค๋ฅผ ๋ง๋ญ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud kms keyrings create "secret-manager-cmek" \
--project "KMS_PROJECT_ID" \
--location "global"
gcloud kms keys create "my-cmek-key" \
--project "KMS_PROJECT_ID" \
--location "global" \
--keyring "secret-manager-cmek" \
--purpose "encryption"
CMEK ํค๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ID์ ์ํธํ ๋ฐ ๋ณตํธํํ ์ ์๋ Secret Manager ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํฉ๋๋ค. ์ด ๋ช
๋ น์ด๋ my-cmek-key
Cloud KMS ํค์ ๋ํ Cloud KMS ์ํธํ/๋ณตํธํ ์ญํ (roles/cloudkms.cryptoKeyEncrypterDecrypter
)์ ์๋น์ค ID์ ๋ถ์ฌํฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud kms keys add-iam-policy-binding "my-cmek-key" \
--project "KMS_PROJECT_ID" \
--location "global" \
--keyring "secret-manager-cmek" \
--member "serviceAccount:SM_SERVICE_IDENTITY" \
--role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
์๋ ๋ณต์ ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณด์ ๋น๋ฐ์ ๋ง๋ญ๋๋ค. CMEK ํค์ ๋ฆฌ์์ค ์ด๋ฆ์ ๋ณด์ ๋น๋ฐ์ ๋ฉํ๋ฐ์ดํฐ๋ก ์ ์ฅ๋ฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud secrets create "SECRET_ID" \
--replication-policy "automatic" \
--kms-key-name "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key" \
--project "SM_PROJECT_ID"
API
์ด ์์์์๋ curl์ ์ฌ์ฉํ์ฌ API๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. gcloud auth print-access-token์ ์ฌ์ฉํ์ฌ ์ก์ธ์ค ํ ํฐ์ ์์ฑํ ์ ์์ต๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
replication.automatic.customerManagedEncryption.kmsKeyName
๊ฐ์ CMEK ํค์ ๋ฆฌ์์ค ์ด๋ฆ์ผ๋ก ์ค์ ํฉ๋๋ค.
curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets?secretId=SECRET_ID" \
--request "POST" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--data-binary @- <<EOF
{
"replication":{
"automatic":{
"customerManagedEncryption":{
"kmsKeyName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
}
}
}
}
EOF
์ด์ ๋ณด์ ๋น๋ฐ์ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ด ์์ฑ๋ ๋๋ง๋ค ์๋น์ค ID์ CMEK ํค์ ๋ํ ์ก์ธ์ค ๊ถํ์ด ์๋ ํ ์๊ตฌ ์คํ ๋ฆฌ์ง์ ์์ฑํ๊ธฐ ์ ์ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ ํ์ด๋ก๋๊ฐ ํค๋ฅผ ํตํด ์๋์ผ๋ก ์ํธํํฉ๋๋ค. ์๋น์ค ID์ ์ก์ธ์ค ๊ถํ์ด ์๊ฑฐ๋ ํค๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ ๊ฒฝ์ฐ ์๋ก์ด ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ ๋ง๋ค๊ฑฐ๋ ๊ธฐ์กด ๋ณด์ ๋น๋ฐ์ ์ก์ธ์คํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐํ๋ฉ๋๋ค.
์ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ ์ถ๊ฐํฉ๋๋ค. Cloud KMS ํค์ ๋ฆฌ์์ค ์ด๋ฆ์ ์ง์ ํ์ง ์์ต๋๋ค. ๋ณด์ ๋น๋ฐ์ ๋ฉํ๋ฐ์ดํฐ์์ ์ฝ์ต๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
echo -n "SECRET_DATA" | gcloud secrets versions add "SECRET_ID" \
--project "SM_PROJECT_ID" \
--data-file -
ํธ์ถ์์๊ฒ CMEK ํค๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ง์ ์ก์ธ์ค ๊ถํ์ด ์๋๋ผ๋ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ด ์์ฑ๋ฉ๋๋ค. ํธ์ถ์๊ฐ ์๋ Secret Manager์ ์๋น์ค ID๋ ๋ณด์ ๋น๋ฐ์ ์ฝ๊ฑฐ๋ ์ธ ๋ ์ํธํํ๊ณ ๋ณตํธํํด์ผ ํฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ๋ณด์ ๋น๋ฐ์ ์ก์ธ์คํ๊ธฐ ์ํด CMEK ํค์ ์ง์ ์ก์ธ์คํ ํ์๋ ์์ต๋๋ค. ์๋น์ค ID๋ ํค์ ์ก์ธ์คํ๊ณ ๊ฐ๋ฐ์๋ฅผ ๋์ ํ์ฌ ๋ณด์ ๋น๋ฐ์ ์ํธํํ๊ฑฐ๋ ๋ณตํธํํฉ๋๋ค.
๋ฐฉ๊ธ ๋ง๋ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ ์ก์ธ์คํฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud secrets versions access "latest" \
--project "SM_PROJECT_ID" \
--secret "SECRET_ID"
CMEK ๊ตฌ์ฑ ์ ๋ฐ์ดํธ
global
Cloud KMS ๋ฉํฐ ๋ฆฌ์ ์์ ์ ๋์นญ KMS ํค๋ฅผ ๋ง๋ญ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud kms keys create "my-other-key" \
--project "KMS_PROJECT_ID" \
--location "global" \
--keyring "secret-manager-cmek" \
--purpose "encryption"
์ CMEK ํค๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ID์ ์ํธํ ๋ฐ ๋ณตํธํํ ์ ์๋ Secret Manager ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํฉ๋๋ค. ์ด ๋ช
๋ น์ด๋ my-other-key
Cloud KMS ํค์ ๋ํ Cloud KMS ์ํธํ/๋ณตํธํ ์ญํ (roles/cloudkms.cryptoKeyEncrypterDecrypter
)์ ์๋น์ค ID์ ๋ถ์ฌํฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud kms keys add-iam-policy-binding "my-other-key" \
--project "KMS_PROJECT_ID" \
--location "global" \
--keyring "secret-manager-cmek" \
--member "serviceAccount:SM_SERVICE_IDENTITY" \
--role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
์ Cloud KMS ํค ๋ฆฌ์์ค ์ด๋ฆ์ผ๋ก ๋ณด์ ๋น๋ฐ์ ๋ณต์ ๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ๋ณด์ ๋น๋ฐ์ CMEK ๊ตฌ์ฑ์ ์์ ํฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud secrets replication update "SECRET_ID" \
--set-kms-key "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
--project "SM_PROJECT_ID"
API
์ด ์์์์๋ curl์ ์ฌ์ฉํ์ฌ API๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. gcloud auth print-access-token์ ์ฌ์ฉํ์ฌ ์ก์ธ์ค ํ ํฐ์ ์์ฑํ ์ ์์ต๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/SECRET_ID?updateMask=replication" \
--request "PATCH" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--data-binary @- <<EOF
{
"replication": {
"automatic":{
"customerManagedEncryption":{
"kmsKeyName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
}
}
}
}
EOF
์ฌ์ฉ์ ๊ด๋ฆฌ ๋ณต์ ๊ธฐ๋ฅ์ด ์๋ CMEK
์ด ์น์ ์์๋ ์ฌ์ฉ์ ๊ด๋ฆฌ ๋ณต์ ์ ์ฑ ์ผ๋ก ๊ตฌ์ฑ๋ ๋ณด์ ๋น๋ฐ์ ์ค๋ช ํฉ๋๋ค. ์ฌ์ฉ์ ๊ด๋ฆฌ ๋ณต์ ์ ์ฑ ์ผ๋ก ๋ณด์ ๋น๋ฐ์ด ์ ์ฅ๋๋ Google Cloud ์์น๋ฅผ ์ ์ดํฉ๋๋ค. ๋ชจ๋ Google Cloud ์์น์์๋ ํญ์ ๋ณด์ ๋น๋ฐ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ๊ด๋ฆฌ ๋ณต์ ์ ์ฑ ์ด ์ ์ฉ๋ ๋ณด์ ๋น๋ฐ์์๋ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ด ์ ์ฅ๋๋ ์์น์ ์ ํํ ๋งคํ๋๋ Cloud KMS ํค๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ด ๊ฐ์ด๋์ ์์์์๋ us-east1, us-central1 ๋ฑ ๋ ์์น์ ๋ณด์ ๋น๋ฐ์ ์ ์ฅํฉ๋๋ค. ๋ณด์ ๋น๋ฐ ์ก์ธ์ค ์์ฒญ์ ๋ค์ ์์น ์ค ํ๋๋ก ๋ผ์ฐํ ๋ฉ๋๋ค.
๋ ๋ฆฌ์ ๊ฐ๊ฐ์์ ์ํธํ๋ฅผ ์ํด ํค๋ง๊ณผ Cloud KMS ํค๋ฅผ ๋ง๋ค๊ฑฐ๋ ๊ธฐ์กด ํค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ์์์์๋ "secret-manager-cmek"
๋ผ๋ ์ ํค๋ง์ ๋ง๋ ํ ๊ฐ ๋ฆฌ์ ์ "my-cmek-key"
๋ผ๋ ํค๋ฅผ ๋ง๋ญ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud kms keyrings create "secret-manager-cmek" \
--project "KMS_PROJECT_ID" \
--location "us-east1"
gcloud kms keys create "my-cmek-key" \
--project "KMS_PROJECT_ID" \
--location "us-east1" \
--keyring "secret-manager-cmek" \
--purpose "encryption"
gcloud kms keyrings create "secret-manager-cmek" \
--project "KMS_PROJECT_ID" \
--location "us-central1"
gcloud kms keys create "my-cmek-key" \
--project "KMS_PROJECT_ID" \
--location "us-central1" \
--keyring "secret-manager-cmek" \
--purpose "encryption"
๊ฐ๋ณ์ ์ผ๋ก CMEK ํค ๊ฐ๊ฐ์ ๋๋ ํ๋ก์ ํธ์ ๋ชจ๋ ํค์ Cloud KMS ์ํธํ/๋ณตํธํ ์ญํ (roles/cloudkms.cryptoKeyEncrypterDecrypter
)์ ๋ถ์ฌํ์ฌ ์๋น์ค ID์ CMEK ํค๋ฅผ ์ฌ์ฉํด ์ํธํ ๋ฐ ๋ณตํธํํ ์ ์๋ Secret Manager ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud kms keys add-iam-policy-binding "my-cmek-key" \
--project "KMS_PROJECT_ID" \
--location "us-east1" \
--keyring "secret-manager-cmek" \
--member "serviceAccount:SM_SERVICE_IDENTITY" \
--role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
gcloud kms keys add-iam-policy-binding "my-cmek-key" \
--project "KMS_PROJECT_ID" \
--location "us-central1" \
--keyring "secret-manager-cmek" \
--member "serviceAccount:SM_SERVICE_IDENTITY" \
--role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
์ฌ์ฉ์ ๊ด๋ฆฌ ๋ณต์ ๊ธฐ๋ฅ์ด ์๋ CMEK๊ฐ ์ฌ์ฉ ์ค์ ๋ ๋ณด์ ๋น๋ฐ์ ๋ง๋ญ๋๋ค. CMEK ํค์ ๋ฆฌ์์ค ์ด๋ฆ์ ๋ณด์ ๋น๋ฐ์ ๋ฉํ๋ฐ์ดํฐ๋ก ์ ์ฅ๋ฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
cat <<EOF > ./replication-policy.json
{
"userManaged":{
"replicas":[
{
"location":"us-east1",
"customerManagedEncryption":{
"kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
}
},
{
"location":"us-central1",
"customerManagedEncryption":{
"kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
}
}
]
}
}
EOF
gcloud secrets create "my-ummr-secret" \
--replication-policy-file ./replication-policy.json \
--project "SM_PROJECT_ID"
API
์ด ์์์์๋ curl์ ์ฌ์ฉํ์ฌ API๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. gcloud auth print-access-token์ ์ฌ์ฉํ์ฌ ์ก์ธ์ค ํ ํฐ์ ์์ฑํ ์ ์์ต๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
replication.userManaged.replicas.customerManagedEncryption.kmsKeyName
๊ฐ์ CMEK ํค์ ๋ฆฌ์์ค ์ด๋ฆ์ผ๋ก ์ค์ ํฉ๋๋ค.
curl "https://secretmanager.googleapis.com/v1/projects/SM_PROJECT_ID/secrets?secretId=my-ummr-secret" \
--request "POST" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--data-binary @- <<EOF
{
"replication":{
"userManaged":{
"replicas":[
{
"location":"us-east1",
"customerManagedEncryption":{
"kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
}
},
{
"location":"us-central1",
"customerManagedEncryption":{
"kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
}
}
]
}
}
}
EOF
์ด์ ๋ณด์ ๋น๋ฐ์ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ด ์์ฑ๋ ๋๋ง๋ค ์๋น์ค ID์ CMEK ํค์ ๋ํ ์ก์ธ์ค ๊ถํ์ด ์๋ ํ ์๊ตฌ ์คํ ๋ฆฌ์ง์ ์์ฑํ๊ธฐ ์ ์ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ ํ์ด๋ก๋๊ฐ ํค๋ฅผ ํตํด ์๋์ผ๋ก ์ํธํํฉ๋๋ค. ์๋น์ค ID์ ์ก์ธ์ค ๊ถํ์ด ์๊ฑฐ๋ ํค๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ ๊ฒฝ์ฐ ์๋ก์ด ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ ๋ง๋ค๊ฑฐ๋ ๊ธฐ์กด ๋ณด์ ๋น๋ฐ์ ์ก์ธ์คํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐํ๋ฉ๋๋ค.
์ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ ์ถ๊ฐํฉ๋๋ค. Cloud KMS ํค์ ๋ฆฌ์์ค ์ด๋ฆ์ ์ง์ ํ์ง ์์ต๋๋ค. ๋ณด์ ๋น๋ฐ์ ๋ฉํ๋ฐ์ดํฐ์์ ์ฝ์ต๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
echo -n "SECRET_DATA" | gcloud secrets versions add "my-ummr-secret" \
--project "SM_PROJECT_ID" \
--data-file -
ํธ์ถ์์๊ฒ CMEK ํค๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ง์ ์ก์ธ์ค ๊ถํ์ด ์๋๋ผ๋ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ด ์์ฑ๋ฉ๋๋ค. ํธ์ถ์๊ฐ ์๋ Secret Manager์ ์๋น์ค ID๋ ๋ณด์ ๋น๋ฐ์ ์ฝ๊ฑฐ๋ ์ธ ๋ ์ํธํํ๊ณ ๋ณตํธํํด์ผ ํฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ๋ณด์ ๋น๋ฐ์ ์ก์ธ์คํ๊ธฐ ์ํด CMEK ํค์ ์ง์ ์ก์ธ์คํ ํ์๋ ์์ต๋๋ค. ์๋น์ค ID๋ ํค์ ์ก์ธ์คํ๊ณ ๊ฐ๋ฐ์๋ฅผ ๋์ ํ์ฌ ๋ณด์ ๋น๋ฐ์ ์ํธํํ๊ฑฐ๋ ๋ณตํธํํฉ๋๋ค.
๋ฐฉ๊ธ ๋ง๋ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ ์ก์ธ์คํฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud secrets versions access "latest" \
--project "SM_PROJECT_ID" \
--secret "my-ummr-secret"
CMEK ๊ตฌ์ฑ ์ ๋ฐ์ดํธ
๋ณด์ ๋น๋ฐ๊ณผ ๋์ผํ ๋ฆฌ์ ์ ์ ๋์นญ KMS ํค ๋ ๊ฐ๋ฅผ ๋ง๋ญ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud kms keys create "my-other-key" \
--project "KMS_PROJECT_ID" \
--location "us-east1" \
--keyring "secret-manager-cmek" \
--purpose "encryption"
gcloud kms keys create "my-other-key" \
--project "KMS_PROJECT_ID" \
--location "us-central1" \
--keyring "secret-manager-cmek" \
--purpose "encryption"
์ CMEK ํค๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ID์ ์ํธํ ๋ฐ ๋ณตํธํํ ์ ์๋ Secret Manager ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํฉ๋๋ค. ์ด ๋ช
๋ น์ด๋ my-other-key
Cloud KMS ํค์ ๋ํ Cloud KMS ์ํธํ/๋ณตํธํ ์ญํ (roles/cloudkms.cryptoKeyEncrypterDecrypter
)์ ์๋น์ค ID์ ๋ถ์ฌํฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud kms keys add-iam-policy-binding "my-other-key" \
--project "KMS_PROJECT_ID" \
--location "us-east1" \
--keyring "secret-manager-cmek" \
--member "serviceAccount:SM_SERVICE_IDENTITY" \
--role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
gcloud kms keys add-iam-policy-binding "my-other-key" \
--project "KMS_PROJECT_ID" \
--location "us-central1" \
--keyring "secret-manager-cmek" \
--member "serviceAccount:SM_SERVICE_IDENTITY" \
--role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
์ Cloud KMS ํค ๋ฆฌ์์ค ์ด๋ฆ์ผ๋ก ๋ณด์ ๋น๋ฐ์ ๋ณต์ ๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ๋ณด์ ๋น๋ฐ์ CMEK ๊ตฌ์ฑ์ ์์ ํฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud secrets replication update "my-ummr-secret" \
--set-kms-key "projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
--location us-east1 \
--project "SM_PROJECT_ID"
gcloud secrets replication update "my-ummr-secret" \
--set-kms-key "projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
--location us-central1 \
--project "SM_PROJECT_ID"
๋ณด์ ๋น๋ฐ์ ํค ์ฌ๋ฌ ๊ฐ๋ฅผ ๋์์ ์ ๋ฐ์ดํธํ๋ ค๋ฉด ํ์ผ์ ํตํด ๋ณต์ ์ ์ฑ ์ ๊ฐ์ ธ์ค๊ณ ์ค์ ํ๋ฉด ๋ฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud secrets replication get "my-ummr-secret" \
--project "SM_PROJECT_ID" \
--format=json > ./replication-policy.json
์ํ๋ ํธ์ง๊ธฐ์์ ์ํ๋ CMEK ๊ตฌ์ฑ์ ๋ฐ์ํ๋๋ก ํ์ผ์ ์ ๋ฐ์ดํธํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ ์ ์ฑ ์ ์ค์ ํฉ๋๋ค.
gcloud secrets replication set "my-ummr-secret" \
--replication-policy-file ./replication-policy.json \
--project "SM_PROJECT_ID"
API
์ด ์์์์๋ curl์ ์ฌ์ฉํ์ฌ API๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. gcloud auth print-access-token์ ์ฌ์ฉํ์ฌ ์ก์ธ์ค ํ ํฐ์ ์์ฑํ ์ ์์ต๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/my-ummr-secret?updateMask=replication" \
--request "PATCH" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--data-binary @- <<EOF
{
"replication":{
"userManaged":{
"replicas":[
{
"location":"us-east1",
"customerManagedEncryption":{
"kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
}
},
{
"location":"us-central1",
"customerManagedEncryption":{
"kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
}
}]
}
}
}
EOF
๋ณด์ ๋น๋ฐ ๋ฒ์ CMEK ๊ตฌ์ฑ ๋ณด๊ธฐ
๋ณด์ ๋น๋ฐ ๋ฒ์ ์ด ์ฌ์ฉ ์ค์ ๋ CMEK์ด๊ณ CMEK ํค ๋ฒ์ ์ ๋ฆฌ์์ค ์ด๋ฆ์ธ์ง ์ฌ๋ถ๋ฅผ ๋น๋กฏํ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฌํ๋ ค๋ฉด ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ด ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud secrets versions describe "latest" \
--secret "SECRET_ID" \
--project "SM_PROJECT_ID"
API
์ด ์์์์๋ curl์ ์ฌ์ฉํ์ฌ API๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. gcloud auth print-access-token์ ์ฌ์ฉํ์ฌ ์ก์ธ์ค ํ ํฐ์ ์์ฑํ ์ ์์ต๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
curl "https://secretmanager.googleapis.com/v1/projects/SM_PROJECT_ID/secrets/SECRET_ID/versions/latest" \
--request "GET" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--header "Content-Type: application/json"
๊ทธ๋ฌ๋ฉด ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ ์ํธํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํค ๋ฒ์ ์ ์ ์ฒด Cloud KMS ๋ฆฌ์์ค ์ด๋ฆ์ด ๋ฐํ๋ฉ๋๋ค.
{
"name": "projects/PROJECT_NUMBER/secrets/SECRET_ID/versions/1",
"createTime": "2021-07-...",
"state": "ENABLED",
"replicationStatus": {
"automatic": {
"customerManagedEncryption": {
"kmsKeyVersionName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key/cryptoKeyVersions/1"
}
}
}
}
CMEK ์ ์ฑ ์ Cloud EKM ํค ์ถ๊ฐ
์ด ์น์ ์์๋ Cloud EKM ํค๋ฅผ CMEK ์ ์ฑ ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ์ด ๋จ๊ณ๋ฅผ ํตํด Cloud EKM ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ณด์ ๋น๋ฐ์ ์ํธํํ๊ฑฐ๋ ๋ณตํธํํ ์ ์์ต๋๋ค.
Cloud EKM์ ํ์ฌ global
๋ฉํฐ ๋ฆฌ์ ์ ์ง์ํ์ง ์์ผ๋ฏ๋ก Cloud EKM ํค๋ ์ฌ์ฉ์ ๊ด๋ฆฌ ๋ณต์ ์ฉ์ผ๋ก ๊ตฌ์ฑ๋ ๋ณด์ ๋น๋ฐ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
us-central1
Cloud KMS ๋ฆฌ์ (๋๋ global
์ ์ ์ธํ ๋ชจ๋ ๋ฆฌ์ )์์ ๋์นญ ํค๋ฅผ ๋ง๋ญ๋๋ค. ์ด ์์์์๋ secret-manager-cmek-ekm
์ด๋ผ๋ ์ ํค๋ง์ ๋ง๋ ํ ํค๋ง์ my-ekm-key
๋ผ๋ ์ ํค๋ฅผ ๋ง๋ญ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
์ ํค๋ง์ ๋ง๋ญ๋๋ค.
gcloud kms keyrings create "secret-manager-cmek-ekm" \
--project "KMS_PROJECT_ID" \
--location "us-central1"
์ด ํค๋ง์ ํค๋ฅผ ๋ง๋ญ๋๋ค.
gcloud kms keys create "my-ekm-key" \
--keyring "secret-manager-cmek-ekm" \
--location "us-central1" \
--purpose "encryption" \
--protection-level "external" \
--skip-initial-version-creation \
--default-algorithm "external-symmetric-encryption"
๊ทธ๋ฐ ๋ค์ ํค์ ์ธ๋ถ URI๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ฒ์ ์ my-ekm-key
๋ฅผ ๋ง๋ญ๋๋ค.
Cloud EKM ํค์ ์ธ๋ถ URI์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ธ๋ถ ํค ๋ง๋ค๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud kms keys versions create \
--key "my-ekm-key" \
--keyring "secret-manager-cmek-ekm" \
--location "us-central1" \
--external-key-uri EXTERNAL_KEY_URI \
--primary
์ธ๋ถ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ID์ ์ํธํ ๋ฐ ๋ณตํธํํ ์ ์๋ Secret Manager ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํฉ๋๋ค. ์ด ๋ช
๋ น์ด๋ my-ekm-key
์ ๋ํ Cloud KMS ์ํธํ/๋ณตํธํ ์ญํ (roles/cloudkms.cryptoKeyEncrypterDecrypter
)์ ์๋น์ค ID์ ๋ถ์ฌํฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud kms keys add-iam-policy-binding "my-ekm-key" \
--project "KMS_PROJECT_ID" \
--location "us-central1" \
--keyring "secret-manager-cmek-ekm" \
--member "serviceAccount:SM_SERVICE_IDENTITY" \
--role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
Cloud EKM ํค๋ฅผ ์ฌ์ฉํ๋ CMEK๊ฐ ์ฌ์ฉ ์ค์ ๋ ๋ณด์ ๋น๋ฐ์ ๋ง๋ญ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
cat <<EOF > ./replication-policy.json
{
"userManaged":{
"replicas":[
{
"location":"us-central1",
"customerManagedEncryption":{
"kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek-ekm/cryptoKeys/my-ekm-key"
}
}
]
}
}
EOF
gcloud secrets create "my-ekm-secret" \
--replication-policy-file ./replication-policy.json \
--project "SM_PROJECT_ID"
์ด์ my-ekm-secret
์ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ด ์์ฑ๋ ๋๋ง๋ค ์๋น์ค ID์ ํค์ ๋ํ ์ก์ธ์ค ๊ถํ์ด ์๋ ํ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ ํ์ด๋ก๋๋ ์๊ตฌ ์คํ ๋ฆฌ์ง์ ์์ฑ๋๊ธฐ ์ ์ Cloud EKM ํค๋ฅผ ํตํด ์๋์ผ๋ก ์ํธํ๋ฉ๋๋ค.
์๋น์ค ID์ ์ก์ธ์ค ๊ถํ์ด ์๊ฑฐ๋ ํค๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ ๊ฒฝ์ฐ ์๋ก์ด ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ ๋ง๋ค๊ฑฐ๋ ๊ธฐ์กด ๋ณด์ ๋น๋ฐ์ ์ก์ธ์คํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐํ๋ฉ๋๋ค.
์ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ ์ถ๊ฐํฉ๋๋ค. ํค์ ๋ฆฌ์์ค ์ด๋ฆ์ ๋ณด์ ๋น๋ฐ์ ๋ฉํ๋ฐ์ดํฐ์์ ์ฝ์ต๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
echo -n "SECRET_DATA" | gcloud secrets versions add "my-ekm-secret" \
--project "SM_PROJECT_ID" \
--data-file -
ํธ์ถ์์๊ฒ ํค๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ง์ ์ก์ธ์ค ๊ถํ์ด ์๋๋ผ๋ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ด ์์ฑ๋ฉ๋๋ค. ํธ์ถ์๊ฐ ์๋ Secret Manager์ ์๋น์ค ID๋ ๋ณด์ ๋น๋ฐ์ ์ฝ๊ฑฐ๋ ์ธ ๋ ์ํธํํ๊ณ ๋ณตํธํํด์ผ ํฉ๋๋ค.
๋ฐฉ๊ธ ๋ง๋ ๋ณด์ ๋น๋ฐ ๋ฒ์ ์ ์ก์ธ์คํฉ๋๋ค. ์ฌ๊ธฐ์์ ์๋น์ค ID๋ ํค์ ์ก์ธ์คํ๊ณ ๊ฐ๋ฐ์๋ฅผ ๋์ ํ์ฌ ๋ณด์ ๋น๋ฐ์ ์ํธํํ๊ฑฐ๋ ๋ณตํธํํฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud secrets versions access "latest" \
--project "SM_PROJECT_ID" \
--secret "my-ekm-secret"
CMEK ์ฌ์ฉ ์ค์ง
๋ณต์ ์ ์ฑ ์ ์ ๋ฐ์ดํธํ์ฌ ๋ณด์ ๋น๋ฐ์์ CMEK ๊ตฌ์ฑ์ ์ญ์ ํฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Secret Manager๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Google Cloud CLI ๋ฒ์ 378.0.0 ์ด์์ ์ค์นํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
gcloud secrets replication update "SECRET_ID" --remove-cmek \
--project "SM_PROJECT_ID"
API
์ด ์์์์๋ curl์ ์ฌ์ฉํ์ฌ API๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. gcloud auth print-access-token์ ์ฌ์ฉํ์ฌ ์ก์ธ์ค ํ ํฐ์ ์์ฑํ ์ ์์ต๋๋ค. Compute Engine ๋๋ GKE์์๋ cloud-platform ๋ฒ์๋ก ์ธ์ฆํด์ผ ํฉ๋๋ค.
curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/SECRET_ID?updateMask=replication" \
--request "PATCH" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--data-binary @- <<EOF
{
"replication":{
"automatic":{}
}
}
EOF
๋ค์ ๋จ๊ณ
- CMEK ์์ธํ ์์๋ณด๊ธฐ