我正在处理一个脚本,以便每天自动获取RDS快照,并根据适当的模式为其命名(例如mydb-snapshot-20141031)。脚本本身非常简单,但我遇到了一些问题,试图将事情锁定,以便在与脚本关联的密钥对遭到破坏时,攻击者只能破坏我的快照而不是数据库本身。
在网上搜索并查看RDS IAM policy guide并没有太多帮助我(至少不是我能够复制)所以我希望有人来这里之前已经解决了这个问题(或者能够比我更好地理解这本手册)。这就是我想要的:
这是我试图保护的内容:
也许这无法完成(我无法找到"删除" rds:CreateDBSnapshot 政策的配套文件)。如果DeleteDBSnapshot documentation实际上包含了使用它所需的权限列表,那就太好了。
答案 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
块
谁希望进一步(或交替)限制标签。与限制一样
如果你,Resource
,ListTagsForResource
和CreateDBSnapshot
不起作用
尝试将它们限制为特定标签。这解决了我主要担心的是,如果附加到此策略的密钥被泄露,则限制损坏 - 攻击者只能删除我的滚动快照,而不能删除任何手动创建的快照或数据库实例本身。不幸的是,它仍然允许在特定区域中创建无限数量的快照,但似乎没有任何方式来限制CreateDBSnapshot
。