用户对 Amazon RDS 数据库实例执行创建、删除、修改、备份和恢复操作需要哪些最低权限?

3 分钟阅读
0

我想向我的 AWS Identity and Access Management (IAM) 用户授予管理 Amazon Relational Database Service (Amazon RDS) 数据库实例所需的最低权限。

解决方案

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

要配置 IAM 用户对您的 RDS 数据库实例的访问权限,请完成以下步骤:

  1. 打开 IAM 控制台
  2. 在导航窗格中,选择 Users(用户)。
  3. 选择 Add user(添加用户),然后输入用户名
  4. 对于 Access type(访问类型),选择 AWS Management Console access(AWS 管理控制台访问),然后创建一个密码以使用 Amazon RDS 控制台。要提供对 AWS CLI 的访问权限,请选择 Programmatic access(编程访问)。
    **重要事项:**对于 Programmatic access(编程访问),请选择 Download.csv 以下载访问密钥 ID 和秘密访问密钥。稍后您将需要这些密钥来创建安全令牌。
  5. 查看权限和标签,然后选择 Create user(创建用户)。
    **注意:**这将创建一个具有 IAMUserChangePassword 策略的 IAM 用户。
  6. 针对要在 Amazon RDS 中执行的所需操作创建 IAM 策略
  7. 将 IAM 策略添加到您的用户

IAM 策略示例

以下示例策略提供执行指定操作所需的最低权限。您可能会在 Amazon RDS 控制台中看到错误,原因是策略中不存在所需的权限。例如,您可能会看到 IAMUser is not authorized to perform: rds:Action(IAMUser 无权执行 rds:Action)错误消息。

Describe(描述)操作可能会出现错误,但该错误不会影响您执行这些操作的能力。为避免出现错误,请修改以下示例 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": "*"
    }
  ]
}

**注意:**要使用客户自主管理型密钥进行加密,您必须授权使用客户自主管理型密钥

要允许用户删除 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": "*"
    }
  ]
}

激活增强监控和性能详情

当使用 iam:PassRole 时,通配符 (*) 过于宽松,因为它允许对所有资源具有 iam:PassRole 权限。最佳做法是指定 ARN。

要允许用户激活增强监控,请使用以下策略:

{  
  "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"
    }
  ]
}

**注意:**确保将 AccountID 替换为每个接收增强监控角色的用户。

要允许用户激活性能详情,请使用以下策略:

{  
  "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",
        "cloudwatch:ListMetrics"
      ],
      "Resource": "*"
    }
  ]
}

相关信息

Amazon RDS 的 Identity and Access Management

如何允许用户通过其 Amazon IAM 凭证向 Amazon RDS for MySQL 数据库实例进行身份验证?