无服务器架构的安全保障:从代码签名到API保护
立即解锁
发布时间: 2025-09-05 00:37:36 阅读量: 10 订阅数: 20 AIGC 

# 无服务器架构的安全保障:从代码签名到API保护
## 1. 交付管道与运行时版本
在维护交付管道时,它们很可能运行在第三方提供的虚拟机和运行时环境中。而且,不必在所有管道和函数中使用相同的运行时版本。例如,即使Lambda运行时还不支持最新版本的Node.js,也可以在管道中使用它。
## 2. SLSA安全框架
SLSA(Supply chain Levels for Software Artifacts)安全框架是一个“标准和控制清单,用于防止篡改、提高完整性,并保护软件包和基础设施”。它致力于将整个软件供应链从“足够安全”提升到最高弹性水平。如果你的安全成熟度较高,可以使用该框架来衡量和改进软件供应链的安全性。可以参考SLSA文档来开始使用。另外,OWASP的软件组件验证标准(SCVS)也是一个衡量供应链安全的框架。
## 3. Lambda代码签名
软件供应链的最后一步是将函数代码打包并部署到云端。此时,函数通常由业务逻辑(自己编写的代码)和函数依赖项中列出的第三方库(他人编写的代码)组成。
Lambda提供了在部署代码前对其进行签名的选项。这使得Lambda服务能够验证部署是否由可信源发起,以及代码是否未被篡改。Lambda会进行多项验证检查,包括自签名后软件包是否未被修改以及签名本身是否有效。
### 3.1 创建签名配置文件
要对代码进行签名,首先需要创建一个或多个签名配置文件。这些配置文件可以映射到应用程序使用的环境和账户。例如,可以为每个AWS账户创建一个签名配置文件,或者为每个函数创建一个签名配置文件以实现更高的隔离性和安全性。签名配置文件的CloudFormation资源示例如下:
```json
{
"Type" : "AWS::Signer::SigningProfile",
"Properties" : {
"PlatformId" : "AWSLambda-SHA384-ECDSA"
}
}
```
### 3.2 配置代码签名
定义签名配置文件后,可以使用它为函数配置代码签名。示例如下:
```json
{
"Type" : "AWS::Lambda::CodeSigningConfig",
"Properties" : {
"AllowedPublishers" : [
{
"SigningProfileVersionArns" : [
"arn:aws:signer:us-east-1:123456789123:/signing-profiles/my-profile"
]
}
],
"CodeSigningPolicies" : {
"UntrustedArtifactOnDeployment": "Enforce"
}
}
}
```
### 3.3 分配代码签名配置
最后,将代码签名配置分配给函数:
```json
{
"Type" : "AWS::Lambda::Function",
"Properties" : {
"CodeSigningConfigArn" : [
"arn:aws:lambda:us-east-1:123456789123:code-signing-config:csc-config-id"
]
}
}
```
部署此函数时,Lambda服务将验证代码是否由可信源签名,以及自签名后是否未被篡改。
## 4. 保护无服务器API
根据OWASP十大威胁列表,对Web应用程序的头号威胁是访问控制失效。虽然无服务器架构有助于减轻访问控制失效带来的一些威胁,但在这方面仍需努力。
在应用零信任安全模型时,必须对每个隔离组件以及系统边界应用访问控制。对于大多数无服务器应用程序,安全边界通常是API网关端点。如果构建的无服务器应用程序向公共互联网暴露API,则必须为该API设计并实施适当的访问控制机制。
### 4.1 API网关访问控制选项
Amazon API Gateway提供两种类型的API:REST API和HTTP API,它们具有不同的功能和成本。以下是API网关的访问控制选项总结:
| 访问控制策略 | 描述 | REST API | HTTP API |
| --- | --- | --- | --- |
| Cognito授权器 | 与亚马逊Cognito访问管理服务和API Gateway REST API直接集成。Cognito客户端凭证交换为访问令牌,直接与Cognito进行验证。 | 是 | 否 |
| JWT授权器 | 可用于将使用JSON Web Tokens(JWT)进行访问控制的访问管理服务(如Amazon Cognito或Okta)与API Gateway HTTP API集成。 | 否 | 是 |
| Lambda授权器 | 当使用除Cognito之外的访问管理服务时,可使用Lambda函数实现自定义授权逻辑,或在无法进行基于用户的身份验证时验证传入的Webhook消息。 | 是 | 是 |
### 4.2 使用Amazon Cognito保护REST API
虽然有许多访问管理服务和身份提供者可供选择,如Okta和Auth0,但这里重点介绍使用Cognito来保护REST API,因为它是AW
0
0
复制全文
相关推荐









