首页 > Java > java教程 > 正文

使用 Google Cloud Functions 访问不同项目中的资源

心靈之曲
发布: 2025-10-08 10:45:33
原创
546人浏览过

使用 google cloud functions 访问不同项目中的资源

在 Google Cloud Functions 中访问不同项目中的资源,关键在于理解服务账户及其权限管理。Cloud Functions 本身拥有一个服务账户,该账户代表了 Cloud Functions 的身份。你需要授予这个服务账户访问其他项目资源的权限,而不是尝试为 Cloud Functions 分配多个身份。

核心概念:服务账户和权限

服务账户是一种特殊的 Google 账户,由应用程序而非个人使用。Cloud Functions 默认使用一个服务账户,其名称格式通常为:PROJECT_ID@appspot.gserviceaccount.com。 你可以通过 Google Cloud Console 查看和修改 Cloud Functions 使用的服务账户。

权限控制的核心在于授予 Cloud Functions 服务账户访问其他项目资源的权限。例如,如果你的 Cloud Functions 位于项目 com-project-common 中,需要访问项目 com-project-data 中的 Secret Manager 密钥,则需要执行以下步骤:

  1. 找到 Cloud Functions 的服务账户: 在 Google Cloud Console 中,找到你的 Cloud Function,并查看其服务账户。

  2. 在 com-project-data 项目中授予权限: 在 com-project-data 项目的 IAM (Identity and Access Management) 页面,添加 Cloud Functions 的服务账户,并授予其访问 Secret Manager 密钥的权限。 例如,可以授予 "Secret Manager Secret Accessor" 角色。

具体步骤示例:访问 Secret Manager 密钥

假设 Cloud Functions 位于项目 com-project-common,需要访问项目 com-project-data 中名为 my-secret 的 Secret Manager 密钥。

Google’s NSynth
Google’s NSynth

Google NSynth -用器学习生成的由机声音制作音乐

Google’s NSynth 34
查看详情 Google’s NSynth
  1. 获取 Cloud Functions 的服务账户: 假设 Cloud Functions 的服务账户为 com-project-common@appspot.gserviceaccount.com。

  2. 在 com-project-data 项目中授予权限:

    • 进入 com-project-data 项目的 IAM 页面。
    • 点击 "GRANT ACCESS"。
    • 在 "New principals" 字段中输入 com-project-common@appspot.gserviceaccount.com。
    • 在 "Select a role" 字段中选择 "Secret Manager Secret Accessor"。
    • 点击 "SAVE"。

现在,Cloud Functions 就可以访问 com-project-data 项目中的 my-secret 密钥了。

代码示例:使用 Python 访问 Secret Manager 密钥

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.
    """

    client = secretmanager.SecretManagerServiceClient()

    name = f"projects/{project_id}/secrets/{secret_id}/versions/{version_id}"

    response = client.access_secret_version(name=name)

    payload = response.payload.data.decode("UTF-8")

    return payload

def main(request):
    project_id = "com-project-data" # 密钥所在的 Project ID
    secret_id = "my-secret" # 密钥的名称

    secret_value = access_secret_version(project_id, secret_id)

    return f"Secret value: {secret_value}"
登录后复制

注意事项:

  • 最小权限原则: 始终遵循最小权限原则,仅授予 Cloud Functions 服务账户访问所需资源的最小权限。
  • 避免使用服务账户密钥文件: 强烈不建议使用服务账户密钥文件进行身份验证,因为这会带来安全风险。 应该始终使用 Cloud Functions 提供的服务账户。
  • IAM 角色: 仔细选择合适的 IAM 角色。 "Secret Manager Secret Accessor" 角色允许访问 Secret Manager 密钥,但如果需要管理密钥,则需要更高的权限,例如 "Secret Manager Admin"。
  • 环境变量 不要将敏感信息(例如密钥)硬编码到代码中。 使用环境变量或 Secret Manager 来存储和管理敏感信息。

总结:

通过正确配置 Cloud Functions 的服务账户权限,可以安全地访问位于不同 GCP 项目中的资源。 避免使用不安全的身份验证方式,例如服务账户密钥文件。 遵循最小权限原则,并仔细选择合适的 IAM 角色。 通过 Secret Manager 安全地管理敏感信息。 理解并应用这些原则,可以构建安全、可维护的 Google Cloud Functions 应用程序。

以上就是使用 Google Cloud Functions 访问不同项目中的资源的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号