IAM角色限制sts:一个AWS lambda函数的假设



我担心安全性。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的类似内容。)

已经说过,您可以为每个环境和控制都有不同的帐户。

让我们深入了解您的问题:

  1. 如何创建特定于某些lambda函数的IAM角色?您可以定义对lambda服务的主限制和/或添加使用针对特定lambda的密钥lambda:FunctionArn的条件。缺点是lambda必须在角色之前存在,因为您需要arn

  2. 如何确定哪些用户可以通过此角色?创建不同的组并选择哪些组可以访问:CreateRoleAttach*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,但就条件而言,通配符的工作正常。

相关内容

  • 没有找到相关文章