最常见的安全错误是“给 Admin 就行”。

发布: (2025年12月23日 GMT+8 05:28)
4 min read
原文: Dev.to

Source: Dev.to

Cover image for El error de seguridad más común es “Dale Admin y Ya”

当我们在压力之下时,几乎总是选择最快的解决方案。出现故障、有人需要访问、交付临近。于是我们会做常规的事:先给宽泛的权限“暂时”。
问题在于,这种临时的权限往往会一直保留下去。

最小权限并不是偏执,而是一种原则。只授予必要的权限,让错误的影响保持在最小范围,安全性也更可预测。

什么是真正的最小权限

最小权限意味着:

  • 只允许必要的操作
  • 只针对必要的资源
  • 只在需要时授予
  • 只针对正确的身份

一个好的策略应回答:

  • 这个系统需要做什么
  • 会在什么资源上执行
  • 哪些操作它永远不应该有权执行

IAM 不仅是安全,还是稳定性。拥有过多权限的角色会更快导致更多问题。

为什么在大规模下很重要

在小环境中,宽泛的权限可能不会立刻被滥用。但在大环境中,迟早会出现问题。

最小权限可以帮助你防止:

  • 若凭证泄露导致的大规模影响
  • 生产环境中的意外删除
  • 没有人记得的旧角色
  • 难以解释的审计记录

此外,它还能帮助排查问题。如果出现故障,我们知道访问限制是真实的。

我们常见的失误

最常见的模式有:

  • 使用 *:* 通配符
  • 复制策略后未清理
  • 为所有需求使用同一个角色
  • 永久保留的临时权限
  • 未将部署权限与运行时权限分离

这些问题连优秀的团队也会遇到。解决办法是采用明确的模式。

示例:错误策略 vs 正确策略

示例 1:S3 访问

❌ 错误策略(过于宽泛)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}

✅ 正确策略(受限且实用)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ListBucketInPrefix",
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": "arn:aws:s3:::my-app-data",
      "Condition": {
        "StringLike": {
          "s3:prefix": ["public/*"]
        }
      }
    },
    {
      "Sid": "ReadObjectsInPrefix",
      "Effect": "Allow",
      "Action": ["s3:GetObject"],
      "Resource": "arn:aws:s3:::my-app-data/public/*"
    }
  ]
}

设计良好 IAM 的简易流程

  • 将角色进行拆分
  • 从最小权限开始,必要时再扩展
  • 使用 SCP 和 permission boundaries 作为护栏
  • 定期审查并清理权限

小项目:使用 Terraform 为 Lambda + S3 创建最小权限角色

目标

创建:

  • 一个 S3 bucket
  • 一个 Lambda 执行角色
  • 一条最小权限策略
  • 将策略附加到角色

Lambda 将能够:

  • 仅从 public/ 读取
  • 仅向 results/ 写入
  • 将日志写入 CloudWatch
Back to Blog

相关文章

阅读更多 »

AI工程:AI的降临与鹅 第12天

第12天:节日吉祥物危机 什么是MCP?MCP Multi‑Agent Consensus Protocol 采样使得扩展能够编排多个 AI 角色,每个角色都有……