setIamPolicy для тем pubsub (на уровне ресурсов не проект) - PullRequest
0 голосов
/ 23 октября 2019

Я использую диспетчер развертывания, чтобы установить политику IAM для существующей публикации / подтемы. Я не хочу приобретать ее и не могу создать ее с помощью диспетчера развертывания (поскольку он существует). Поэтому я хочу установить политику для существующего ресурса

Я могу сделать это с ведрами, но документы действительно сбивают с толку, и я не могу найти правильные методы для ведер

Я хочу сделать это (привязки уровня ресурса) для темы вместо корзины:

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, который выглядит как на уровне проекта? Какой правильный API-интерфейс для настройки политики iam по определенной теме?

API-интерфейсы Google кажутся действительно несовместимыми - эти методы тоже эквивалентны? Документы сбивают с толку https://cloud.google.com/storage/docs/json_api/v1/buckets/setIamPolicy https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics/setIamPolicy

Я пытался сделать это, но получил ошибку:

  - 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'

1 Ответ

1 голос
/ 24 октября 2019

pubsub-v1:projects.topics.setIamPolicy находится на уровне темы, а https://iam.googleapis.com/v1/{resource=projects/*/serviceAccounts/*}:setIamPolicy - для установки Pub / Sub или других ресурсов на уровне проекта.

Вы получаете эти ошибки, потому что вы даете администратору Pub / Sub, и это роль на уровне проекта. Вот пример ролей , которые вы можете предоставить:

  • ролей / просмотрщика
  • ролей / редактора
  • ролей / владельца

Я понимаю, что вы пытаетесь развернуть тему с политикой IAM, которая разрешает только одну учетную запись службы для темы. Вы должны использовать файл yaml и файл python, если это среда, которую вы используете.

В файле python вы установите IAM для темы с помощью метода "set_iam_policy"который принимает 2 аргумента, политику и путь к теме:

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))

Для менеджер развертывания :

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...