我担心安全性。IAM角色的创建是一种高安全风险,您只能指定为AWS lambda,这一事实是可以假设角色不够好的IMO。如果不谨慎对待,可能会有特权升级。
如何创建特定于某些lambda功能的IAM角色?
我没有发现类似的东西,但我相信这可能是可能的。
此角色也将附带一些政策:
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
通常,在其他角色中,您将使用主要条款来决定哪些帐户可以担任该角色。
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789:root"
},
"Action": "sts:AssumeRole"
}
根据@michael在评论中,我必须说哪些用户可以使用哪个角色,因此问题是,我如何确定哪些用户可以通过此角色?
如果是这样,将以两个步骤解决此问题的答案。仅由Lambda服务(如已经是已经是),然后对每个用户都具有密封限制的策略。
我问AWS支持对这个。他们说,他们目前没有*支持pabus_role/Trust策略中的支持条件,以限制哪些函数可以通过匹配函数名称模式来担任该角色。
相反,他们建议将条件添加到执行策略(而不是假设/信任策略):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "WhitelistSpecificLambdaFunction",
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"StringNotLike": {
"aws:userid": "AROAUISMSUAFHSJDJURKJ:TestLambda"
}
}
}
]
}
- 此策略拒绝访问所有lambda功能,除了特定的lambda函数,其名称在" aws:userId"中被提及。条件密钥。其他lambda功能将能够扮演该角色,但是执行任何操作将被拒绝,但是如果它们仅打印或返回任何变量/数据,则该功能将起作用。
- >注意:条件密钥" aws:userId"指定当前角色的唯一ID,该密钥的相应值具有以下格式:'reo proam-id:rome-session-name&quot&quot。
- iam角色id是" aroauismsuafhsjdjurkj"对于我使用的样本角色。
- 在lambda函数的情况下,角色主题名称与lambda函数名称相同。在此示例情况下," testlambda"是" aws:userId成为aws:userId":" aroauisssuafhsjdjurkj:testlambda&quort"
*他们将我的名字添加到现有请求中,以添加此功能
我认为您无法实现这一目标。如果您认为需要将IAM角色分配给AWS::Lambda::Function
创建的角色,则需要在Lambda函数之前存在此IAM角色。但是,要限制在AWS::IAM::Role
上假设到一个lambda函数,该函数需要首先存在 - 您无法满足这两个条件。
我假设您在这里使用CloudFormation创建基础架构。也许有多种方法可以通过在AWS控制台中手动创建您的基础架构来实现这一目标,但是即使有可能,对于整个环境/区域的可复制性,这本身也不是最佳实践。
可以通过以下组合来减轻您的安全问题:
- AWS云形式漂移检测。
- 限制云形式,也许IAM访问一组受限制的开发人员(例如团队线索)。
- 正如@milan所建议的,在不同的帐户中保留不同的环境。
唯一的其他选项(无济于事)是将一个IAM角色的假设限制为另一个角色的原理 - 例如:
{
"Action": "sts:AssumeRole",
"Principal": {
"AWS": { "Fn::Sub": "arn:aws:iam::${AWS::AccountId}:role/role-name"}
},
"Effect": "Allow"
}
此解决方案只是将问题掩埋一层 - 您将sts:AssumeRole
限制在包含您权限的角色上,但是您仍然可以在不同的lambdas上假设此父级角色。
(我知道我要回到一个旧问题,但是我一直在研究将KMS的关键资源限制为从S3加载加密对象时的特定Lambdas的类似内容。)
已经说过,您可以为每个环境和控制都有不同的帐户。
让我们深入了解您的问题:
-
如何创建特定于某些lambda函数的IAM角色?您可以定义对lambda服务的主限制和/或添加使用针对特定lambda的密钥
lambda:FunctionArn
的条件。缺点是lambda必须在角色之前存在,因为您需要arn
。 -
如何确定哪些用户可以通过此角色?创建不同的组并选择哪些组可以访问:
CreateRole
和Attach*Policy
。为CreatePolicy
提供自由,但要求针对资源arn
的策略(再次,条件)或完全限制IAM仅限于负责访问控制和用户管理的一组用户。
在此处扩展以扩展STEAMER25的答案,确认您仍然无法在IAM角色的假设角色信任政策中使用条件,而您必须在关联的IAM策略文档中使用条件而是附上IAM角色。
在对其他全球状况密钥进行了大量测试之后,AWS:用户ID键仍然是实现此目的的最有效方法。但是,要简化Steamer25提供的实现,只需使用以下内容:
"Condition": {
"StringLike": {
"aws:userid": "*:<FUNCTION_NAME>"
}
}
whene&lt; function_name&gt;是您的lambda功能的名称。通配符代表IAM角色的ID,但就条件而言,通配符的工作正常。