如何将策略分配给AWS资源?

时间:2019-07-14 01:35:10

标签: amazon-web-services aws-lambda amazon-iam aws-serverless aws-sam

以下是我对分配政策的理解:

enter image description here

可以将

AWS策略分配给用户,组,角色,但不能分配 AWS资源。

在AWS策略定义中,Principal条目具有作为用户,组或角色的值,但没有AWS资源(如EC2,无服务器lambda等)的值


可以通过角色将策略分配给资源


我们正在使用SAM模板创建lambda资源(AWS),如下所示:

Resources:
  MyFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      CodeUri: src/
      Handler: index.handler
      Runtime: nodejs4.3
      Policies:

        - SQSPollerPolicy:
            QueueName: name

        - LambdaInvokePolicy:
            FunctionName: name

但是我看到Policies属性是资源定义的一部分


如何将策略分配给AWS资源(lambda)?

2 个答案:

答案 0 :(得分:1)

定义无服务器功能时,SAM自动 创建运行该功能所需的IAM角色。假设您的函数需要访问几个DynamoDB表,您需要为函数赋予显式权限才能访问这些表。您可以通过将SAM托管策略添加到SAM模板中的无服务器功能资源定义中来实现。

参考:

https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

答案 1 :(得分:1)

  

在AWS策略定义中,主体条目具有作为用户,组或角色的值,但不具有AWS资源(如EC2,无服务器lambda等...)的值

修改

我不确定我们是否在这里讨论AWS JSON策略语言中的同一实体。策略可以是(a)基于身份的策略,(b)信任策略或(c)基于资源的策略。 [2]

文档指出“您不能在基于IAM身份的策略中使用Principal元素”。 [2] Lambda通常使用其他两种策略:用于执行角色的信任策略和用于跨账户访问以及从其他AWS服务进行访问的基于资源的策略。 [6]
但是,也可以选择在Lambda中使用基于身份的策略。 [7]
在这种情况下,您无需指定 Principal ,因为“该主体隐含了该策略所附加的用户” [2]。

示例:

在AWS IAM概念中,角色的 Principal 也可以是AWS服务-它们被称为 service-roles [1]。 [2]
要将Lambda设置为主体,请​​将以下内容设置为 AssumeRolePolicyDocument (信任策略):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

AWS安全博客文章中有一个分步示例,其中显示了如何手动为lambda函数创建执行角色。 [3]

  

如何将策略分配给AWS资源(lambda)?

该策略已分配给Lambda的执行角色。然后,该函数在运行时担当角色,并根据分配给执行角色的所有策略被授予权限。 [4]

  

但是我将策略属性视为资源定义的一部分

SAM能够为您创建lambda的执行角色,并自动为其分配策略。 SAM开发人员提供了所谓的 AWS SAM策略模板 [5],您可以在SAM模板中引用它们。通过使用这些策略模板,可以指示SAM为您创建策略并将其自动附加到执行角色。

参考文献

[1] https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-role
[2] https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html(“ AWS服务”部分)
[3] https://aws.amazon.com/de/blogs/security/how-to-create-an-aws-iam-policy-to-grant-aws-lambda-access-to-an-amazon-dynamodb-table/
[4] https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html
[5] https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-policy-templates.html
[6] https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html
[7] https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html