GCP предоставляет сервисному аккаунту разрешение на запись в корзину GCS с помощью Deployment Manager.

В шаблоне диспетчера развертывания Jinja я пытаюсь создать приемники журналов < / а>:

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

Это означает, что определенная учетная запись службы будет автоматически создана для каждого приемника журналов.

И необходимо предоставить этой учетной записи службы разрешения на запись в указанную (и уже существующую) корзину.

Итак, в разделе шаблона, который предоставляет разрешения, я мог бы ссылаться на удостоверения учетных записей служб (адреса электронной почты), используя $(ref.logsink>.writerIdentity).

А теперь самое интересное - единственный надежный способ добавить привязку к ACL корзины - использовать _ 3_ объекта 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

И проблема в том, что writerIdentity находится в форме serviceAccount:<email>, но entity, ожидаемый методом insert, должен быть в форме user-<email>.

И не могу найти способ приспособить первое ко второму.


person Milen A. Radev    schedule 25.06.2019    source источник
comment
В справочнике по API нет упоминания об учетной записи службы, хотя есть упоминания о группах (group-email). Одна из возможностей - создать группу в вашей организации GSuite и добавить учетную запись службы в эту группу.   -  person manasouza    schedule 04.07.2019
comment
Уже есть группа ([email protected]), который можно использовать для всех приемников журналов, если они настроены на использование общего идентификатора модуля записи (противоположного уникальному идентификатору модуля записи). Проблема в том, что я хотел бы избежать использования идентификатора общего писателя. И если мне нужно добавить учетную запись службы в группу в шаблоне DM, учетной записи службы менеджера развертывания потребуется еще больше разрешений / ролей.   -  person Milen A. Radev    schedule 12.07.2019
comment
@ MilenA.Radev тебе удалось это решить? Аналогичный случай: у меня уже есть Реестр контейнеров (он создается вне Deployment Manager) и связанный с ним сегмент; Я хотел бы добавить привязку корзины ACL для моей учетной записи службы Kubernetes (вся инфраструктура k8s развертывается через Deployment Manager, даже развертывание приложений автоматизировано с помощью Flux, поэтому этот ручной шаг привязки вручную для меня неприемлем)   -  person Ivan    schedule 12.07.2019


Ответы (1)


Вероятно, вы захотите использовать политики IAM корзины, которые поддерживают учетные записи служб:

https://cloud.google.com/storage/docs/json_api/v1/buckets/setIamPolicy

Я согласен, что это немного вводит в заблуждение, и естественно думать, что BucketAccessControls также должен поддерживать учетные записи служб ...

person caba    schedule 23.10.2019
comment
Ссылки на внешние ресурсы приветствуются, но, пожалуйста, добавьте контекст вокруг ссылки, чтобы ваши друзья-пользователи имели некоторое представление о том, что это такое и почему. Всегда указывайте наиболее релевантную часть важной ссылки, если целевой сайт недоступен или постоянно отключен. См .: Как ответить. - person Eduardo Baitello; 23.10.2019
comment
Уже пробовал - он перезаписывает текущие привязки предоставленной. Это означает, что вам нужно позвонить getIamPolicy, добавить новые привязки и позвоните setIamPolicy с этим. Что немного проблематично. - person Milen A. Radev; 24.10.2019
comment
извините, я не использую API напрямую / через Ansible, но с Terraform, который дает вам разные примитивы (надеюсь, через API у вас есть что-то эквивалентное) в зависимости от того, хотите ли вы переопределить или просто включить: terraform.io/docs/providers/google/r/storage_bucket_iam.html - person caba; 24.10.2019