【发布时间】:2019-06-25 17:29:02
【问题描述】:
在 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 存储桶 destination 时使用“unique writer identity”。
这意味着将为每个日志接收器自动创建一个特定的服务帐户。
并且有必要为此服务帐户授予写入指定(和已经存在的)存储桶的权限。
因此,在授予权限的模板部分中,我可以使用$(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>的形式,但是insert方法所期望的entity应该是user-<email>的形式。
并且无法找到将前者融入后者的方法。
【问题讨论】:
-
查看API reference 没有提及服务帐户,即使提及组 (
group-email)。一种可能性是在您的 GSuite 组织下创建一个组并将服务帐户添加到该组 -
已经有一个组 (cloud-logs@google.com) 当它们设置为使用“共享写入者身份”(与“唯一写入者身份”相反)时可用于所有日志接收器。问题是我想避免使用“共享作者身份”。如果我必须将服务帐户添加到 DM 模板中的组,部署管理器的服务帐户需要更多权限/角色。
-
@MilenA.Radev 你有没有解决这个问题?有一个类似的案例:我已经有一个容器注册表(它是在部署管理器之外创建的),它是关联的存储桶;我想为我的 Kubernetes 服务帐户添加 ACL 存储桶绑定(整个 k8s 基础架构是通过 Deployment Manager 部署的,甚至应用程序部署也是通过 Flux 自动化的,因此手动关联绑定的这种手动步骤对我来说是不可接受的)
标签: google-cloud-platform google-deployment-manager