Как я могу связать предоставить сервисной учетной записи доступ к определенному секрету?

Я хочу предоставить сервисному аккаунту доступ к секрету в Google Secrets Manager.

Я могу получить доступ к секрету следующим образом:

gcloud beta secrets versions access 1 --secret="thesecret" --project="myproject"

Но когда моя учетная запись службы пытается выполнить ту же команду, gcloud выдает эту ошибку:

ОШИБКА: (gcloud.beta.secrets.versions.access) PERMISSION_DENIED: у запроса недостаточно областей аутентификации.

Главный вопрос: что еще мне нужно сделать, чтобы учетная запись службы могла получить доступ к секрету?


Я предоставил эту служебную учетную запись "role /secretmanager.secretAccessor" в Terraform следующим образом:

resource google_project_iam_binding the-binding {
  project = myproject
  role = "roles/secretmanager.secretAccessor"
  members = [
    "serviceAccount:theserviceaccount@someotherproject.iam.gserviceaccount.com",
  ]
}

И я могу убедиться, что он выполняет эту роль как в консоли gcp, так и вот так:

gcloud projects get-iam-policy myproject  \
--flatten="bindings[].members" \                         
--format='table(bindings.role)' \
--filter="bindings.members:theserviceaccount@someotherproject.iam.gserviceaccount.com"

    ROLE
    roles/secretmanager.secretAccessor

Но есть такая концепция из документации:

Если члену нужно получить доступ только к одному значению секрета, не предоставляйте этому члену возможность доступа ко всем секретам. Например, вы можете назначить служебной учетной записи роль секретного аксессуара (роли /secretmanager.secretAccessor) с одним секретом.

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

1 ответ

Решение

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

gcloud config set account theserviceaccount@someotherproject.iam.gserviceaccount.com

Кроме того, я не знал, что существует более одной команды gcloud верхнего уровня, позволяющей изменять привязки политики iam. Я исследовалgcloud iam ... когда мне было нужно:

gcloud beta secrets add-iam-policy-binding projects/myproject/secrets/mysecret --member serviceAccount:theserviceaccount@someotherproject.iam.gserviceaccount.com --role roles/secretmanager.secretAccessor
Другие вопросы по тегам