2014-11-02 101 views
5

我正在研究脚本,以便每天自动创建RDS快照并根据适当的模式为其命名(例如mydb-snapshot-20141031)。脚本本身非常简单,但我遇到了一些问题,试图锁定事情,以便如果与脚本相关的密钥对受到攻击,攻击者只能破坏我的快照而不是数据库本身。RDS快照管理的AWS/IAM策略?

搜索网页,看着RDS IAM policy guide没有多少帮助我(至少不是我已经能够重现),所以我希望有人在这里解决了这个(或可以理解的手动比我更好)。这是我想要的东西:

  • 权限,使名为“mydb的”数据库实例的快照
  • 权限写快照匹配MYDB-snapshot- *
  • 权限删除快照匹配MYDB快照 - *

这里就是我试图防止:

  • 我不希望此用户能够与RDS外部的AWS的任何部分交互
  • 我不希望此用户能够实际更改我的任何RDS实例,包括“mydb”
  • 我不希望此用户能够改变快照里面做比赛MYDB-snapshot- *

也许这不能做(我不能为找到文档“删除”同伴rds:CreateDBSnapshot policy)。如果DeleteDBSnapshot documentation实际上包含使用它所需的权限列表,那将会很好。

回答

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的方式。

+0

'DescribeDBSnapshots总是在全局运行,所以它也必须被授予所有资源值。你甚至不能按地区限制这个。“你是男人中的上帝。 – rodnaph 2016-08-12 13:03:59