资产识别与管理
在函数的整个生命周期中,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')