0

0

使用不同 GCP 项目 ID 在 Cloud Function 中访问资源

霞舞

霞舞

发布时间:2025-10-08 10:09:33

|

900人浏览过

|

来源于php中文网

原创

使用不同 gcp 项目 id 在 cloud function 中访问资源

本文介绍了如何在 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。你需要执行以下步骤:

  1. 找到 Cloud Function 的服务账号: Cloud Function 的服务账号通常具有以下格式:PROJECT_ID@appspot.gserviceaccount.com 或 PROJECT_NUMBER-compute@developer.gserviceaccount.com,其中 PROJECT_ID 是 com-project-common。 你可以在 Cloud Function 的详细信息页面找到它的服务账号。

  2. 在目标项目(com-project-data)中授予权限: 在 com-project-data 项目中,找到 Secret Manager 服务,并授予 Cloud Function 的服务账号访问权限。 这通常涉及到将 Cloud Function 的服务账号添加到具有 Secret Manager Secret Accessor 角色的成员列表中。 具体操作步骤如下:

    Clips AI
    Clips AI

    自动将长视频或音频内容转换为社交媒体短片

    下载
    • 进入 com-project-data 项目的 IAM & Admin 页面。
    • 点击 "GRANT ACCESS"。
    • 在 "New principals" 字段中,输入 Cloud Function 的服务账号。
    • 在 "Select a role" 字段中,选择 "Secret Manager Secret Accessor"。
    • 点击 "Save"。
  3. 代码示例(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 访问其所需资源的权限。 这种方法可以提高安全性,并简化跨项目资源访问的管理。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

483

2023.08.04

js函数function用法
js函数function用法

js函数function用法有:1、声明函数;2、调用函数;3、函数参数;4、函数返回值;5、匿名函数;6、函数作为参数;7、函数作用域;8、递归函数。本专题提供js函数function用法的相关文章内容,大家可以免费阅读。

163

2023.10.07

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

326

2023.10.09

vb连接access数据库的方法
vb连接access数据库的方法

vb连接access数据库方法:1、使用ADO连接,首先导入System.Data.OleDb模块,然后定义一个连接字符串,接着创建一个OleDbConnection对象并使用Open() 方法打开连接;2、使用DAO连接,首先导入 Microsoft.Jet.OLEDB模块,然后定义一个连接字符串,接着创建一个JetConnection对象并使用Open()方法打开连接即可。

411

2023.10.16

asp连接access数据库的方法
asp连接access数据库的方法

连接的方法:1、使用ADO连接数据库;2、使用DSN连接数据库;3、使用连接字符串连接数据库。想了解更详细的asp连接access数据库的方法,可以阅读本专题下面的文章。

121

2023.10.18

access和trunk端口的区别
access和trunk端口的区别

access和trunk端口的区别是Access端口用于连接终端设备,提供单个VLAN的接入,而Trunk端口用于连接交换机之间,提供多个VLAN的传输;Access端口只传输属于指定VLAN的数据,而Trunk端口可以传输多个VLAN的数据,并使用VLAN标签进行区分。想了解更多access和trunk端口相关内容,可以阅读本专题下面的文章。

332

2023.10.31

access怎么导入数据
access怎么导入数据

access导入数据步骤:1. 选择数据源 2. 选择要导入的文件 3. 指定导入选项 4. 选择导入目标 5. 预览数据 6. 导入数据即可。想了解更多access的相关内容,可以阅读本专题下面的文章。

443

2024.04.10

access数据库用途
access数据库用途

access数据库是一种关系型数据库管理系统,主要用途包括:数据存储和管理;数据查询和检索;报告和表单设计;应用程序开发。想了解更多access数据库的相关内容,可以阅读本专题下面的文章。

568

2024.04.10

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

16

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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