可以为Google API凭据设置限制,以限制API密钥或令牌对特定电子表格或文件夹的访问,因此这些凭据无法访问帐户的所有信息,而只能访问指定的文件。
当然!
Google Cloud Platform 具有强大的工具来管理对各种事物的访问,包括 API 凭据访问。
基仕伯 IAM - 云权限和访问
您可以创建云服务以使用密钥发送响应,仅授权某些服务接收/请求密钥。
以下是 GCP IAM 文档。通过前端云控制台或命令行工具按照他们的说明为 api 密钥服务设置策略。
以下是您将为 IAM 执行的操作的要点:
- 为您的项目授权各种谷歌API
- 创建一个服务帐户,例如
my-api-key@see-the-docs-for-google-service-domain
- 对于需要服务密钥的每个应用,请创建另一个服务帐户,即
my-app@see-the-docs-for...
- 为任何应用服务帐户提供你为 API 密钥服务创建的服务帐户的所选访问级别/权限
- 您授权每个应用访问 API 密钥服务
- 部署一个简单的 Flask 服务,以使用 API 密钥服务帐户发送 API 密钥
- 访问您的应用程序中的 API 凭证,这些凭证已被授予自己的 IAM 权限
- 请记住,您在第4步中授权了您的应用
在磁盘上
对于存储在磁盘上的凭据,最好在应用中按需加密/解密它们。
看到这个 SO 答案。如果加密密钥,请继续添加到版本控制。否则,请避免。
秘密管理器或伯格拉斯
但是,我建议您使用开源Berglas工具或Google托管的Secrets产品。您基本上会向机密管理器提供您的 api 密钥,存储它,然后在必要时在应用程序内或加载时获取它。
改编自谷歌云文档,几乎是逐字:
# Import the Secret Manager client library.
from google.cloud import secretmanager_v1beta1 as sm
# GCP project in which to store secrets in Secret Manager.
project_id = 'YOUR_PROJECT_ID'
# ID of the secret to create.
secret_id = 'YOUR_SECRET_ID'
# Create the Secret Manager client.
client = sm.SecretManagerServiceClient()
# Build the parent name from the project.
parent = client.project_path(project_id)
# Create the parent secret
secret = client.create_secret(parent, secret_id, {
'replication': {
'automatic': {},
},
})
# Add the api key
version = client.add_secret_version(secret.name, {'data': b'my-google-api-credentials'})
# Access the api key
response = client.access_secret_version(version.name)
# Now you have your decoded api credentials you can use for authentication
payload = response.payload.data.decode('UTF-8')
我更改了上面的一些评论,但请务必检查Google的文档及其github示例。
如果你更喜欢冒险,Berglas 库非常棒,我直接在几个项目中使用它,通过它的本地 Go 客户端和它在已部署服务中的 docker 镜像。