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

ex-*_*erd 6 amazon-web-services amazon-rds amazon-iam

我正在编写一个脚本,每天自动获取一个RDS快照,并根据适当的模式为其命名(例如mydb-snapshot-20141031).脚本本身非常简单,但是我遇到了试图锁定问题的问题,这样如果与脚本关联的密钥对遭到破坏,攻击者只会损坏我的快照,而不会损坏数据库本身.

搜索网络并查看RDS IAM政策指南并没有太多帮助我(至少不是我能够复制)所以我​​希望有人在此之前解决了这个问题(或者可以理解该手册)比我更好.这就是我想要的:

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

这是我想要防范的:

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

也许这不可能完成(我找不到rds的"删除"伴随文档:CreateDBSnapshot策略).如果DeleteDBSnapshot文档实际包含使用它所需的权限列表,那将是很好的.

ex-*_*erd 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": "*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

一些注意事项/警告:

  • 对于与快照相关的大多数命令,Resource策略的属性是检查DBSnapshotIdentifier,但是CreateDBSnapshot 它似乎引用DBInstanceIdentifier(RDS数据库名称).
  • DescribeDBSnapshots始终在全球范围内运营,因此必须在所有资源价值上授予它.你甚至不能按地区限制这个.
  • ListTagsForResource 如果您尝试将其限制为完整快照资源路径,则会引发权限错误.
  • 你不需要它,但我Condition为那些希望通过标签进一步(或交替)限制的人提供了一个示例块.至于限制由 Resource,ListTagsForResource并且CreateDBSnapshot不,如果你试图把它们限制在特定标签的工作.

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