用户执行 Amazon RDS 数据库实例的创建、删除、修改、备份和还原需要哪些最低权限?

上次更新日期:2022 年 9 月 21 日

我想要限制我为 AWS Identity and Access Management(IAM)用户授予的 Amazon Relational Database Service(Amazon RDS)数据库实例访问权。如何授予 IAM 用户执行 Amazon RDS 数据库实例的特定操作所需的最低权限?

解决方法

注意:如果您在运行 AWS 命令行界面(AWS CLI)命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

1.    打开 IAM 控制台,然后从导航窗格中选择 Users(用户)。

2.    选择 Add user(添加用户),然后输入用户名

3.    对于 Access type(访问类型),请选择 AWS Management Console access(AWS 管理控制台访问权),然后创建使用 Amazon RDS 控制台的密码。要提供对 AWS 命令行界面(AWS CLI)的访问权,请选择 Programmatic access(编程访问)。

重要提示:对于 Programmatic access(编程访问),请务必通过选择 Download.csv 来下载访问密钥 ID 和秘密访问密钥。您需要密钥稍后创建安全令牌。

4.    查看权限和标签,然后选择 Create user(创建用户)。将创建一个具有 IAMUserChangePassword 策略的 IAM 用户。

5.    为您希望在 Amazon RDS 中执行的操作创建 IAM 策略

6.    返回 IAM 控制台,然后从导航窗格中选择 Users(用户)。

7.    选择您创建的 IAM 用户。

8.    从权限选项卡中,选择添加内联策略

9.    选择 JSON 选项卡,然后基于您的使用案例输入以下一项或多项策略。

注意:以下策略提供执行指定操作所需的最低权限。由于此权限不存在于策略中,您可能会在 Amazon RDS 控制台中看到错误(如 IAMUser 未被授权执行:rds:Action)。此错误通常会发生在“描述”操作上。此错误可预料,它不会影响您执行操作的能力。要避免此错误,您可以修改以下示例 IAM 策略,或者可以通过使用 AWS CLI 来执行操作。

创建和删除 RDS 数据库实例

以下策略允许用户在不激活加密的情况下创建 RDS 数据库实例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeVpcAttribute",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeInternetGateways",
        "ec2:DescribeAvailabilityZones",
        "ec2:DescribeVpcs",
        "ec2:DescribeAccountAttributes",
        "ec2:DescribeSubnets",
        "rds:Describe*",
        "rds:ListTagsForResource",
        "rds:CreateDBInstance",
        "rds:CreateDBSubnetGroup"
      ],
      "Resource": "*"
    }
  ]
}

以下策略允许用户在激活加密的情况下创建 RDS 数据库实例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeVpcAttribute",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeInternetGateways",
        "ec2:DescribeAvailabilityZones",
        "ec2:DescribeVpcs",
        "ec2:DescribeAccountAttributes",
        "ec2:DescribeSubnets",
        "rds:Describe*",
        "rds:ListTagsForResource",
        "rds:CreateDBInstance",
        "rds:CreateDBSubnetGroup",
        "kms:ListAliases"
      ],
      "Resource": "*"
    }
  ]
}

注意:要使用客户管理的密钥而不是默认的 AWS 托管式密钥进行加密,您必须授权使用客户管理的密钥

以下策略允许用户删除 RDS 数据库实例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "rds:DeleteDBInstance",
        "rds:DescribeDBInstances"
      ],
      "Resource": "*"
    }
  ]
}

以下策略允许用户创建和删除 RDS 数据库实例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeVpcAttribute",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeInternetGateways",
        "ec2:DescribeAvailabilityZones",
        "ec2:DescribeVpcs",
        "ec2:DescribeAccountAttributes",
        "ec2:DescribeSubnets",
        "rds:Describe*",
        "rds:ListTagsForResource",
        "rds:CreateDBInstance",
        "rds:CreateDBSubnetGroup",
        "rds:DeleteDBInstance"
      ],
      "Resource": "*"
    }
  ]
}

停止和启动 RDS 数据库实例

以下策略允许用户停止和启动 RDS 数据库实例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "rds:StopDBInstance",
        "rds:StartDBInstance",
        "rds:Describe*"
      ],
      "Resource": "*"
    }
  ]
}

执行备份和恢复(创建数据库快照、从数据库快照恢复数据库实例和时间点恢复)

以下策略允许用户创建数据库快照:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "rds:Describe*",
        "rds:CreateDBSnapshot"
      ],
      "Resource": "*"
    }
  ]
}

以下策略允许用户使用数据库快照恢复 RDS 数据库实例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "rds:Describe*",
        "rds:RestoreDBInstanceFromDBSnapshot"
      ],
      "Resource": "*"
    }
  ]
}

以下策略允许用户执行时间点恢复:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "rds:Describe*",
        "rds:RestoreDBInstanceToPointInTime"
      ],
      "Resource": "*"
    }
  ]
}

修改 RDS 数据库实例

以下策略允许用户更改数据库实例类的类型、分配的存储、存储类型和存储版本:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "rds:Describe*",
        "rds:ModifyDBInstance"
      ],
      "Resource": "*"
    }
  ]
}

激活增强监控和性能详情

以下策略允许用户激活增强监控。请务必将 AccountID 替换为每个接收增强监控角色的账户:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:GetRole",
        "iam:ListRoles",
        "rds:ModifyDBInstance",
        "rds:Describe*",
        "ec2:Describe*"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AccountID:role/rds-monitoring-role"
    }
  ]
}

注意:当与 iam:PassRole 一起使用时,通配符(*)过于宽松,因为它允许对所有资源具有 iam:PassRole 权限。因此,最佳做法是指定 Amazon 资源名称(ARN),如前面的示例所示。

以下策略允许用户激活性能详情:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "rds:ModifyDBInstance",
        "ec2:Describe*",
        "rds:Describe*",
        "pi:*"
      ],
      "Resource": "*"
    }
  ]
}

创建、修改和删除数据库参数组和数据库选项组

以下策略允许用户创建、修改或删除数据库参数组和选项组:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "rds:Describe*",
        "rds:CreateDBParameterGroup",
        "rds:ModifyDBParameterGroup",
        "rds:DeleteDBParameterGroup",
        "rds:CreateOptionGroup",
        "rds:ModifyOptionGroup",
        "rds:DeleteOptionGroup"
      ],
      "Resource": "*"
    }
  ]
}

从 Amazon RDS 控制台查看 Amazon CloudWatch 指标

以下策略允许用户从 Amazon RDS 控制台查看 CloudWatch 指标:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "rds:Describe*",
        "cloudwatch:GetMetricData",
        "cloudwatch:GetMetricStatistics"
      ],
      "Resource": "*"
    }
  ]
}

10.    选择查看策略

11.    为策略输入名称,然后选择 Create policy(创建策略)。