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

时间:2018-01-02 15:50:15

标签: amazon-web-services aws-lambda amazon-rds

我想创建一个aws lambda代码,该代码提供一个公共API,仅用于从aws rds db实例读取。当我想创建一个lambda函数时,它会询问我关于权限角色的问题。因为我害怕,我想对代码给予非常严格的许可,只允许从db实例读取。

我找到了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的“文档”块,因此我认为需要将其复制粘贴到那里以获得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数据库实例?有更简单的方法吗? 因为我在“从模板创建新角色”中看到了策略模板,但我找不到任何有关此目标的内容。

1 个答案:

答案 0 :(得分:0)

IAM策略(如上所示)仅对RDS服务的管理授予/拒绝访问权限。这并不授予您访问数据的权限。您可以考虑使用以下安全方法来再次保护数据库的未授权访问。

  1. 保护Lambda执行角色 - 为lambda服务提供访问RDS管理服务的最低权限角色。

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

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