我正在使用 GCP KMS,似乎当我将文件发送到 GCP 存储桶(使用 gustil cp)时,它是加密的。
但是,我有一个与使用不同服务帐户从同一存储桶恢复该文件的权限有关的问题。我的意思是,我用来从存储桶中恢复文件的服务帐户没有解密权限,即使如此,gustil cp 也可以工作。
我的问题是这是正常行为,还是我遗漏了什么?
让我描述一下我的问题:
首先,我确认bucket的默认加密是我之前设置的KEY:
$ kms encryption gs://my-bucket Default encryption key for gs://my-bucket: projects/my-kms-project/locations/my-location/keyRings/my-keyring/cryptoKeys/MY-KEY
接下来,使用 gcloud config,我设置了一个服务帐户,该帐户具有“Storage Object Creator”和“Cloud KMS CryptoKey Encrypter”权限:
$ gcloud config set account my-service-account-with-Encrypter-and-object-creator-permissions Updated property [core/account].
我将本地文件发送到存储桶:
$ gsutil cp my-file gs://my-bucket Copying file://my-file [Content-Type=application/vnd.openxmlformats-officedocument.presentationml.presentation]... | [1 files][602.5 KiB/602.5 KiB] Operation completed over 1 objects/602.5 KiB.
将文件发送到存储桶后,我确认文件已使用我之前创建的 KMS 密钥加密:
$ gsutil ls -L gs://my-bucket gs://my-bucket/my-file: Creation time: Mon, 25 Mar 2019 06:41:02 GMT Update time: Mon, 25 Mar 2019 06:41:02 GMT Storage class: REGIONAL KMS key: projects/my-kms-project/locations/my-location/keyRings/my-keyring/cryptoKeys/MY-KEY/cryptoKeyVersions/1 Content-Language: en Content-Length: 616959 Content-Type: application/vnd.openxmlformats-officedocument.presentationml.presentation Hash (crc32c): 8VXRTU== Hash (md5): fhfhfhfhfhfhfhf== ETag: xvxvxvxvxvxvxvxvx= Generation: 876868686868686 Metageneration: 1 ACL: []
接下来,我设置了另一个服务帐户,但这次没有 DECRYPT 权限和对象查看器权限(以便它能够从存储桶中读取文件):
$ gcloud config set account my-service-account-WITHOUT-DECRYPT-and-with-object-viewer-permissions Updated property [core/account].
设置新的服务帐户(没有解密权限)后,从存储桶中恢复文件的 gustil 工作顺利......
gsutil cp gs://my-bucket/my-file . Copying gs://my-bucket/my-file... \ [1 files][602.5 KiB/602.5 KiB] Operation completed over 1 objects/602.5 KiB.
我的问题是这是否是正常行为?或者,由于新的服务帐户没有解密权限,gustil cp
恢复文件应该不起作用?我的意思是,这不是使用 KMS 加密的想法,第二个gustil cp
命令应该失败并出现“403 权限被拒绝”错误消息或其他东西..
如果我从第二个服务帐户撤消“存储对象查看器”权限(从存储桶中恢复文件),在这种情况下,gustil 失败,但这是因为它没有读取文件的权限:
$ gsutil cp gs://my-bucket/my-file .
AccessDeniedException: 403 my-service-account-WITHOUT-DECRYPT-and-with-object-viewer-permissions does not have storage.objects.list access to my-bucket.
如果其他人可以帮助我并澄清问题,我将不胜感激......特别是我不确定该命令是否gsutil cp gs://my-bucket/my-file .
应该工作。
我认为它不应该工作(因为服务帐户没有解密权限),还是应该工作?