Q43 — AWS SAA-C03 第17章

第 43/89 题 | ← 返回第17章

Q1343. 某公司的解决方案架构师正在构建一个静态网站,该网站将部署在 Amazon S3 上,用于生产环境。该网站通过 AWS Lambda 函数与 Amazon Aurora PostgreSQL 数据库集成。部署到生产环境的网站将使用指向特定 Lambda 函数版本的 Lambda 别名。公司必须每两周轮换一次数据库凭证。公司之前部署的 Lambda 函数必须能够使用最新的凭证。哪种解决方案能够满足这些要求?

正确答案: A. 将数据库凭证存储在 AWS Secrets Manager 中。启用轮换机制。在 Lambda 函数中编写代码,从 Secrets Manager 中检索凭证。

解析

让我来分析一下 Lambda 函数和数据库凭证轮换的场景。**要求:**1. 静态网站托管在 S3 上,通过 Lambda 函数与 Aurora PostgreSQL 集成。2. Lambda 函数使用指向特定版本的别名。3. 数据库凭证必须每两周轮换一次。4. 先前部署的 Lambda 函数必须能够使用最新的凭据。5. 生产环境**关键约束:** Lambda 别名指向特定版本。这意味着更新环境变量或代码需要部署新版本并更新别名。但要求中提到“先前部署的 Lambda 函数必须能够使用最新凭据”——这表明旧版本应该仍然能够使用新凭据。等等,让我再读一遍:“公司之前部署的 Lambda 函数必须能够使用最新的凭证。”这意味着,如果 Lambda 函数的旧版本仍在运行(或被调用),它应该能够检索当前凭据,而不是部署时存在的凭据。**对每种方案进行分析:****选项A:**- 将凭证存储在 AWS Secrets Manager 中- 开启自动轮换功能(可设置为 2 周)Lambda 函数在运行时从 Secrets Manager 获取凭据。- **分析:**- Secrets Manager 支持自动轮换Lambda 函数在运行时检索凭据,因此每次调用都会获得最新的凭据。即使是旧版本的 Lambda 函数也会获得新的凭证,因为它们每次都会重新获取凭证。- 这符合所有要求**选项 B:**- 在 Lambda 函数代码中包含凭据- 定期更新并部署新功能- **分析:**- 需要每两周重新部署一次- 旧版本的函数(通过别名或其他方式指向)会硬编码旧的凭据。- 违反了先前部署的功能必须使用最新凭据的要求安全反模式- **失败****选项 C:**- 使用 Lambda 环境变量- 当有新凭证可用时进行更新- **分析:**要更新环境变量,您必须发布新的 Lambda 版本- 该别名指向特定版本,因此在您将别名更新为指向新版本之前,它无法看到更新后的环境变量。- 旧版本(即使仍然可以访问)的环境变量中会保留旧的凭据。- 违反了先前部署的功能必须使用最新凭据的要求- **失败****选项 D:**- 将凭据存储在系统管理器参数存储库中- 开启旋转Lambda 从参数存储中检索数据- **分析:**参数存储可以存储凭据然而,Parameter Store 并不像 Secrets Manager 那样具备原生自动轮换功能。您可以配置轮换机制,但这比较复杂,通常需要集成 Secrets Manager 或使用自定义解决方案。- Secrets Manager 专为密钥轮换而设计。虽然这种方法可行,但并非最佳方案,因为参数存储的轮换功能相比 Secrets Manager 而言较为有限。A 与 D 的比较:A 和 D 都允许在运行时检索凭据,这意味着旧的 Lambda 版本可以获得新的凭据。然而:Secrets Manager (A) 具有原生内置的轮换支持,并内置了 Lambda 轮换函数。- 参数存储 (D) 没有自动轮换功能;您需要自行实现,或者在后台使用 Secrets Manager。Secrets Manager 专为数据库凭据轮换而设计。Secrets Manager 还提供自动密码生成和无缝轮换等功能。**结论:**答案是 **A** - 启用轮换功能的 AWS Secrets Manager 是标准的、专门用于数据库凭证轮换的解决方案,可与 Lambda 配合使用,无需重新部署。答案:A 答案是 **A**。## 分析**主要要求:**- 凭证每两周自动轮换一次。- 先前部署的 Lambda 函数必须使用**当前**凭据(而不是部署时的凭据)- Lambda 别名指向特定的函数版本(发布后不可更改)**关键洞察:**由于 Lambda 版本是不可变的,将凭据嵌入代码 (B) 或环境变量 (C) 意味着旧版本将永远保留旧凭据。解决方案必须**在运行时**从外部源检索凭据。**方案评估:**| 选项 | 存储位置 | 轮换支持 | 运行时检索 | 旧函数版本 | 结论 | |——--|————-----|——————|——————-|——————----|——---| | **A** | Secrets Manager | 原生自动 | 是 | 获取当前凭据 | **正确** | | **B** | 硬编码在代码中 | 手动重新部署 | 否 | 仍使用旧凭据 | | | **C** | 环境变量 | 手动更新 | 否(每个版本不可变) | 仍使用旧凭据 | || **D** | 参数存储 | 有限/自定义 | 是 | 获取当前凭据 | 次优 |## 为什么方案 A 是最佳选择**AWS Secrets Manager** 就是为这种使用场景而设计的:1. **原生轮换**:内置的 Lambda 轮换函数每两周自动轮换一次。2. **运行时检索**:函数在执行期间调用 `GetSecretValue` API,始终获取最新凭据。3. **版本免疫性**:即使是旧的 Lambda 版本(由现有别名指向),每次调用时也会获取新的凭据4. **Aurora 集成**:原生支持 PostgreSQL 凭据轮换**选项 D 的区别:** 虽然参数存储可以存储密钥,但它本身不具备自动轮换功能。无论如何,您都需要构建自定义轮换逻辑或与密钥管理器集成,因此选项 A 才是更直接的解决方案。答案:A