无法在SAM模板中添加策略

May*_*ank 6 aws-lambda serverless

我正在研究SAM模板,用于在AWS Serverless存储库中发布我的应用程序。但是,当我尝试为lambda添加策略时,会显示错误消息:Invalid Serverless Application Specification文档。发现的错误数量:1.错误:ID为[SyncPostDataFromSfLambda]的资源无效。“策略”属性中仅支持策略模板。

以下是我的SAM模板的示例:

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::Serverless-2016-10-31",
    "Description": "Deployment",
    "Resources": {
        "SyncPostDataToSfLambda": {
            "Type": "AWS::Serverless::Function",
            "Properties": {
                "Handler": "index.handler",
                "FunctionName": "myLambdaFunction",
                "CodeUri": "s3 URL",
                "Runtime": "nodejs6.10",
                "MemorySize": 512,
                "Policies": [
                    "AmazonDynamoDBFullAccess"
                ],
                "Events": {
                    "PostResource": {
                        "Type": "Api",
                        "Properties": {
                            "RestApiId": {
                                "Ref": "API"
                            },
                            "Path": "/apipath",
                            "Method": "post"
                        }
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

one*_*iew 7

截至今天(2018-10-09),SAM模板已经支持内联策略文档。

这是一个例子:

Resources:
  SomeFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      Policies:
      - Statement:
        - Sid: SSMDescribeParametersPolicy
          Effect: Allow
          Action:
          - ssm:DescribeParameters
          Resource: '*'
        - Sid: SSMGetParameterPolicy
          Effect: Allow
          Action:
          - ssm:GetParameters
          - ssm:GetParameter
          Resource: '*'
Run Code Online (Sandbox Code Playgroud)

参考文献:

  1. AWS SAM规范上的AWS :: Serverless :: Function的Policies属性
  2. GitHub上的相关问题


mja*_*lla 7

这是来自官方存储库示例的策略模板的完整列表。


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

        - SQSPollerPolicy:
            QueueName: name

        - LambdaInvokePolicy:
            FunctionName: name

        - CloudWatchPutMetricPolicy: {}

        - EC2DescribePolicy: {}

        - DynamoDBCrudPolicy:
            TableName: name

        - DynamoDBReadPolicy:
            TableName: name

        - SESSendBouncePolicy:
            IdentityName: name

        - ElasticsearchHttpPostPolicy:
            DomainName: name

        - S3ReadPolicy:
            BucketName: name

        - S3CrudPolicy:
            BucketName: name

        - AMIDescribePolicy: {}

        - CloudFormationDescribeStacksPolicy: {}

        - RekognitionDetectOnlyPolicy: {}

        - RekognitionNoDataAccessPolicy:
            CollectionId: id

        - RekognitionReadPolicy:
            CollectionId: id

        - RekognitionWriteOnlyAccessPolicy:
            CollectionId: id

        - RekognitionLabelsPolicy: {}

        - SQSSendMessagePolicy:
            QueueName: name

        - SNSPublishMessagePolicy:
            TopicName: name

        - VPCAccessPolicy: {}

        - DynamoDBStreamReadPolicy:
            TableName: name
            StreamName: name

        - KinesisStreamReadPolicy:
            StreamName: name

        - SESCrudPolicy:
            IdentityName: name

        - SNSCrudPolicy:
            TopicName: name

        - KinesisCrudPolicy:
            StreamName: name

        - KMSDecryptPolicy:
            KeyId: keyId

        - SESBulkTemplatedCrudPolicy:
            IdentityName: name

        - SESEmailTemplateCrudPolicy: {}

        - FilterLogEventsPolicy:
            LogGroupName: name

        - StepFunctionsExecutionPolicy:
            StateMachineName: name

Run Code Online (Sandbox Code Playgroud)

  • 如何为单个策略添加多个资源?假设我想添加多个 S3 存储桶? (6认同)

小智 3

看来,目前只能使用SAM 策略模板。

AWS 在此处维护 SAM 策略模板的权威信息/概述: https: //docs.aws.amazon.com/serverlessrepo/latest/devguide/using-aws-sam.html

本文档还指出,如果您需要更多 AWS 资源和/或策略模板,您应该联系AWS Support

可以在这里找到如何使用它们的简短概述和示例: https: //github.com/awslabs/serverless-application-model/blob/master/examples/2016-10-31/policy_templates/all_policy_templates.yaml

以下是发布此答案时当前支持的 SAM 策略模板的概述:

  • SQSPollerPolicy(提供 sqs:DeleteMessage、sqs:ReceiveMessage)
  • LambdaInvokePolicy(提供lambda:InvokeFunction)
  • CloudWatchPutMetricPolicy(提供cloudwatch:PutMetricData)
  • EC2DescribePolicy(提供 ec2:DescribeRegions、ec2:DescribeInstances)
  • DynamoDBCrudPolicy(提供 dynamodb:GetItem、dynamodb:DeleteItem、dynamodb:PutItem、dynamodb:Scan、dynamodb:Query、dynamodb:UpdateItem、dynamodb:BatchWriteItem、dynamodb:BatchGetItem)
  • DynamoDBReadPolicy(提供 dynamodb:GetItem、dynamodb:Scan、dynamodb:Query、dynamodb:BatchGetItem)
  • SESSendBouncePolicy(提供ses:SendBounce)
  • ElasticsearchHttpPostPolicy(提供es:ESHttpPost)
  • S3ReadPolicy(提供 s3:GetObject、s3:ListBucket、s3:GetBucketLocation、s3:GetObjectVersion、s3:GetLifecycleConfiguration)
  • S3CrudPolicy(提供 s3:GetObject、s3:ListBucket、s3:GetBucketLocation、s3:GetObjectVersion、s3:PutObject、s3:GetLifecycleConfiguration、s3:PutLifecycleConfiguration)
  • AMIDescribePolicy(提供 ec2:DescribeImages)
  • CloudFormationDescribeStacksPolicy(提供cloudformation:DescribeStacks)
  • RekognitionNoDataAccessPolicy(提供 rekognition:CompareFaces、rekognition:DetectFaces、rekognition:DetectLabels、rekognition:DetectModerationLabels)
  • RekognitionReadPolicy(提供 rekognition:ListCollections、rekognition:ListFaces、rekognition:SearchFaces、rekognition:SearchFacesByImage)
  • RekognitionWriteOnlyAccessPolicy(提供 rekognition:CreateCollection、rekognition:IndexFaces)
  • SQSSendMessagePolicy(提供 sqs:SendMessage*)
  • SNSPublishMessagePolicy(提供sns:Publish)
  • VPCAccessPolicy(提供 ec2:CreateNetworkInterface、ec2:DeleteNetworkInterface、ec2:DescribeNetworkInterfaces、ec2:DetachNetworkInterface)
  • DynamoDBStreamReadPolicy(提供 dynamodb:DescribeStream、dynamodb:GetRecords、dynamodb:GetShardIterator、dynamodb:ListStreams)
  • KinesisStreamReadPolicy(提供 kinesis:ListStreams、kinesis:DescribeLimits)
  • SESCrudPolicy(提供 ses:GetIdentityVerificationAttributes、ses:SendEmail、ses:VerifyEmailIdentity)
  • SNSCrudPolicy(提供 sns:ListSubscriptionsByTopic、sns:CreateTopic、sns:SetTopicAttributes、sns:Subscribe、sns:Publish)
  • KinesisCrudPolicy(提供 kinesis:AddTagsToStream、kinesis:CreateStream、kinesis:DecreaseStreamRetentionPeriod、kinesis:DeleteStream、kinesis:DescribeStream、kinesis:GetShardIterator、kinesis:IncreaseStreamRetentionPeriod、kinesis:ListTagsForStream、kinesis:MergeShards、kinesis:PutRecord、kinesis:PutRecord s、运动:SplitShard 、kinesis:RemoveTagsFromStream)
  • KMSDecryptPolicy(提供kms:Decrypt)

几乎所有这些策略模板都必须进行配置。请阅读 AWS 文档(上面的链接)了解如何配置这些模板。