当我创建自定义角色并以这种方式编辑策略文档时,我是否只授予 aws lambda 代码的只读 RDS 数据库权限?

Do I give only the read-only RDS database permission for an aws lambda code, when I create custom role and edit the policy document this way?

我想创建一个 aws lambda 代码,它提供 public API 仅用于从 aws rds 数据库实例读取。当我想创建一个 lambda 函数时,它会询问我有关权限角色的信息。因为我害怕,所以我想对代码给予非常严格的权限,只允许从数据库实例中读取。

我找到了 this 网站,它列出了一些托管政策。我可以在里面找到这个:

"AmazonRDSReadOnlyAccess": {
    "Arn": "arn:aws:iam::aws:policy/AmazonRDSReadOnlyAccess",
    "AttachmentCount": 0,
    "CreateDate": "2015-02-06T18:40:53+00:00",
    "DefaultVersionId": "v1",
    "Document": {
        "Statement": [
            {
                "Action": [
                    "rds:Describe*",
                    "rds:ListTagsForResource",
                    "ec2:DescribeAccountAttributes",
                    "ec2:DescribeAvailabilityZones",
                    "ec2:DescribeSecurityGroups",
                    "ec2:DescribeVpcs"
                ],
                "Effect": "Allow",
                "Resource": "*"
            },
            {
                "Action": [
                    "cloudwatch:GetMetricStatistics"
                ],
                "Effect": "Allow",
                "Resource": "*"
            }
        ],
        "Version": "2012-10-17"
    },
    "IsAttachable": true,
    "IsDefaultVersion": true,
    "Path": "/",
    "PolicyId": "ANPAJKTTTYV2IIHKLZ346",
    "PolicyName": "AmazonRDSReadOnlyAccess",
    "UpdateDate": "2015-02-06T18:40:53+00:00",
    "VersionId": "v1"
},

当我想创建新的自定义角色时,我可以看到默认策略文档。我可以看到基本上包含 {"Statement"、"Version" 和 "Resource"}:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:*:*:*"
    }
  ]
}

这非常适合 AmazonRDSReadOnlyAccess 的 "Document" 块,所以我认为需要将其复制粘贴到那里以获得 rds 只读权限。所以我需要放入自定义角色的策略文档中的是:

{
    "Statement": [
        {
            "Action": [
                "rds:Describe*",
                "rds:ListTagsForResource",
                "ec2:DescribeAccountAttributes",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeVpcs"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "cloudwatch:GetMetricStatistics"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ],
    "Version": "2012-10-17"
}

这是我需要做的事情?我对吗? 它是否允许我让 lambda 函数只从某个 RDS 数据库实例读取?有没有更简单的方法来做到这一点? 因为我在 "create new role from template" 中看到了策略模板,但找不到与此目标相关的任何内容。

IAM 政策,就像您在上面显示的那样,是 grant/deny 仅对 RDS 服务的 管理 的访问权限。这并不授予您访问数据的授权。您可以考虑以下安全方法来保护数据库再次未经授权的访问。

  1. 保护 Lambda 执行角色 - 赋予 lambda 服务最低权限角色以访问 RDS 管理服务。

  2. 保护 RDS 登录用户 - 创建一个专用于此功能的用户,并授予其访问数据库和执行所需功能所需的最低权限

  3. 通过 API 保护 Lambda。您可以使用 AWS API 网关公开 Lambda 函数。这 API 可以进一步防止未经授权的访问。这是可选的。