我想问你如何在API中隐藏秘密密钥比如数据库连接用户名,密码或服务API密钥
当我在虚拟机实例上部署应用程序时,我应该将它们像环境变量一样移到代码之外,还是需要将它们移到虚拟机之外的另一个地方?
因为实例的URL是可公开访问的,所以人们已经有了实例的URL。将它们保存在环境变量中安全吗?或者需要把它们移到另一个地方
感谢已经有很多关于在环境变量中存储秘密的讨论(避免将它们提交给版本控制是好事,但有很多原因是坏事)。我不打算对此作进一步评论,但无论如何,谷歌云的秘密管理器正是为此而设计的。它用来存储API密钥、密码、证书和其他敏感数据。
你可以通过多种方式(云控制台,云SDK等)创建你的秘密,然后添加一个秘密版本,将包含秘密的实际内容。
完成后,您可以使用针对编程语言的特定客户端库从代码中检索它们。例如,在Python中:
def access_secret_version(project_id, secret_id, version_id):
"""
Access the payload for the given secret version if one exists. The version
can be a version number as a string (e.g. "5") or an alias (e.g. "latest").
"""
# Import the Secret Manager client library.
from google.cloud import secretmanager
# Create the Secret Manager client.
client = secretmanager.SecretManagerServiceClient()
# Build the resource name of the secret version.
name = f"projects/{project_id}/secrets/{secret_id}/versions/{version_id}"
# Access the secret version.
response = client.access_secret_version(request={"name": name})
# Verify payload checksum.
crc32c = google_crc32c.Checksum()
crc32c.update(response.payload.data)
if response.payload.data_crc32c != int(crc32c.hexdigest(), 16):
print("Data corruption detected.")
return response
# Print the secret payload.
#
# WARNING: Do not print the secret in a production environment - this
# snippet is showing how to access the secret material.
payload = response.payload.data.decode("UTF-8")
print("Plaintext: {}".format(payload))