Google cloud platform GCP通过部署管理器授予服务帐户写入GCS存储桶的权限

Google cloud platform GCP通过部署管理器授予服务帐户写入GCS存储桶的权限,google-cloud-platform,google-deployment-manager,Google Cloud Platform,Google Deployment Manager,在我尝试创建的Deployment Manager Jinja模板中: 我更愿意将它们配置为在写入GCS存储桶时使用“” 这意味着将为每个日志接收器自动创建特定的服务帐户 并且有必要授予此服务帐户写入指定(并且已经存在)存储桶的权限 因此,在授予权限的模板部分,我可以使用$(ref.logsink>.writeridity)引用服务帐户标识(电子邮件地址) 现在让我们来看一个有趣的部分——向bucket的ACL添加绑定的唯一可靠方法是使用BucketAccessControls对象的方法: -

在我尝试创建的Deployment Manager Jinja模板中:

我更愿意将它们配置为在写入GCS存储桶时使用“”

这意味着将为每个日志接收器自动创建特定的服务帐户

并且有必要授予此服务帐户写入指定(并且已经存在)存储桶的权限

因此,在授予权限的模板部分,我可以使用
$(ref.logsink>.writeridity)
引用服务帐户标识(电子邮件地址)

现在让我们来看一个有趣的部分——向bucket的ACL添加绑定的唯一可靠方法是使用
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
问题是
写入身份
的形式是
服务帐户:
,但是
插入方法所期望的
实体
应该是
用户-
的形式


无法找到将前者与后者相结合的方法。

您可能希望使用bucket IAM策略,该策略确实支持服务帐户:


我确实同意这有点误导,而且认为BucketAccessControl也应该支持服务帐户是很自然的…

查看“没有提到服务帐户”,即使提到了组(
组电子邮件
)。一种可能是在您的GSuite组织下创建一个组,并将服务帐户添加到该组。当所有日志接收器设置为使用“共享写入者标识”(与“唯一写入者标识”相反)时,已经有一个组()可用于所有日志接收器。问题是我想避免使用“共享作者身份”。如果我必须向DM模板中的组添加服务帐户,部署管理器的服务帐户需要更多权限/角色。@MilenA.Radev您解决了这个问题吗?有一个类似的例子:我已经有了一个容器注册表(它是在部署管理器之外创建的),并且它是关联的bucket;我想为我的Kubernetes服务帐户添加ACL bucket绑定(整个k8s基础设施是通过Deployment Manager部署的,甚至应用程序部署也是通过Flux自动化的,因此手动关联绑定的这一手动步骤对我来说是不可接受的)鼓励链接到外部资源,但是,请在链接周围添加上下文,这样您的其他用户就会知道它是什么以及为什么会出现。始终引用重要链接中最相关的部分,以防无法访问目标站点或永久脱机。请参阅:。已尝试此操作-它将使用提供的绑定覆盖当前绑定。这意味着您需要“调用”,添加新绑定,并使用它“调用”
setIamPolicy
。这有点问题。对不起,不是直接/通过Ansible使用API,而是通过Terraform,这会给您提供不同的原语(希望通过API您有一些等效的东西),这取决于您是否要覆盖或只是合并:
- name:  {{ LOGGINGBUCKET }}-{{ ALOGSINK }}-acl
  action: gcp-types/storage-v1:storage.BucketAccessControls.insert
  properties:
    bucket: $(ref.bucket-name)
    entity: user-$(ref.{{ ALOGSINK }}.writerIdentity}
    role: WRITER