使用 Kiro Assistance 构建最小权限架构
Source: Dev.to
请提供您希望翻译的完整文本内容(除代码块、URL 之外),我将为您翻译成简体中文并保留原有的 Markdown 格式。
作者
Source: …
介绍
我在想是否可以用 AWS 创建一个简单的示例,演示 最小权限架构 原则。在头脑风暴实际案例时,还有什么比使用 Kiro 更合适的呢?
什么是 Kiro?
Kiro 是由 AWS 开发的 AI 助手,帮助你在构建云架构时进行推理。它不仅仅是让你编写代码并期望成功,Kiro 会与你并肩工作,解释 你在做什么、为什么这么做,以及是否符合最佳实践指南。
你可以向 Kiro 提问以下内容:
- IAM 策略
- CloudFormation 模板
- 安全决策
- 架构权衡
Kiro 会给出解释、建议和改进——可以把它看作是一个了解 AWS 的伙伴,帮助你更快前进,同时避免常见错误。
为什么选择这个示例?
对于初学者来说,练习最常用的 AWS 服务是很有帮助的:S3、IAM 和 EC2。
本练习的目标是构建一个 EC2 Node.js(Express)应用,实现以下功能:
- 读取 启动时存放在 S3 的配置文件。
- 写入 应用日志到特定的 S3 前缀。
- 使用 从一开始就由 AWS Kiro 辅助设计的 最小权限 IAM 角色。
高层架构
| 组件 | 描述 |
|---|---|
| EC2 实例 | 运行 Node.js + Express;使用 IAM 实例配置文件(Instance Profile) |
| IAM 角色 | 附加到 EC2 实例;仅授予 S3 所需的权限 |
| S3 存储桶 | config/app-config.json → 只读logs/ → 只写 |
| CloudFormation 堆栈 | 定义所有基础设施 |
设置
- 下载并安装 Kiro IDE – https://kiro.dev/downloads/
- 为你的操作系统安装 AWS CLI(示例使用 Windows) – https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
截图


Source:
使用 Kiro 生成 CloudFormation 模板
在安装好工具后,我为 Kiro(或你选择的任何 LLM)编写了第一个提示。与其从一个宽松的 IAM 角色开始,我让 Kiro 直接根据应用的安全需求生成 最小权限 CloudFormation 模板。
发送给 Kiro 的提示
You are helping me design infrastructure using AWS CloudFormation.
I am building an EC2‑based Node.js (Express) application with the following behavior:
- The application runs on a single EC2 instance.
- It reads a configuration file from Amazon S3 at startup:
• Bucket: one application‑specific bucket
• Object key: config/app-config.json
- It writes application logs to the same S3 bucket under:
• logs/
Security requirements:
- The EC2 instance must use an IAM role (no static credentials)
- IAM permissions must follow the principle of least privilege
- Do NOT use wildcard actions (e.g., s3:*)
- Do NOT use wildcard resources (*)
- Grant only the exact permissions required for the described behavior
Infrastructure requirements:
- Use AWS CloudFormation (YAML)
- Define:
• An S3 bucket for application data
• An IAM role and instance profile for EC2
• An IAM policy attached to the role with least‑privilege S3 access
• An EC2 instance
- The template should be clear, readable, and suitable for a security‑focused article
Please:
- Explain the purpose of each IAM permission you include
- Comment on why broader permissions are not required
- Avoid adding any unnecessary AWS services or permissions
Kiro 的输出
Kiro 返回了一整套文件,包括:
| 文件 | 描述 |
|---|---|
stack.yaml | CloudFormation 模板 |
DEPLOYMENT.md | 部署该堆栈的文档 |
截图

图 1 – 生成的 CloudFormation 文件。

