
本文介绍了如何在 Google Cloud Function 中访问位于不同 GCP 项目中的资源,特别是当 Cloud Function 和资源(如 Secret Manager)属于不同项目时。我们将探讨如何正确地配置权限,避免使用不安全的身份验证方法,并确保 Cloud Function 能够安全地访问所需的资源。
在 Google Cloud Platform (GCP) 中,Cloud Functions 通常运行在特定的服务账号下。 当 Cloud Function 需要访问位于不同项目中的资源时,关键在于授予 Cloud Function 的服务账号相应的权限。 这意味着,你无需尝试为 Cloud Function 注入多个服务账号,而是应该确保 Cloud Function 的服务账号具有访问目标资源的权限。
假设你的 Cloud Function 运行在项目 com-project-common 中,并且需要访问位于项目 com-project-data 中的 Secret Manager。你需要执行以下步骤:
找到 Cloud Function 的服务账号: Cloud Function 的服务账号通常具有以下格式:PROJECT_ID@appspot.gserviceaccount.com 或 PROJECT_NUMBER-compute@developer.gserviceaccount.com,其中 PROJECT_ID 是 com-project-common。 你可以在 Cloud Function 的详细信息页面找到它的服务账号。
在目标项目(com-project-data)中授予权限: 在 com-project-data 项目中,找到 Secret Manager 服务,并授予 Cloud Function 的服务账号访问权限。 这通常涉及到将 Cloud Function 的服务账号添加到具有 Secret Manager Secret Accessor 角色的成员列表中。 具体操作步骤如下:
代码示例(Python):
from google.cloud import secretmanager
def access_secret_version(project_id, secret_id, version_id="latest"):
"""
Access the payload for the given secret version if one exists.
The version defaults to 'latest' if not specified.
"""
# 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(name=name)
payload = response.payload.data.decode("UTF-8")
return payload
def your_cloud_function(request):
project_id = "com-project-data" # 目标项目 ID
secret_id = "your-secret-id" # Secret ID
secret_value = access_secret_version(project_id, secret_id)
print(f"Secret value: {secret_value}")
return "Function executed successfully!"注意: 确保你的 Cloud Function 具有访问 Secret Manager 的权限。 如果你的 Cloud Function 位于与 Secret Manager 不同的项目中,请按照上述步骤授予其服务账号访问权限。 在代码中,明确指定 Secret 所在的 project_id。
强烈建议避免使用服务账号密钥文件进行身份验证。 这种方法存在安全风险,因为它将敏感凭据存储在代码或配置文件中。 最佳实践是使用 Cloud Function 的内置服务账号,并按照上述步骤授予其访问权限。
通过正确配置 IAM 权限,你可以安全地允许 Cloud Function 访问位于不同 GCP 项目中的资源。 避免使用服务账号密钥文件,并始终遵循最小权限原则,只授予 Cloud Function 访问其所需资源的权限。 这种方法可以提高安全性,并简化跨项目资源访问的管理。
以上就是使用不同 GCP 项目 ID 在 Cloud Function 中访问资源的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号