使用 Kiro Assistance 构建最小权限架构

发布: (2026年1月2日 GMT+8 07:59)
10 min read
原文: Dev.to

Source: Dev.to

请提供您希望翻译的完整文本内容(除代码块、URL 之外),我将为您翻译成简体中文并保留原有的 Markdown 格式。

作者

Angel

Source:

介绍

我在想是否可以用 AWS 创建一个简单的示例,演示 最小权限架构 原则。在头脑风暴实际案例时,还有什么比使用 Kiro 更合适的呢?

什么是 Kiro?

Kiro 是由 AWS 开发的 AI 助手,帮助你在构建云架构时进行推理。它不仅仅是让你编写代码并期望成功,Kiro 会与你并肩工作,解释 你在做什么为什么这么做,以及是否符合最佳实践指南。

你可以向 Kiro 提问以下内容:

  • IAM 策略
  • CloudFormation 模板
  • 安全决策
  • 架构权衡

Kiro 会给出解释、建议和改进——可以把它看作是一个了解 AWS 的伙伴,帮助你更快前进,同时避免常见错误。

为什么选择这个示例?

对于初学者来说,练习最常用的 AWS 服务是很有帮助的:S3IAMEC2

本练习的目标是构建一个 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 堆栈定义所有基础设施

设置

  1. 下载并安装 Kiro IDEhttps://kiro.dev/downloads/
  2. 为你的操作系统安装 AWS CLI(示例使用 Windows) – https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

截图

Kiro IDE 安装界面

AWS CLI 安装界面

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.yamlCloudFormation 模板
DEPLOYMENT.md部署该堆栈的文档

截图

Generated CloudFormation files
图 1 – 生成的 CloudFormation 文件。

Resulting file list
图 2 – 生成的文件列表。

关键要点

  • 最小权限 IAM – 仅授予 s3:GetObject 权限用于 config/app-config.json,以及 s3:PutObject 权限用于 logs/*。未使用通配符。
  • Kiro 作为副驾驶 – 它帮助您将安全需求转化为精确的 CloudFormation 资源,节省时间并降低人为错误。
  • 基础设施即代码 – 所有资源(S3 存储桶、IAM 角色、实例配置文件、EC2 实例)均在单个受版本控制的模板中定义,使堆栈可复现且可审计。

后续步骤

  1. 检查生成的 stack.yaml – 根据你的环境调整参数(例如实例类型、AMI)。

  2. 使用 AWS CLI 部署堆栈

    aws cloudformation deploy \
        --template-file stack.yaml \
        --stack-name least-privilege-kiro-demo \
        --capabilities CAPABILITY_NAMED_IAM
  3. 验证部署

    • SSH 登录到 EC2 实例。
    • 克隆你的 Node.js 应用程序。
    • 确认它能够读取配置文件并将日志写入 S3。
  4. 迭代并扩展 – 在保持 最小权限 原则的前提下,添加更多资源(例如 VPC、安全组)。

祝构建顺利! 🚀

最小特权 S3 访问策略

Kiro 创建了最严格的策略,允许 EC2 实例:

  • 读取 配置文件
    arn:aws:s3:::${ApplicationBucket}/config/app-config.json
  • 写入 logs/ 前缀下的日志文件
    arn:aws:s3:::${ApplicationBucket}/logs/*
  • 列出 logs/ 前缀下的对象
    arn:aws:s3:::${ApplicationBucket}/logs/*

Policy diagram

IAM 角色和实例配置文件

Kiro 创建了一个名为 NodeJsAppRoleIAM 角色

  • 假设策略: 仅 EC2 实例可以承担此角色。
  • 关联: 该角色链接到一个 实例配置文件,使 EC2 实例能够使用角色授予的权限。

IAM 角色示意图

此设置为堆栈强制实施最小权限架构

来自我使用 Kiro 的重要经验

#备注
1Kiro 能快速编写大量代码。请耐心阅读生成的文本——值得!
2会创建一个带有占位符的 DEPLOYMENT.md 文件。运行部署命令前请定位并替换这些占位符。
3Kiro 可能不知道正确的 AMI ID。部署前请为你的区域找到合适的 EC2 镜像 ID。
4当 Kiro 进行故障排查时,它会建议许多命令。在执行之前先阅读每个命令
5如果 Kiro 卡住,它会询问是否停止当前迭代并请求更多信息。
6请随时登录 AWS 控制台,收集日志并与 Kiro 分享——上下文越多,帮助越好。

部署成功

在 Kiro 的帮助下调试并修复代码后,堆栈终于创建成功! 🎉

CloudFormation resources created

您可以在上面的截图中看到新创建的 CloudFormation 资源。

测试部署

  1. 运行健康检查

    curl http://<EC2_PUBLIC_IP>:3000/health

    <EC2_PUBLIC_IP> 替换为 EC2 实例的公网 IP 地址。
    响应应为 JSON 负载:

    {"status":"healthy"}

    Health‑check response

  2. 验证 S3 中的日志文件

    EC2 实例使用附加的 IAM 角色向 S3 存储桶写入日志条目。
    您应该在 logs/ 前缀下看到一个新对象,名称类似于 app-2023-09-15.log

    Log file created

  3. 检查日志内容

    下载日志文件以查看健康检查的时间戳:

    Log file content

    该文件确认 EC2 实例成功执行了健康检查并记录了结果。

摘要

  • 最小化的 S3 策略 只授予 EC2 实例其真正需要的权限。
  • IAM 角色 (NodeJsAppRole) 限制为 EC2 的 assume‑action,以确保实例安全。
  • 按照部署步骤并测试健康端点即可验证整个堆栈。

如有需要,可自由复用此模式,以满足其他需要严格最小权限访问的服务!

Architecture Overview

Architecture diagram
Figure 1 – High‑level architecture of the EC2 ↔ S3 interaction.

正如您在整个过程中看到的,Kiro 可以通过一个简单的 EC2 实例启动一个新堆栈,该实例与 S3 交互,同时以用户友好的方式强制执行 least‑privilege architectures

成本说明

注意: 此实验仅消耗了 11.22 积分,在新 Kiro 用户获得的 500 奖励积分 中。

Kiro 仪表板

Kiro dashboard
图 2 – Kiro 仪表板显示已部署的资源。

结束语

希望这篇文章有趣且有用,并能激发你在我们新朋友 Kiro 的帮助下构建自己的项目或技术栈!🤓

感谢阅读,敬请期待后续文章 📚

再见! 👋

Back to Blog

相关文章

阅读更多 »

Google Cloud:资源层级

TL;DR - Google Cloud 采用四层层级结构:组织 → 文件夹 → 项目 → 资源。- 策略是继承的:已设置的规则……