amazon-web-services - 用于 RDS 快照管理的 AWS/IAM 策略?

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

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

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

  • 为名为“mydb”的数据库实例制作快照的权限
  • 写入与 mydb-snapshot-* 匹配的快照的权限
  • 删除与 mydb-snapshot-* 匹配的快照的权限

  • 这是我要防止的:
  • 我不希望此用户能够与 RDS 之外的 AWS 的任何部分进行交互
  • 我不希望此用户能够实际更改我的任何 RDS 实例,包括“mydb”
  • 我不希望这个用户能够改变做 的快照不是 匹配 mydb-snapshot-*

  • 也许这无法完成(我找不到 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 , ListTagsForResourceCreateDBSnapshot如果你不工作
    尝试将它们限制为特定标签。

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

    关于amazon-web-services - 用于 RDS 快照管理的 AWS/IAM 策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26696365/

    相关文章:

    python - 如何使用 Python 字典按标签名称对 AWS 实例进行分组?

    amazon-web-services - Amazon RDS 停止实例

    amazon-web-services - "Invalid Principal"尝试使用角色允许从 us-gov-west-1 帐户访问商业帐户时

    amazon-web-services - 给定用户的身份id,如何从cognito 用户池中获取用户的详细信息?

    Java:无权执行 sts:AssumeRoleWithWebIdentity 认知用户池

    amazon-web-services - AWS APIGateway Lambda代理集成-由于配置错误: Invalid permissions on Lambda function,执行失败

    c - 与 Node 和 Node-gyp 一起使用的 AWS Lambda 上出现奇怪的 "memory"行为

    javascript - TypeError : headers[key]. trim 不是函数

    python - 根据状态 :Available using Python? 过滤或查询 AWS RDS DBInstances 的正确方法是什么

    python - 高效地将 s3 文件处理到 Postgres 中