用于RDS快照管理的AWS / IAM策略?

时间:2014-11-02 05:30:09

标签: amazon-web-services amazon-rds amazon-iam

我正在处理一个脚本,以便每天自动获取RDS快照,并根据适当的模式为其命名(例如mydb-snapshot-20141031)。脚本本身非常简单,但我遇到了一些问题,试图将事情锁定,以便在与脚本关联的密钥对遭到破坏时,攻击者只能破坏我的快照而不是数据库本身。

在网上搜索并查看RDS IAM policy guide并没有太多帮助我(至少不是我能够复制)所以我​​希望有人来这里之前已经解决了这个问题(或者能够比我更好地理解这本手册)。这就是我想要的:

  • 创建名为" mydb"
  • 的数据库实例的快照的权限
  • 写入与 mydb-snapshot - *
  • 匹配的快照的权限
  • 删除与 mydb-snapshot - *
  • 匹配的快照的权限

这是我试图保护的内容:

  • 我不希望此用户能够与RDS之外的AWS的任何部分进行交互
  • 我不希望此用户能够实际更改我的任何RDS实例,包括" mydb"
  • 我不希望此用户能够更改匹配 mydb-snapshot - *
  • 的快照

也许这无法完成(我无法找到"删除" rds:CreateDBSnapshot 政策的配套文件)。如果DeleteDBSnapshot documentation实际上包含了使用它所需的权限列表,那就太好了。

1 个答案:

答案 0 :(得分:5)

我最终找到了DeleteDBSnapshot权限,但后来意识到我真正想要做的是将操作限制在特定的数据库实例标识符上,由于AWS命令的实际工作方式,我现在确信这是不可能的。因此,您必须创建一个如下所示的策略:

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "rds:AddTagsToResource",
        "rds:DeleteDBSnapshot"
      ],
      "Condition": {
        "streq": {
          "rds:snapshot-tag/MY_TAG_KEY": [
            "MY_TAG_VALUE"
          ]
        }
      },
      "Resource": "arn:aws:rds:us-west-2::snapshot:mydb-snapshot-*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "rds:ListTagsForResource",
        "rds:CreateDBSnapshot"
      ],
      "Resource": "arn:aws:rds:us-west-2:*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "rds:DescribeDBSnapshots"
      ],
      "Resource": "*"
    }
  ]
}

一些注意事项/注意事项:

  • 对于大多数与快照相关的命令,该属性的Resource属性 政策是对DBSnapshotIdentifier的检查,但针对CreateDBSnapshot 它似乎引用DBInstanceIdentifier(RDS数据库名称)。
  • DescribeDBSnapshots始终在全球范围内运营,因此也必须授予它 在所有资源价值上。你甚至不能按地区限制这一点。
  • 如果您尝试限制,则
  • ListTagsForResource会引发权限错误 到完整的快照资源路径。
  • 你不需要它,但我已经包含了一个示例Condition块 谁希望进一步(或交替)限制标签。与限制一样 如果你,ResourceListTagsForResourceCreateDBSnapshot不起作用 尝试将它们限制为特定标签。

这解决了我主要担心的是,如果附加到此策略的密钥被泄露,则限制损坏 - 攻击者只能删除我的滚动快照,而不能删除任何手动创建的快照或数据库实例本身。不幸的是,它仍然允许在特定区域中创建无限数量的快照,但似乎没有任何方式来限制CreateDBSnapshot