Amazon RDS - 数据库访问控制


要访问 Amazon RDS 数据库实例,用户需要特定权限。这是使用 AWS IAM(身份和访问管理)进行配置的。在本教程中,我们将了解如何完成此配置。

配置涉及两部分。

  • 验证

  • 访问控制

验证

它涉及创建用户名、密码并为用户生成访问密钥。借助访问密钥,可以以编程方式访问 AWS RDS 服务。SDK 和 CLI 工具使用访问密钥通过请求以加密方式登录。

我们还可以使用 IAM 角色来对用户进行身份验证。但该角色并不附属于任何特定用户,而是任何用户都可以临时承担该角色并完成所需的任务。任务结束后,角色可以被撤销,用户失去认证能力。

访问控制

用户通过身份验证后,附加到该用户的策略将确定该用户可以执行的任务类型。以下是允许在数据库引擎 MySQL 的 t2.micro 实例上创建 RDS 数据库实例的策略示例。

{
    "Version": "2018-09-11",
    "Statement": [
        {
            "Sid": "AllowCreateDBInstanceOnly",
            "Effect": "Allow",
            "Action": [
                "rds:CreateDBInstance"
            ],
            "Resource": [
                "arn:aws:rds:*:123456789012:db:test*",
                "arn:aws:rds:*:123456789012:og:default*",
                "arn:aws:rds:*:123456789012:pg:default*",
                "arn:aws:rds:*:123456789012:subgrp:default"
            ],
            "Condition": {
                "StringEquals": {
                    "rds:DatabaseEngine": "mysql",
                    "rds:DatabaseClass": "db.t2.micro"
                }
            }
        }
    ]
}

对任何 RDS 资源执行的操作

在下面的示例中,我们看到一个允许对任何 RDS 资源执行任何描述操作的策略。* 符号用于表示任何资源。

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

禁止删除数据库实例

以下策略禁止用户删除特定数据库实例。

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Sid":"DenyDelete1",
         "Effect":"Deny",
         "Action":"rds:DeleteDBInstance",
         "Resource":"arn:aws:rds:us-west-2:123456789012:db:my-mysql-instance"
      }
   ]
}