函数工作流 FunctionGraph
函数工作流 FunctionGraph
- 最新动态
- 功能总览
- 产品介绍
- 计费说明
- 快速入门
- 用户指南
-
最佳实践
- FunctionGraph最佳实践汇总
- 性能优化与安全类实践
-
数据处理类实践
- 使用FunctionGraph函数对OBS中的图片进行压缩
- 使用FunctionGraph函数为OBS中的图片打水印
- 使用FunctionGraph函数对DIS数据进行格式转换并存储到CloudTable
- 使用FunctionGraph函数实现通过API方式上传文件
- 使用FunctionGraph函数对IoTDA中的设备坐标数据进行转换
- 使用FunctionGraph函数对OBS中的文件进行加解密
- 使用FunctionGraph函数识别LTS中的异常业务日志并存储到OBS
- 使用FunctionGraph函数对LTS中的日志进行实时过滤
- 使用FunctionGraph函数流对OBS中的图片进行旋转
- 使用FunctionGraph函数流对图片进行压缩和打水印
- 功能应用类实践
- 函数构建类实践
- 开发指南
- API参考
- SDK参考
- 场景代码示例
-
常见问题
-
产品咨询
- 使用FunctionGraph是否需要开通计算、存储、网络等服务?
- 使用FunctionGraph开发程序之后是否需要部署?
- FunctionGraph为函数分配的磁盘空间有多少?
- 是否支持在函数中启动TCP的监听端口,通过EIP接收外部发送过来的TCP请求?
- 函数发起HTTP请求的源地址如何获取?
- FunctionGraph是否支持对上传的zip文件进行反编译?
- FunctionGraph的函数是否支持功能扩展?
- FunctionGraph中的代码是如何隔离的?
- 函数常规信息中的“应用”如何理解?
- 用户需要为函数的冷启动时间付费吗?
- 函数计费中的调用次数,是某一账号下在不同region的所有函数的调用次数总和吗?
- Python语言的函数从V1版本迁移到V2版本时需注意哪些兼容性问题?
- FunctionGraph函数支持哪些编程语言?
- 创建函数
-
配置函数
- 能否在函数环境变量中存储敏感信息?
- FunctionGraph的函数如何读写上传的文件?
- 为函数挂载文件系统时,报“failed to mount exist system path”
- FunctionGraph如何实现域名解析?
- FunctionGraph如何通过域名访问专享版APIG中注册的接口?
- FunctionGraph函数通过域名访问APIG中注册的接口时,报域名无法解析?
- 使用定制运行时语言的函数能操作哪些目录?
- FunctionGraph的函数支持哪些中文字体?
- 能否在函数代码中使用线程和进程?
- 函数如何访问MySQL数据库?
- 函数无法通过VPC连接对应的Redis?
- 如何读取函数的请求头?
- Python语言的函数中,中文注释报乱码错误
-
调用函数
- FunctionGraph的函数执行需要多长时间?
- FunctionGraph的函数执行包含了哪些过程?
- FunctionGraph函数长时间不执行时,相关的实例会如何处理?
- 如何获取函数运行过程中的内存使用量信息?
- 为什么首次调用函数时速度会比较慢?
- 为什么函数实际使用内存大于预估内存,甚至触发内存溢出OOM?
- 函数执行失败返回“runtime memory limit exceeded”时,如何查看内存占用大小?
- 自定义镜像函数执行失败报“CrashLoopBackOff”
- 同步调用函数时,未收到调用响应的可能原因?
- 函数中os.system("command &")命令的执行日志未采集,应如何处理?
- 函数执行超时的可能原因有哪些?
- 使用APIG触发器调用一个返回String的FunctionGraph函数时,报500错误
- Python2.7在执行reload(sys)后无法通过print打印日志
- 运行函数时报错error while loading shared libraries时如何处理?
- 配置触发器
- 配置依赖包
-
产品咨询
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
资产识别与管理
在函数的整个生命周期中,FunctionGraph提供安全的运行环境,用户需结合FunctionGraph提供的安全机制确保代码、依赖包及配置的安全。
运行环境安全
FunctionGraph服务提供用户代码执行所需的计算节点和函数实例。该服务基于用户调用量综合评估后,提供有效的算力,同时确保节点的可用性和安全性。
计算节点安全
计算节点提供以下华为云标准的安全防护能力,详情请参考《华为云安全白皮书》。
- 多AZ多集群容灾:一个region的计算节点部署在多个AZ(可用区)、多个集群,具备可用区容灾能力。
- 独立的VPC环境:计算节点位于独立隔离的VPC中,用户无法直接访问计算节点。
- 主机安全防护:计算节点使用华为云企业主机安全HSS服务,提供漏洞检测,安全检测和防御,并与华为云安全部门协作,提供快速感知与处置能力。
- 漏洞修复或安全升级:FunctionGraph负责计算节点的漏洞修复及安全升级,且升级过程对用户透明。当存在不兼容风险时,将以公告或短信形式通知客户并提供适配方案,确保用户业务平滑迁移。
函数实例安全
函数实例提供函数级隔离能力,每个实例仅允许一个函数运行。
- 网络隔离:函数实例间及函数实例与节点间均不可直接访问。根据用户的配置,函数实例可选择是否访问公网或用户VPC网络。
- 函数实例冻结:当检测到恶意租户攻击时,FunctionGraph可即时冻结并隔离恶意用户函数实例,确保运行环境安全。
- 漏洞修复和安全升级:FunctionGraph负责函数实例的漏洞修复及安全升级,且升级过程对用户透明。当存在不兼容风险时,将以公告或短信形式通知客户并提供适配方案,确保用户业务平滑迁移。
- 运行时停止维护:随社区停止维护,FunctionGraph提供的运行时将逐步进入淘汰流程,禁止用户使用已停止维护的运行时创建函数。建议客户尽快迁移现有函数至新运行时,FunctionGraph不保证已停止支持的运行时版本能够持续正常运行。
用户代码安全
- 代码分享和下载:FunctionGraph可以为用户提供临时代码及下载地址,并设置有效期,用户应避免临时下载地址泄露,以降低代码或库泄露的风险。
- 敏感信息防泄露:用户应避免在代码或依赖包中明文记录敏感信息,例如访问密钥(AK)、安全密钥(SK)、数据库密码等;用户代码日志中应避免打印令牌(token)、密码等敏感信息,以防敏感信息泄露。
- 代码无漏洞:用户需确保代码、库和依赖包安全性,及时识别、修复漏洞并更新函数。防止因用户代码漏洞引发攻击,从而影响业务安全。
华为云为FunctionGraph提供了多个安全云服务,可增强代码扫、威胁分析等安全能力。
华为云服务 |
说明 |
---|---|
支持对FunctionGraph的代码进行多维度安全扫描,覆盖代码风格、质量及安全问题。其核心能力包括:
|
|
安全云脑(SecMaster)是华为云原生的新一代安全运营中心,集华为云多年安全经验,基于云原生安全,提供云上资产管理、安全态势管理、安全信息和事件管理、安全编排与自动响应等能力,帮助您实现一体化、自动化安全运营管理,满足您的安全需求。 通过分析FunctionGraph相关云服务(如OBS、VPC)的日志数据,实时检测恶意行为。
|
可结合CodeArts Check实现代码侧全流程防护,同时通过SecMaster监控运行时威胁,构建FunctionGraph的安全增强体系。
用户配置安全
- 敏感信息保护:当用户代码或配置中包含敏感信息时,强烈建议使用加密环境变量,以避免在用户界面或API返回结果中出现明文展示,从而预防敏感信息泄露。
- 委托权限最小化:在配置触发器、VPC访问、自定义镜像、磁盘挂载等场景中,FunctionGraph需与其他云服务协同作业,需要创建云服务委托,确保FunctionGraph具备代表您执行部分资源运维工作的权限。配置委托时应遵循权限最小化原则,能够有效降低委托Token泄露时攻击的影响范围。
- 使用KMS动态加解密(华为云数据加密服务DEW):若需在函数运行时解密敏感数据(如数据库密码、API密钥),可通过KMS SDK动态操作密钥。用户可以将加解密秘钥托管在KMS,并在IAM服务为函数创建委托授权FunctionGraph访问KMS(授权满足最小化使用原则),授权策略如下所示:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:huaweicloud:kms:REGION:ACCOUNT_ID:keyring/kms-ring-123456/key/kms-key-123456" } ] }
然后在代码中添加KMS SDK代码片段以获取秘钥,从而对敏感数据进行加解密操作。如下以python代码片段为例。
from huaweicloudsdkkms import KmsClient, models def decrypt_data(): # 初始化KMS客户端 kms_client = KmsClient( secret_id=os.getenv('KMS_SECRET_ID'), secret_key=os.getenv('KMS_SECRET_KEY'), region_name="cn-north-4" ) decrypt_request = models.DecryptRequest( key_id="kms-key-123456", ciphertext=b"encrypted_data_base64", encryption_algorithm="AES_256_CBC" ) response = kms_client.decrypt(decrypt_request) return response.plaintext.decode('utf-8')
父主题: 安全