我正在编写一个脚本来每天自动拍摄 RDS 快照并根据适当的模式为其命名(例如 mydb-snapshot-20141031)。脚本本身非常简单,但我在尝试锁定事物时遇到了问题,这样如果与脚本关联的 key 对遭到破坏,攻击者只能损坏我的快照而不是数据库本身。
搜索网络并查看 RDS IAM policy guide没有出现太多帮助我(至少不是我能够重现)所以我希望这里有人之前已经解决了这个问题(或者可以比我更好地理解该手册)。这是我想要的:
这是我要防止的:
也许这无法完成(我找不到 rds:CreateDBSnapshot 策略的“删除”伴侣的文档)。如果 DeleteDBSnapshot documentation 就好了实际上包括使用它所需的权限列表。
最佳答案
我最终找到了 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
的属性(property)政策是针对
DBSnapshotIdentifier
的支票, 但对于 CreateDBSnapshot
它似乎是指 DBInstanceIdentifier
(RDS 数据库名称)。 DescribeDBSnapshots
始终在全局范围内运作,因此它也必须被授予在所有资源值上。你甚至不能按地区限制这一点。
ListTagsForResource
如果您尝试限制它,则会引发权限错误到完整的快照资源路径。
Condition
阻止那些希望通过标签进一步(或交替)限制的人。与限制一样
Resource
, ListTagsForResource
和 CreateDBSnapshot
如果你不工作尝试将它们限制为特定标签。
如果附加到此策略的 key 遭到破坏,这解决了我限制损害的主要问题——攻击者只能删除我的滚动快照,而不能删除任何手动创建的快照或数据库实例本身。不幸的是,它仍然允许在特定区域中创建无限数量的快照,但似乎没有任何方法可以限制
CreateDBSnapshot
.
关于amazon-web-services - 用于 RDS 快照管理的 AWS/IAM 策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26696365/