Google cloud platform pubsub主题的setIamPolicy(在资源级别而不是项目级别)

Google cloud platform pubsub主题的setIamPolicy(在资源级别而不是项目级别),google-cloud-platform,google-cloud-pubsub,google-iam,google-deployment-manager,Google Cloud Platform,Google Cloud Pubsub,Google Iam,Google Deployment Manager,我使用deployment manager设置现有发布/子主题的IAM策略-我不想获取它,我无法使用deployment manager创建它(因为它存在)。所以我想对现有资源设置一个策略 我可以用bucket实现这一点,但是文档非常混乱,我找不到合适的bucket方法 我想对主题而不是bucket执行以下操作(资源级绑定): resources: - name: mybucket action: gcp-types/storage-v1:storage.buckets.setIam

我使用deployment manager设置现有发布/子主题的IAM策略-我不想获取它,我无法使用deployment manager创建它(因为它存在)。所以我想对现有资源设置一个策略

我可以用bucket实现这一点,但是文档非常混乱,我找不到合适的bucket方法

我想对主题而不是bucket执行以下操作(资源级绑定):

resources:
  - name: mybucket
    action: gcp-types/storage-v1:storage.buckets.setIamPolicy
    properties:
      bucket: mybucket
      bindings:
        - role: roles/storage.admin
          members:
          - "serviceAccount:sdfsfds@sdfsdf.com"
我只能找到
gcp-types/pubsub-v1:projects.topics.setIamPolicy
,这似乎是在项目级别?针对特定主题设置iam策略的正确api是什么

谷歌的API在这里看起来真的不一致——这些方法是等效的吗?文件令人困惑

我尝试了此操作,但出现错误:

  - name: mytopic
    action: gcp-types/pubsub-v1:pubsub.projects.topics.setIamPolicy
    properties:
      resource: mytopic
      bindings:
        - role: roles/pubsub.admin
          members:
          - "serviceAccount:ssdfsdf@sdfsdf.com"
获取错误:

message: '{"ResourceType":"gcp-types/pubsub-v1:pubsub.projects.topics.setIamPolicy","ResourceErrorCode":"400","ResourceErrorMessage":{"code":400,"message":"Invalid
    JSON payload received. Unknown name \"bindings\": Cannot find field.","status":"INVALID_ARGUMENT","details":[{"@type":"type.googleapis.com/google.rpc.BadRequest","fieldViolations":[{"description":"Invalid
    JSON payload received. Unknown name \"bindings\": Cannot find field."}]}],"statusMessage":"Bad
    Request","requestPath":"https://pubsub.googleapis.com/v1/projects/myproject/topics/mytopic:setIamPolicy","httpMethod":"POST"}}
当我尝试projects.topics.setIamPolicy时,我得到了:

- code: COLLECTION_NOT_FOUND
  message: Collection 'projects.topics.setIamPolicy' not found in discovery doc 'https://pubsub.googleapis.com/$discovery/rest?version=v1'
是在主题级别,是在项目级别设置发布/订阅或其他资源

您之所以会出现这些错误,是因为您正在为发布/订阅管理员提供权限,而这是项目级别的角色。您可以提供以下示例:

  • 角色/观众
  • 角色/编辑
  • 角色/所有者
我知道您正试图部署一个主题,该主题具有IAM策略,该策略只允许一个服务帐户访问一个主题。如果您正在使用的环境是yaml文件和python文件,则必须使用它们

在中,您将使用“set_IAM_policy”方法为主题设置IAM,该方法包含两个参数,即策略和主题路径:

client = pubsub_v1.PublisherClient()
topic_path = client.topic_path(project, topic_name)

policy = client.get_iam_policy(topic_path)

# Add all users as viewers.
policy.bindings.add(
    role='roles/pubsub.viewer',
    members=['allUsers'])

# Add a group as a publisher.
policy.bindings.add(
    role='roles/pubsub.publisher',
    members=['group:cloud-logs@google.com'])

# Set the policy
policy = client.set_iam_policy(topic_path, policy)

print('IAM policy for topic {} set: {}'.format(
    topic_name, policy))
用于:


我找到了这块金块。。。它说“操作是当前未记录的用于调用任意API的功能。”。好。。。呵呵!!!有趣的是,它没有被记录下来。我不久前就放弃了他们的文档,开始在野外寻找例子——我从未意识到这一特性完全是不符合哲学观点的。。。我认为,在创建或更新已经存在的资源而不让部署管理器“拥有”这一概念上,我们可能会陷入僵局。为什么部署管理器拥有资源是一件坏事?我还认为,如果我们不想让部署管理器拥有它,我们可以运行DM两次。。。一次更新资源,一次使用删除放弃策略删除资源。如果您可以在资源级别放弃,将解决我的问题。问题在于,存在本地化到此堆栈的资源以及此堆栈/部署不应拥有其生命周期的共享资源。因此,部署可以自由创建和销毁,而不会破坏共享资源。有一个单独的部署,专门用于修改现有资源和使用废弃资源,这是可行的,但我不喜欢这样-我希望这是一个单一的模板/部署。此外,我需要的资源级别策略源于我目前无法更改的糟糕项目结构。您能否提供有关我们文档中缺失信息的其他信息?举个例子就好了,然后我可以提交一个文档请求来添加它。您能提供一个部署管理器操作的工作示例吗?是
操作:gcp类型/pubsub-v1:pubsub.projects.topics.setIamPolicy
还是
操作:gcp类型/pubsub-v1:projects.topics.setIamPolicy
?另外,“资源级别策略”是正确的名称吗?是否有一个好的高级ish文档,其中列出了项目级和资源级访问控制之间的区别,包括API的区别?如果部署管理器操作不可能,那很好,但我想使用它来避免编写API脚本。是否可以使用操作?目前不可能使用管理者操作
imports:
  - path: templates/pubsub/pubsub.py
    name: pubsub.py

resources:
  - name: test-pubsub
    type: pubsub.py
    properties:
      topic: test-topic
      accessControl:
        - role: roles/pubsub.subscriber
          members:
            - user:demo@user.com
      subscriptions:
        - name: first-subscription
          accessControl:
            - role: roles/pubsub.subscriber
              members:
               - user:demo@user.com
        - name: second-subscription
          ackDeadlineSeconds: 15