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

How can a policy be assigned to AWS resource?

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

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)?

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

参考:

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

In aws policy definition, Principal entry has value as user, group or role but not AWS resource(like EC2, serverless lambda etc...)

编辑:

我不确定我们在这里谈论 AWS JSON 政策语言中的实体是否相同。策略可以是 (a) identity-based 策略、(b) 信任策略或 (c) resource-based 策略。 [2]

文档指出 "you cannot use the Principal element in an IAM identity-based policy"。 [2] Lambda 通常使用其他两种类型的策略:针对执行角色的信任策略和针对 cross-account 访问和来自其他 AWS 服务的访问的 resource-based 策略。 [6]
但是,也可以选择将 identity-based 策略与 Lambda 一起使用。 [7]
在这种情况下,您没有指定 Principal,因为 "the principal is implicitly the user that the policy is attached to" [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 安全博客 post 中有一个 step-by-step 示例,它展示了如何手动为 lambda 函数创建执行角色。 [3]

How can a policy be assigned to a AWS resource(lambda)?

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

but I see Policies property as part of the resource definition

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 service")
[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