web-dev-qa-db-ja.com

SAMテンプレートにポリシーを追加できない

AWSサーバーレスリポジトリでアプリケーションを公開するためのSAMテンプレートに取り組んでいます。しかし、ラムダにポリシーを追加しようとすると、エラーが表示されます。サーバーレスアプリケーションの仕様が無効です。検出されたエラーの数: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"
                        }
                    }
                }
            }
        }
    }
}
8
Mayank

本日(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: '*'

参照:

  1. AWS :: Serverless :: Function'sPoliciesAWS SAM仕様のプロパティ
  2. GitHubの関連問題
13
onelaview

現在はSAMポリシーテンプレートしか使用できないようです。

AWSは、ここでSAMポリシーテンプレートの信頼できる情報/概要を維持しています: https://docs.aws.Amazon.com/serverlessrepo/latest/devguide/using-aws-sam.html

このドキュメントには、さらにAWSリソースやポリシーテンプレートが必要な場合は AWSサポート に連絡する必要があることも記載されています。

それらの短い概要と使用方法の例は、ここにあります: 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:Records kinesis:Records kinesis:Records! 、kinesis:RemoveTagsFromStream)
  • KMSDecryptPolicy(kms:Decryptを提供)

これらのポリシーテンプレートのほとんどすべてを構成する必要があります。これらのテンプレートの構成方法については、AWSのドキュメント(上記のリンク)を参照してください。

3
Oliver

公式リポジトリの例からの ポリシーテンプレート の完全なリストを以下に示します。


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

1
mjabadilla