GCP授予服务帐户权限以使用Deployment Manager写入GCS存储桶

Mil*_*dev 10 google-cloud-platform google-deployment-manager

在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 }}"
Run Code Online (Sandbox Code Playgroud)

我希望将它们配置为在写入目标 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
Run Code Online (Sandbox Code Playgroud)

问题是的writerIdentity形式为serviceAccount:<email>,但方法所entity期望insert的形式为user-<email>

而且找不到找到适合前者的方法。

小智 2

您可能想要使用支持服务帐户的存储桶 IAM 策略:

https://cloud.google.com/storage/docs/json_api/v1/buckets/setIamPolicy

我确实同意这有点误导,并且很自然地认为 BucketAccessControls 也应该支持服务帐户......