Найти разрешения учетной записи службы, связанной с корзинами

Я создал учетную запись службы с помощью команды

gcloud iam service-accounts create test-sa --display-name "TEST SA"

А затем я даю этой учетной записи службы права администратора в ведре GCS.

gsutil iam ch serviceAccount:test-sa@<PROJECT>.iam.gserviceaccount.com:admin gs://<BUCKET>

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

Один из способов - сделать что-то вроде:

gcloud projects get-iam-policy <PROJECT>  \
--flatten="bindings[].members" \
--format='table(bindings.role)' \
--filter="bindings.members: serviceAccount:test-sa@<PROJECT>.iam.gserviceaccount.com"

Но приведенная выше команда возвращает пустое значение.

Но если я получу ACL для корзины, я ясно вижу, что участники и роли для корзины.

gsutil iam get gs://<BUCKET>
{
  "bindings": [
    {
      "members": [
        "serviceAccount:test-sa@<PROJECT>.iam.gserviceaccount.com"
      ],
      "role": "roles/storage.admin"
    },
    {
      "members": [
        "projectEditor:<PROJECT>",
        "projectOwner:<PROJECT>"
      ],
      "role": "roles/storage.legacyBucketOwner"
    },
    {
      "members": [
        "projectViewer:<PROJECT>"
      ],
      "role": "roles/storage.legacyBucketReader"
    }
  ],
  "etag": "CAI="
}

Может ли кто-нибудь посоветовать мне, как я могу просматривать сегменты / разрешения, связанные с учетной записью службы, а не наоборот?


person Jason Stanley    schedule 29.11.2019    source источник
comment
ни один из ответов не прояснился?   -  person Black_Bacardi    schedule 18.12.2019


Ответы (3)


Проблема здесь в том, что вы смешиваете роли на уровне проекта с ролями на уровне корзины, назначая разрешения непосредственно для корзины (роль на уровне корзины), а затем проверяя на уровне проекта. Дополнительную информацию об этом можно найти здесь.

Вот почему вы получаете разные результаты при проверке проекта (облачные проекты get-iam-policy) или корзины (gsutil iam get gs: //).

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

В зависимости от количества сегментов, которыми вы планируете управлять, вам может быть проще придерживаться ролей на уровне сегментов и просто перебирать список сегментов при проверке разрешений пользователя, поскольку вы можете сделать это очень легко с помощью Cloud SDK. немного для таких циклов, как:

for i in $(cat bucket-list.txt)
do
    gsutil iam get gs://$i
done

Надеюсь, вы найдете это полезным.

person rsalinas    schedule 02.12.2019

Поскольку вы даете разрешение на уровне ACL сегмента и не используете привязку iam учетной записи службы, команда gcloud projects get-iam-policy не вернет это разрешение. Вы можете получить это только при запросе ACL корзины.

person pradeep    schedule 29.11.2019

Вы можете назначить разрешение для ресурса, такого как проект / папка / организация, и для отдельных ресурсов, таких как сегменты, объекты, экземпляры вычислительного ядра, ключи KMS и т. Д. Нет единой команды, которая проверяет все.

На уровне проекта разрешения распространяются на весь проект. На уровне ресурса, такого как объект, влияет только на этот объект. Вам нужно будет проверить все, чтобы точно знать, какие разрешения у члена IAM есть.

person John Hanley    schedule 29.11.2019