Как я могу связать предоставить сервисной учетной записи доступ к определенному секрету?
Я хочу предоставить сервисному аккаунту доступ к секрету в 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