在Deployment Manager Jinja模板中,我正在尝试创建log sinks:
- 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存储桶unique writer identity时使用“ destination”。
这意味着将为每个日志接收器自动创建一个特定的服务帐户。
并且有必要授予该服务帐户权限以写入指定的(并且已经存在)存储桶。
因此,在模板的授予权限的部分中,我可以使用$(ref.logsink>.writerIdentity)
来引用服务帐户标识(电子邮件地址)。
现在有趣的是,唯一添加绑定到存储桶ACL的可靠方法是使用BucketAccessControls
对象的insert
方法:
- 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
的形式应该为{{1} }。
并且找不到找到适合前者的方法。
答案 0 :(得分:1)
可能您想使用确实支持服务帐户的存储区IAM策略:
https://cloud.google.com/storage/docs/json_api/v1/buckets/setIamPolicy
我同意这有点误导,很自然地认为BucketAccessControls也应该支持服务帐户...