我正在尝试按照本教程设置一个 lambda 函数以关闭/启动实例,并向 ec2 实例添加特殊标签。
管理员用户分配给我的角色的策略使我可以访问所有 lambda 函数,例如
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudwatch:*",
"cognito-identity:ListIdentityPools",
"cognito-sync:GetCognitoEvents",
"cognito-sync:SetCognitoEvents",
"dynamodb:*",
"events:*",
"iam:ListAttachedRolePolicies",
"iam:ListRolePolicies",
"iam:ListRoles",
"iam:PassRole",
"kinesis:DescribeStream",
"kinesis:ListStreams",
"kinesis:PutRecord",
"lambda:*",
"logs:*",
"s3:*",
"sns:ListSubscriptions",
"sns:ListSubscriptionsByTopic",
"sns:ListTopics",
"sns:Subscribe",
"sns:Unsubscribe"
],
"Resource": "*"
}
]
}
我在选择"基本执行角色"时设置Lambda function handler and role
时被困在步骤 6 中,但有错误
用户:arn:aws:iam::xxxx:user/yyyy 无权执行: iam:CreateRole on resource: arn:aws:iam::xxxx:role/lambda_basic_exec
我的角色策略如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"ec2:Describe*",
"ec2:Start*",
"ec2:RunInstances",
"ec2:Stop*",
],
"Resource": "*"
}
]
}
鉴于我的权利有限,这似乎是合理的。
我应该要求我的管理员更新分配给我的策略,以便我可以按照教程中所述成功为 lambda 函数设置计划事件?或者这可以通过其他方式使用 IAM 来完成,例如通过添加新角色?我只想要足够的权利。
自从回答这个问题以来已经过去了一段时间并且AWS发生了很大变化,我想提到AWS在2018年推出的一项新功能:IAM实体的权限边界[1]。
它们用于"将权限管理委派给受信任的员工"[2] 和其他 IAM 实体(例如角色).
也就是说,您无需授予特定角色类似管理员的权限即可创建接受答案状态的其他角色。您可以授予角色 iam:CreateRole 权限,条件要求在每个新创建的角色上设置权限边界:{"StringEquals": {"iam:PermissionsBoundary": "arn:aws:iam::111122223333:policy/XCompanyBoundaries"}}
。
由权限边界指定的策略定义了有效分配给角色的最大权限。[1]
为了创建具有权限边界的角色,例如,您可以使用可选参数 --permissions-boundary 作为 cli 命令 aws iam create-role
。[3]
引用
[1] https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html[2] https://aws.amazon.com/blogs/security/delegate-permission-management-to-developers-using-iam-permissions-boundaries/[3] https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html
您有一个安全约束,因为您需要策略中的"iam:CreateRole",以及"iam:attachRolePolicy"和"iam:createPolicy"之类的内容。因此,您基本上是账户的管理员,因为您可以使用任何策略创建角色并将其附加到 EC2 实例或直接代入。
您可以做的是让您的管理员为 lambda 创建一个或多个角色,例如一个用于 S3 访问,一个用于 ec2 命令等。当您想要创建 lambda 函数时,请选择这些预先创建的角色之一,而不是创建新角色。