google-cloud-platform - GCP 授予服务帐户使用 Deployment Manager 写入 GCS 存储桶的权限
问题描述
在 Deployment Manager Jinja 模板中,我正在尝试创建日志接收器:
- name: {{ ALOGSINK }}
type: gcp-types/logging-v2:projects.sinks
properties:
sink: {{ ALOGSINK }}
parent: projects/{{ PROJECT }}
uniqueWriterIdentity: true
outputVersionFormat: V2
destination: storage.googleapis.com/{{ LOGGINGBUCKET }}
filter: >-
resource.type="deployment" AND
resource.labels.name="{{ DEPLOYMENT }}"
我更愿意将它们配置为在写入目的地时使用“唯一写入者身份” ,即 GCS 存储桶。
这意味着将为每个日志接收器自动创建一个特定的服务帐户。
并且有必要为此服务帐户授予写入指定(和已经存在的)存储桶的权限。
因此,在授予权限的模板部分中,我可以使用$(ref.logsink>.writerIdentity)
.
现在有趣的部分 - 将绑定添加到存储桶的 ACL 的唯一可靠方法是使用对象的insert
方法BucketAccessControls
:
- name: {{ LOGGINGBUCKET }}-{{ ALOGSINK }}-acl
action: gcp-types/storage-v1:storage.BucketAccessControls.insert
properties:
bucket: $(ref.bucket-name)
entity: user-$(ref.{{ ALOGSINK }}.writerIdentity}
role: WRITER
问题是writerIdentity
是 的形式serviceAccount:<email>
,但是方法所entity
期望的insert
应该是 的形式user-<email>
。
并且找不到将前者适合后者的方法。
解决方案
可能您想使用支持服务帐户的存储桶 IAM 策略:
https://cloud.google.com/storage/docs/json_api/v1/buckets/setIamPolicy
我同意这有点误导,很自然地认为 BucketAccessControls 也应该支持服务帐户......
推荐阅读
- c# - Is it possible to disable an API endpoint based on the server it resides on?
- ios - 用另一个 UIView 替换 UIView,保持约束
- sql-server - 有没有办法限制某些用户对现有对象进行 DDL 和 DML 操作,但允许创建自己的对象
- ios - 在关闭时将值传递给视图控制器时出错 | 斯威夫特 5
- java - CompletableFuture join() 调用挂起主线程。个人期货永远不会完成
- apache-spark - hadoop spark连接失败
- java - 使用 Spring Boot 从另一个服务调用 Rest Service 以进行课程注册系统
- python-3.x - 如何使用 SparkSQL 按列数据类型将数据框拆分为多个数据框?
- vba - 对 Word VBA 中的 WdPasteOptions 枚举感到困惑
- java - 在spring设计中使用arrayblocking队列作为消费者生产者来处理巨大的文件