这真是令人难以置信。我正在使用 Python 并试图从我可以知道的可以访问的资源中提取秘密管理器值。我在使用 Python 3.8 的 Windows 上。
def fetch_credentials():
project_id = "109837978792" # Anonymized for Stack
secret_id = "some_secret_name"
version_id = "1"
name = f"projects/{project_id}/secrets/{secret_id}/versions/{version_id}"
client = secretmanager.SecretManagerServiceClient()
response = client.access_secret_version(request={"name": name})
payload = response.payload.data.decode("UTF-8")
print("Plaintext: {}".format(payload))
错误
google.api_core.exceptions.PermissionDenied:403 权限 'secretmanager.secrets.get' 拒绝资源'projects/109837978792/secrets/some_secret_name/versions/1'(或者它可能不存在)。
“grpc_message”:“资源的权限‘secretmanager.versions.access’被拒绝
配置
- gcloud 在列表中显示我的项目名称、ID 和编号。
- gcloud 在 auth 列表上显示 my-serviceaccount@myprojectname.iam.gserviceaccount.com 并被选中。
- 控制台将服务账户的 IAM 角色显示为:Owner、DLP User 和 Secret Manager Secret Accessor。
- 控制台将服务帐户密钥显示为活动的并以 JSON 形式显示。有效期至 9999 年 12 月 31 日。
- 控制台将密钥显示为活动并位于路径:projects/109837978792/secrets/some_secret_name
- 控制台显示秘密在版本 1
- 控制台显示在密钥名称上为服务帐户继承的密钥特定 IAM 角色。
- 控制台显示项目中活动的 Secrets Manager API 和 Cloud Resource Manager API。
- 控制台以图表形式显示来自失败调用的秘密管理器活动。
- windows 已设置 GOOGLE_APPLICATION_CREDENTIALS=C:/etc/service_account.json
绑定
{
"role": "roles/secretmanager.secretAccessor",
"members": [
"serviceAccount:my-serviceaccount@myprojectname.iam.gserviceaccount.com"
]
}
为我的 gmail 设置了相同的角色。如果我使用我的 gmail 帐户使用 gcloud auth login 登录,当它具有相同项目的相同角色时,它仍然会失败。我在这里想念什么?