Google cloud platform pubsub主题的setIamPolicy(在资源级别而不是项目级别)
我使用deployment manager设置现有发布/子主题的IAM策略-我不想获取它,我无法使用deployment manager创建它(因为它存在)。所以我想对现有资源设置一个策略 我可以用bucket实现这一点,但是文档非常混乱,我找不到合适的bucket方法 我想对主题而不是bucket执行以下操作(资源级绑定):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
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'
是在主题级别,是在项目级别设置发布/订阅或其他资源
您之所以会出现这些错误,是因为您正在为发布/订阅管理员提供权限,而这是项目级别的角色。您可以提供以下示例:
- 角色/观众
- 角色/编辑
- 角色/所有者
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