图 2 – 生成的文件列表。
关键要点
- 最小权限 IAM – 仅授予
s3:GetObject权限用于config/app-config.json,以及s3:PutObject权限用于logs/*。未使用通配符。 - Kiro 作为副驾驶 – 它帮助您将安全需求转化为精确的 CloudFormation 资源,节省时间并降低人为错误。
- 基础设施即代码 – 所有资源(S3 存储桶、IAM 角色、实例配置文件、EC2 实例)均在单个受版本控制的模板中定义,使堆栈可复现且可审计。
后续步骤
-
检查生成的
stack.yaml– 根据你的环境调整参数(例如实例类型、AMI)。 -
使用 AWS CLI 部署堆栈
aws cloudformation deploy \ --template-file stack.yaml \ --stack-name least-privilege-kiro-demo \ --capabilities CAPABILITY_NAMED_IAM -
验证部署
- SSH 登录到 EC2 实例。
- 克隆你的 Node.js 应用程序。
- 确认它能够读取配置文件并将日志写入 S3。
-
迭代并扩展 – 在保持 最小权限 原则的前提下,添加更多资源(例如 VPC、安全组)。
祝构建顺利! 🚀
最小特权 S3 访问策略
Kiro 创建了最严格的策略,允许 EC2 实例:
- 读取 配置文件
arn:aws:s3:::${ApplicationBucket}/config/app-config.json - 写入
logs/前缀下的日志文件
arn:aws:s3:::${ApplicationBucket}/logs/* - 列出
logs/前缀下的对象
arn:aws:s3:::${ApplicationBucket}/logs/*

IAM 角色和实例配置文件
Kiro 创建了一个名为 NodeJsAppRole 的 IAM 角色。
- 假设策略: 仅 EC2 实例可以承担此角色。
- 关联: 该角色链接到一个 实例配置文件,使 EC2 实例能够使用角色授予的权限。

此设置为堆栈强制实施最小权限架构。
来自我使用 Kiro 的重要经验
| # | 备注 |
|---|---|
| 1 | Kiro 能快速编写大量代码。请耐心阅读生成的文本——值得! |
| 2 | 会创建一个带有占位符的 DEPLOYMENT.md 文件。运行部署命令前请定位并替换这些占位符。 |
| 3 | Kiro 可能不知道正确的 AMI ID。部署前请为你的区域找到合适的 EC2 镜像 ID。 |
| 4 | 当 Kiro 进行故障排查时,它会建议许多命令。在执行之前先阅读每个命令。 |
| 5 | 如果 Kiro 卡住,它会询问是否停止当前迭代并请求更多信息。 |
| 6 | 请随时登录 AWS 控制台,收集日志并与 Kiro 分享——上下文越多,帮助越好。 |
部署成功
在 Kiro 的帮助下调试并修复代码后,堆栈终于创建成功! 🎉

您可以在上面的截图中看到新创建的 CloudFormation 资源。
测试部署
-
运行健康检查
curl http://<EC2_PUBLIC_IP>:3000/health将
<EC2_PUBLIC_IP>替换为 EC2 实例的公网 IP 地址。
响应应为 JSON 负载:{"status":"healthy"}
-
验证 S3 中的日志文件
EC2 实例使用附加的 IAM 角色向 S3 存储桶写入日志条目。
您应该在logs/前缀下看到一个新对象,名称类似于app-2023-09-15.log。
-
检查日志内容
下载日志文件以查看健康检查的时间戳:

该文件确认 EC2 实例成功执行了健康检查并记录了结果。
摘要
- 最小化的 S3 策略 只授予 EC2 实例其真正需要的权限。
- IAM 角色 (
NodeJsAppRole) 限制为 EC2 的 assume‑action,以确保实例安全。 - 按照部署步骤并测试健康端点即可验证整个堆栈。
如有需要,可自由复用此模式,以满足其他需要严格最小权限访问的服务!
Architecture Overview

Figure 1 – High‑level architecture of the EC2 ↔ S3 interaction.
正如您在整个过程中看到的,Kiro 可以通过一个简单的 EC2 实例启动一个新堆栈,该实例与 S3 交互,同时以用户友好的方式强制执行 least‑privilege architectures。
成本说明
注意: 此实验仅消耗了 11.22 积分,在新 Kiro 用户获得的 500 奖励积分 中。
Kiro 仪表板

图 2 – Kiro 仪表板显示已部署的资源。
结束语
希望这篇文章有趣且有用,并能激发你在我们新朋友 Kiro 的帮助下构建自己的项目或技术栈!🤓
感谢阅读,敬请期待后续文章 📚
再见! 👋
