我正在使用cloud storage
带有kms密钥的文件上传。这是我的代码:
await storage.bucket(config.bucket).upload(file, {
kmsKeyName: `projects/${process.env.PROJECT_ID}/locations/global/keyRings/test/cryptoKeys/nodejs-gcp`,
destination: 'mmczblsq.kms.encrypted.doc'
});
我有一个cloud-storage-admin.json
获得cloud storage admin
许可的服务帐户。storage
使用此服务帐户初始化。
const storage: Storage = new Storage({
projectId: process.env.PROJECT_ID,
keyFilename: path.resolve(__dirname, '../.gcp/cloud-storage-admin.json')
});
而且,我使用gcloud kms keys add-iam-policy-binding
添加roles/cloudkms.cryptoKeyEncrypterDecrypter
到cloud-storage-admin.json
服务帐户。
当我尝试使用kms密钥上传文件时,仍然出现此权限错误:
对Cloud KMS密钥的权限被拒绝。请确保您的Cloud Storage服务帐户已被授权使用此密钥。
更新
☁ nodejs-gcp [master] ⚡ gcloud kms keys get-iam-policy nodejs-gcp --keyring=test --location=global
bindings:
- members:
- serviceAccount:cloud-storage-admin@<PROJECT_ID>.iam.gserviceaccount.com
- serviceAccount:[email protected]
role: roles/cloudkms.cryptoKeyEncrypterDecrypter
etag: BwWJ2Pdc5YM=
version: 1
使用时kmsKeyName
,Google Cloud Storage是调用KMS的实体,而不是您的服务帐户。这有点令人困惑:
您将需要获得Cloud Storage服务帐户并授予该服务帐户调用Cloud KMS的能力:
选项2:安装gcloud,对gcloud进行身份验证,安装oauth2l,然后运行以下curl
命令替换[PROJECT_ID]
为您的项目ID:
curl -X GET -H "$(oauth2l header cloud-platform)" \
"https://www.googleapis.com/storage/v1/projects/[PROJECT_ID]/serviceAccount"
service-[PROJECT_NUMBER]@gs-project-accounts.iam.gserviceaccount.com
可以[PROJECT_NUMBER]
从gcloud projects list
Web界面获取信息。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句