0

0

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

心靈之曲

心靈之曲

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

|

561人浏览过

|

来源于php中文网

原创

使用 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 密钥。

SEEK.ai
SEEK.ai

AI驱动的智能数据解决方案,询问您的任何数据并立即获得答案

下载
  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 应用程序。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
console接口是干嘛的
console接口是干嘛的

console接口是一种用于在计算机命令行或浏览器开发工具中输出信息的工具,提供了一种简单的方式来记录和查看应用程序的输出结果和调试信息。本专题为大家提供console接口相关的各种文章、以及下载和课程。

415

2023.08.08

console.log是什么
console.log是什么

console.log 是 javascript 函数,用于在浏览器控制台中输出信息,便于调试和故障排除。想了解更多console.log的相关内容,可以阅读本专题下面的文章。

510

2024.05.29

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

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

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

精品课程

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

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

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

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