我想创建一个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数据库实例?有更简单的方法吗? 因为我在“从模板创建新角色”中看到了策略模板,但我找不到任何有关此目标的内容。
答案 0 :(得分:0)
IAM策略(如上所示)仅对RDS服务的管理授予/拒绝访问权限。这并不授予您访问数据的权限。您可以考虑使用以下安全方法来再次保护数据库的未授权访问。
保护Lambda执行角色 - 为lambda服务提供访问RDS管理服务的最低权限角色。
保护RDS登录用户 - 创建专用于此功能的用户,并授予其访问数据库所需的最少权限并执行所需的功能
通过API保护Lambda。您可以使用AWS API网关公开Lambda函数。此API可进一步防止未经授权的访问。这是可选的。