

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 修复 Lambda 函数的暴露
<a name="exposure-lambda-function"></a>

AWS Security Hub 可以为 AWS Lambda (Lambda) 函数生成暴露结果。

在 Security Hub 控制台上，暴露调查发现中涉及的 Lambda 函数及其识别信息列在调查发现详细信息的**资源**部分中。通过编程方式，您可以通过 Security Hub CSP [https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_GetFindingsV2.html](https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_GetFindingsV2.html)M API 的操作来检索资源详细信息。

在确定暴露调查发现中涉及的资源后，如果不需要该资源，您可以将其删除。删除不必要的资源可以减少您的曝光概况和 AWS 成本。如果资源至关重要，请按照这些建议的修复步骤进行操作以帮助降低风险。修复主题根据特征的类型进行划分。

单个暴露调查发现包含在多个修复主题中发现的问题。相反，您只需解决一个修复主题即可解决暴露调查发现并降低其严重性级别。您的风险修复方法取决于您的组织要求和工作负载。

**注意**  
 本主题中提供的补救指南可能需要在其他 AWS 资源中进行进一步的咨询。

**Contents**
+ [Lambda 函数的错误配置特征](#lambda-function-misconfiguration)
  + [Lambda 函数部署在 Amazon VPC 之外](#deployed-outside-vpc)
  + [与 Lambda 函数关联的 IAM 角色具有管理访问策略](#administrative-access-policy)
  + [与 Lambda 函数关联的 IAM 角色具有对服务的管理访问权限的策略 AWS](#service-admin-policy)
  + [无需授权即可通过 API Gateway 访问 Lambda 函数](#api-gateway-no-authorization)
+ [Lambda 函数的可访问性特征](#lambda-function-reachability)
  + [可以公开调用 Lambda 函数](#publicly-invocable)
+ [Lambda 函数的漏洞特征](#lambda-function-vulnerability)
  + [Lambda 函数存在可通过网络利用的软件漏洞](#high-priority-vulnerability)
  + [Lambda 函数存在软件漏洞](#low-priority-vulnerability)
  + [Lambda 函数包含恶意软件包](#malicious-package)
  + [Lambda 函数存在代码漏洞](#code-vulnerability)

## Lambda 函数的错误配置特征
<a name="lambda-function-misconfiguration"></a>

以下是 Lambda 函数的错误配置特征和建议的修复步骤。

### Lambda 函数部署在 Amazon VPC 之外
<a name="deployed-outside-vpc"></a>

 默认情况下，部署 Lambda 函数时可以访问公共互联网。此默认配置使 Lambda 函数能够访问 AWS 服务端点和外部端点 APIs，但也使它们面临潜在的安全风险。具有互联网访问权限的函数可能会被用来泄漏数据、与未经授权的服务器进行通信，或者在遭到入侵后成为外部行为者的入口点。Amazon VPC 通过限制 Lambda 函数只能与您定义的私有网络内的资源通信来提供网络隔离。根据标准安全原则，我们建议在 VPC 内部署 Lambda 函数以通过网络隔离提高安全性。

**将函数附加到 VPC**  
 在暴露调查发现中，通过超链接打开资源。此时将打开 Lambda 函数窗口。要通过限制其网络访问权限来保护 Lambda 函数，请将其附加到具有适当网络控制的 VPC。在将您的函数附加到 VPC 之前，请规划其可能需要的任何 AWS 服务访问权限，因为没有 NAT 网关或 VPC 终端节点的私有子网中的函数将无法 AWS 访问服务。 APIs有关如何将 Lambda 函数附加到您账户中的 Amazon VPC 的信息，请参阅[将 Lambda 函数附加到您的 AWS 账户中的 Amazon VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#configuration-vpc-attaching)。如果您的功能需要从私有子网内访问服务，请考虑使用 VPC 终端节点进行 AWS 服务连接，无需访问 Internet。如果您需要从私有子网进行出站互联网连接，请配置 NAT 网关。

### 与 Lambda 函数关联的 IAM 角色具有管理访问策略
<a name="administrative-access-policy"></a>

 管理访问策略为 Lambda 函数提供了对 AWS 服务和资源的广泛权限。这些策略通常包含功能不需要的权限。如果在 Lambda 函数上提供具有管理访问策略的 IAM 身份，而不是执行角色所需的最低权限集，则当函数遭到入侵时，可能会扩大攻击范围。根据标准安全原则， AWS 建议您授予最低权限，这意味着您仅授予执行任务所需的权限。

1.  **查看和识别管理策略** 

    在暴露调查发现中，识别角色名称。前往 IAM 控制面板，找到具有先前识别的角色名称的角色。查看附加到 IAM 角色的权限策略。如果该策略是 AWS 托管策略，请查找`AdministratorAccess`或`IAMFullAccess`。否则，在策略文档中，查找同时包含 `"Effect": "Allow", "Action": "*"` 和 `"Resource": "*"` 语句的语句。

1.  **实施最低权限访问** 

    将管理策略替换为仅授予函数运行所需的特定权限的策略。有关 IAM 角色的安全最佳实践的更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[应用最低权限许可](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。要识别不必要的权限，您可以使用 IAM Access Analyzer 来了解如何基于访问历史记录修改策略。有关更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[外部和未使用的访问的调查发现](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-findings.html)。或者，您可以创建一个新的 IAM 角色，以避免影响使用现有角色的其他 Lambda 函数。在这种情况下，请创建一个新的 IAM 角色。然后将新角色与实例关联起来。有关替换函数的 IAM 角色的信息，请参阅《AWS Lambda 开发人员指南》**中的[更新函数的执行角色](https://docs.aws.amazon.com/lambda/latest/dg/permissions-executionrole-update.html#update-execution-role)。

1.  **安全配置注意事项** 

    如果实例需要管理访问权限，请考虑实施以下额外安全控制措施来降低风险：
   +  **多重身份验证（MFA）**– MFA 通过要求其他形式的身份验证来增加额外安全保障。即使凭证遭到泄露，这也有助于防止未经授权的访问。有关更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[需要多重身份验证（MFA）](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#enable-mfa-for-privileged-users)。
   +  **IAM 条件** – 通过设置条件元素，您可以基于源 IP 或 MFA 期限等因素限制何时以及如何使用管理权限。有关更多信息，请参阅《IAM 用户指南》**中的[使用 IAM 策略中的条件进一步限制访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#use-policy-conditions)。
   +  **权限边界** – 权限边界规定了角色可以拥有的最大权限，为具有管理访问权限的角色提供防护。有关更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[使用权限边界在账户内委派权限管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-permissions-boundaries)。

### 与 Lambda 函数关联的 IAM 角色具有对服务的管理访问权限的策略 AWS
<a name="service-admin-policy"></a>

 服务管理策略允许 Lambda 函数在特定 AWS 服务中执行所有操作。这些策略通常会授予比函数运行所需更多的权限。如果带有服务管理策略的 Lambda 函数遭到入侵，攻击者可能会利用这些权限访问或修改您 AWS 环境中的敏感数据或服务。根据标准安全原则，我们建议您授予最低权限，这意味着您仅授予执行任务所需的权限。

1.  **查看和识别管理策略** 

    在暴露调查发现中，识别 ARN 中的角色名称。前往 IAM 控制面板，找到角色名称。查看附加到角色的权限策略。如果该策略是 AWS 托管策略，请查找`AdministratorAccess`或`IAMFullAccess`。否则，在策略文档中，查找包含 `"Effect": "Allow", "Action": "*"` 和 `"Resource": "*"` 语句的语句。

1.  **实施最低权限访问** 

    将管理策略替换为仅授予函数运行所需的特定权限的策略。有关更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[应用最低权限许可](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。要识别不必要的权限，您可以使用 IAM Access Analyzer 来了解如何基于访问历史记录修改策略。有关更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[外部和未使用的访问的调查发现](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-findings.html)。或者，您可以创建一个新的 IAM 角色，以避免影响使用现有角色的其他 Lambda 函数。在这种情况下，请创建一个新的 IAM 角色，然后将新的 IAM 角色与实例关联起来。有关替换函数的 IAM 角色的说明，请参阅《AWS Lambda 开发人员指南》**中的[更新函数的执行角色](https://docs.aws.amazon.com/lambda/latest/dg/permissions-executionrole-update.html#update-execution-role)。

1.  **安全配置注意事项** 

    如果实例需要服务级别的管理权限，请考虑实施以下额外安全控制措施来降低风险：
   +  **多重身份验证（MFA）**– MFA 通过要求其他形式的身份验证来增加额外安全保障。即使凭证遭到泄露，这也有助于防止未经授权的访问。有关更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[需要多重身份验证（MFA）](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#enable-mfa-for-privileged-users)。
   +  **IAM 条件** – 通过设置条件元素，您可以基于源 IP 或 MFA 期限等因素限制何时以及如何使用管理权限。有关更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[使用 IAM 策略中的条件进一步限制访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#use-policy-conditions)。
   +  **权限边界** – 权限边界规定了角色可以拥有的最大权限，为具有管理访问权限的角色提供防护。有关更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[使用许可边界委派权限管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-permissions-boundaries)。

### 无需授权即可通过 API Gateway 访问 Lambda 函数
<a name="api-gateway-no-authorization"></a>

 未经授权的 API Gateway 方法允许任何有权访问 API 网关的调用者无需身份验证即可调用集成的 Lambda 函数。这种配置会带来安全风险，因为调用者可以在未经适当授权的情况下调用 Lambda 函数，从而可能导致滥用函数功能、消耗资源、访问敏感数据或未经授权的操作。虽然 API Gateway 可能具有网络级别的访问控制，但由于缺乏方法级授权，任何有权访问 API Gateway 的调用者都可以免费调用该函数。遵循安全最佳实践， AWS 建议为与 Lambda 函数集成的 API Gateway 方法实施适当的授权机制。

**配置 API Gateway 身份验证**  
 在曝光的 “**资源**” 选项卡中，单击 “**打开资源**” 超链接以访问 API Gateway 方法。查看当前的授权配置并实施适当的身份验证机制。API Gateway 支持多种身份验证选项，包括 AWS IAM、Amazon Cognito 用户池、Lambda 授权者和 API 密钥。选择最适合您的安全要求和用例的身份验证方法。有关配置身份验证的详细说明，请参阅《API Gatew [ay *开发者指南》中的 API Gateway 中控制和管理对 REST API* 的访问权限](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html)。

## Lambda 函数的可访问性特征
<a name="lambda-function-reachability"></a>

以下是 Lambda 函数的可访问性特征和建议的修复步骤。

### 可以公开调用 Lambda 函数
<a name="publicly-invocable"></a>

 Lambda 基于资源的策略决定了谁可以调用您的函数。如果函数的资源策略包含 “\*” 作为委托人（或者根本不包含委托人），则允许任何经过身份验证的 AWS 用户调用该函数。这会带来重大风险，特别是对于处理敏感数据、修改资源或拥有提升权限的函数。未经授权的用户可以利用此配置执行不需要的操作，从而可能暴露数据、操纵资源或滥用函数功能。根据安全最佳实践，我们建议仅允许授权主体访问 Lambda 函数。

**修改函数的基于资源的策略**  
 在暴露的**资源**选项卡中，通过超链接打开资源。此时将打开 Lambda 函数窗口。通过在基于资源的策略中仅指定授权 AWS 账户 IDs 或特定的 IAM 委托人（用户、角色或服务），限制对您的 Lambda 函数的访问。您只能以编程方式修改基于资源的策略。

## Lambda 函数的漏洞特征
<a name="lambda-function-vulnerability"></a>

以下是 Lambda 函数的漏洞特征和建议的修复步骤。

### Lambda 函数存在可通过网络利用的软件漏洞
<a name="high-priority-vulnerability"></a>

 Lambda 函数代码中使用的软件包可能包含很有可能被利用的常见漏洞和漏洞 (CVEs)。 CVEs 危急会给您的 AWS 环境带来严重的安全风险。攻击者可以利用这些未修补的漏洞来破坏数据的保密性、完整性或可用性，或访问其他系统。利用可能性较高的严重漏洞代表直接的安全威胁，因为漏洞利用代码可能已经公开并被攻击者或自动扫描工具积极使用。根据安全最佳实践，我们建议修补这些漏洞以保护您的函数免受攻击。

**更新受影响的函数**  
 查看特征的**漏洞**选项卡中的**参考**部分。供应商文档可能包括具体的修复指导。按照供应商推荐的过程，将易受攻击的库更新到其最新的安全版本。通常，修复工作流取决于您是通过上传 zip 文件来部署 Lambda 包，还是通过创建带有容器映像的 Lambda 函数来部署 Lambda 包。更新库后，请更新 Lambda 函数代码以使用修复后的版本。之后，请部署更新后的版本。

### Lambda 函数存在软件漏洞
<a name="low-priority-vulnerability"></a>

 Lambda 函数通常使用第三方库和依赖项，这些库和依赖项可能包含安全漏洞，与严重漏洞相比，其严重性或可利用性较低。 CVEs虽然这些非关键漏洞可能不会立即被利用，但它们仍然代表着安全隐患，这些隐患可能会与其他漏洞关联在一起，从而危及您的函数。随着时间推移，还可能会出现新的漏洞利用技术，从而增加这些漏洞的风险。根据标准安全原则，我们建议修补这些漏洞以维护安全的环境。

****  
 查看特征的**漏洞**选项卡中的**参考**部分。供应商文档可能包括具体的修复指导。按照供应商推荐的过程，将易受攻击的库更新到其最新的安全版本。通常，修复工作流取决于您是通过上传 zip 文件来部署 Lambda 包，还是通过创建带有容器映像的 Lambda 函数来部署 Lambda 包。更新库后，请更新 Lambda 函数代码以使用修复后的版本。之后，请部署更新后的版本。

### Lambda 函数包含恶意软件包
<a name="malicious-package"></a>

 恶意软件包是包含有害代码的软件组件，旨在危害系统和数据的机密性、完整性和可用性。恶意软件包会对您的 Lambda 函数构成严重威胁，因为攻击者可以在不利用漏洞的情况下自动执行恶意代码。按照安全最佳实践， AWS 建议移除恶意软件包，以保护您的 Lambda 函数免受潜在攻击。

**移除恶意软件包**  
 在特征的 “**漏洞**” 选项卡的 “**参考**” 部分中查看恶意软件包的详细信息，以了解威胁。从您的函数代码和依赖项中移除已识别的恶意软件包。对于使用图层的函数，请检查是否在任何层中安装了恶意软件包，然后将其删除。更新您的部署包或容器映像以排除恶意软件包，然后部署更新的版本。有关说明，请参阅[将 Lambda 函数部署为.zip 文件存档的.zip 文件存档](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html)[或使用容器映像创建容器映像的 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html)。

### Lambda 函数存在代码漏洞
<a name="code-vulnerability"></a>

 Lambda 函数应用程序代码包含可能被威胁行为者利用的安全漏洞。代码漏洞包括数据泄露、注入缺陷、缺少加密以及通过自动代码分析发现的弱加密。这些漏洞会给您的 AWS 环境带来安全风险，因为攻击者可以利用它们来破坏数据的机密性、完整性或可用性，或者访问其他系统。代码漏洞代表安全漏洞，这些漏洞可能与其他攻击向量链接在一起，从而危害您的功能。遵循安全最佳实践， AWS 建议修复这些代码漏洞，以保护您的函数免受攻击。

**更新受影响的函数**  
 查看特征的**漏洞**选项卡中的**参考**部分。Amazon Inspector 的调查结果可能包括具体的补救指南和显示漏洞代码位置的代码片段。使用提供的代码块或实施安全编码实践，解决函数 plug-and-play代码中已确定的安全问题。在采用代码补救建议之前，请务必对其进行审查，因为您可能需要对其进行编辑以确保代码按预期执行。修复漏洞后，更新 Lambda 函数代码以使用更正后的版本。有关说明，请参阅《*AWS Lambda 开发人员指南*[》中的更新函数代码](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html#configuration-function-update)。之后，请部署更新后的版本。有关说明，请参阅[将 Lambda 函数部署为.zip 文件存档的.zip 文件存档](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html)[或使用容器映像创建容器映像的 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html)。有关亚马逊 Inspector 代码扫描的更多信息，请参阅[亚马逊 Inspector *用户指南中的亚马逊 Inspector* Lambda 代码扫描](https://docs.aws.amazon.com/inspector/latest/user/scanning_resources_lambda_code.html)。