Python 3.7 не может получить доступ к менеджеру секретной службы Google

Я настроил необходимые роли для диспетчера секретных служб, но когда я пытаюсь получить к ним доступ через код Python 3.7, я получаю ошибку 403, доступ запрещен:

google.api_core.exceptions.PermissionDenied: 403 Permission 'secretmanager.secrets.list' denied for resource 'projects/projectid' (or it may not exist)

Если я обращаюсь к ним с помощью командной строки, он работает:

gcloud secrets list

Это код Python:

# Build the resource name of the parent project.
parent = f"projects/projectid"

# Create the Secret Manager client.
client = secretmanager.SecretManagerServiceClient()

# List all secrets.
for secret in client.list_secrets(request={"parent": parent}):
    print("Found secret: {}".format(secret.name))

person blob    schedule 23.02.2021    source источник
comment
Вы заменяете projectid идентификатором вашего проекта?   -  person sethvargo    schedule 23.02.2021
comment
да заменяю   -  person blob    schedule 23.02.2021
comment
Вы используете учетные данные приложения по умолчанию? Укажите роли / разрешения учетной записи службы. Вы не забыли экспортировать GOOGLE_APPLICATION_CREDENTIALS?   -  person DazWilkin    schedule 23.02.2021
comment
Сейчас он работает, но я не могу получить содержимое секрета с помощью этого кода. Я получаю ошибку атрибута: sec = client.get_secret_version (request = {name: projects / code / secrets / MYSECRET / versions / latest}) print (sec.payload)   -  person blob    schedule 24.02.2021


Ответы (1)


Ваш код у меня работает.

BILLING="..."
PROJECT="..."
ACCOUNT="..."
SECRET="test"

gcloud projects create ${PROJECT}
gcloud beta billing projects link ${PROJECT} \
--billing-account=${BILLING}

gcloud services enable secretmanager.googleapis.com \
--project=${PROJECT}

gcloud iam service-accounts create ${ACCOUNT} \
--project=${PROJECT}

EMAIL="${ROBOT}@${PROJECT}.iam.gserviceaccount.com"

gcloud iam service-accounts keys create ${PWD}/${ACCOUNT}.json \
--iam-account=${EMAIL}

# See note: the minimum role that includes the perm to list secrets
gcloud projects add-iam-policy-binding ${PROJECT} \
--member=serviceAccount:${EMAIL} \
--role=roles/secretmanager.viewer

echo "test" > test
gcloud secrets create ${SECRET} \
--data-file="test" \
--project=${PROJECT}

python3 -m venv venv
source venv/bin/activate

python3 -m pip install google-cloud-secret-manager

# Both required by the app
export PROJECT
export GOOGLE_APPLICATION_CREDENTIALS=${PWD}/${ACCOUNT}.json

python main.py

Урожайность:

Found secret: projects/12345678912/secrets/test

main.py:

from google.cloud import secretmanager

import os

project=os.getenv("PROJECT")

client = secretmanager.SecretManagerServiceClient()

parent = f"projects/{project}"

secrets = client.list_secrets(request={
    "parent":parent,
})

for secret in secrets:
    print("Found secret: {}".format(secret.name))

ПРИМЕЧАНИЕ roles/secretmanager.viewer - единственная предопределенная роль, которая включает разрешение, необходимое для перечисления secretmanager.secrets.list (ссылка)

person DazWilkin    schedule 23.02.2021