Lambda-如何创建客户管理的政策?

时间:2019-07-14 18:15:05

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

背景:

IAM策略可以通过两种方式创建:

  • 托管策略(较新的方式)

    • AWS托管策略
    • 客户管理的政策
  • 内联策略(旧方法)


下面的SAM模板正在创建内联策略:

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: hello-world/
      Handler: app.LambdaHandler
      Runtime: nodejs8.10
      Policies:
      - Statement:
        - Sid: AccessToS3Policy
          Effect: Allow
          Action:
          - s3:GetObject
          - s3:GetObjectACL
          Resource: 'arn:aws:s3:::some-bucket/*'

扮演最终角色,如下所示:

{
   "roleName": "somestack-HelloWorldFunctionRole-AAAAAAAA",
   "policies": [
   {
      "document": {
        "Statement": [
          {
            "Action": [
              "s3:GetObject",
              "s3:GetObjectACL"
            ],
            "Resource": "arn:aws:s3:::some-bucket/*",
            "Effect": "Allow",
            "Sid": "AccessToS3Policy"
          }
        ]
      },
      "name": "HelloWorldFunctionRolePolicy0",
      "type": "inline"
    },
    .....
   ]
 }

对于Lambda函数,

1)如何创建客户管理的政策?

2)内联策略与客户托管策略有何不同?

1 个答案:

答案 0 :(得分:2)

如果您在SAM模板中使用此语法

Policies:
      - Statement:
        - Sid: AccessToS3Policy
          Effect: Allow
          Action:
          - s3:GetObject
          - s3:GetObjectACL
          Resource: 'arn:aws:s3:::some-bucket/*'

它将自动创建内联策略。如果要创建客户托管策略而非内联策略,则需要在模板中将策略定义为单独的Resource,并在policies中引用它。或者,您可以在模板之外创建角色(例如,通过AWS控制台),然后以与引用AWS托管策略相同的方式引用该策略。

内联策略与客户托管策略有何不同?

我不会真的说内联策略是做事的老方法。内联策略和客户托管策略之间的唯一区别是内联策略不能重复使用(您不能将内联策略分配给两个或多个实体)。但这通常很方便,如果您需要将来不打算重复使用的特定策略。