使用存储的键作为环境变量

时间:2021-07-23 17:20:08

标签: python google-cloud-platform google-secret-manager

我在 GCP 的 Secret 管理器中存储了一个密钥。我们的想法是使用该密钥通过云函数获取预算清单。

现在,我可以从我的代码中访问该密钥,但我面临的问题是我需要使用该密钥设置环境变量。

这是我添加密钥的方式(如果您的本地目录中有该文件),但还有其他方式吗?

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "seret_key_file.json"

2 个答案:

答案 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>')