我在 GCP 的 Secret 管理器中存储了一个密钥。我们的想法是使用该密钥通过云函数获取预算清单。
现在,我可以从我的代码中访问该密钥,但我面临的问题是我需要使用该密钥设置环境变量。
这是我添加密钥的方式(如果您的本地目录中有该文件),但还有其他方式吗?
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "seret_key_file.json"
答案 0 :(得分:1)
尝试使用具有运行所需角色的 sa 帐户 前
function create_sa() { #
gcloud iam service-accounts create "$SERVICE_ACCOUNT_NAME"
gcloud iam service-accounts list
}
function add_role2sa() { #
gcloud projects add-iam-policy-binding "$PROJECT_ID" --member serviceAccount:"$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" --role 'roles/iam.serviceAccountTokenCreator'
gcloud projects add-iam-policy-binding "$PROJECT_ID" --member serviceAccount:"$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" --role 'roles/cloudfunctions.invoker'
}
function save_key_sa() { #
gcloud iam service-accounts keys create "$GOOGLE_APPLICATION_CREDENTIALS" --iam-account "$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com"
}
您可以获取 json 文件并将其存储在访问权限受限的文件夹中
答案 1 :(得分:0)
您不应为此目的使用 Secret Manager。相反,将您的 Cloud Function 部署为您期望的服务帐户。使用 gcloud
CLI 工具,您可以执行此操作:
gcloud functions deploy ... \
--service-account="my-account@p.iam.gserviceaccount.com"
这将使 Cloud Functions 作为提供的身份运行,继承底层身份的权限。
如果您真的想要使用自定义服务帐户密钥,则需要使用私钥数据手动实例化客户端。例如:
client = secretmanager.SecretManagerServiceClient().from_service_account_info('<json service account key contents>')