web-dev-qa-db-ja.com

AWSLambdaのAWSSQSパーミッション

AWS SQSサービスを使用していますが、SQSキューでパーミッションを定義するのに苦労しています。私のセットアップでは、オブジェクトがS3バケットにプッシュされたときにトリガーされるAWSLambdaサービスを使用しています。

しかし、私の質問を簡潔に保つために、これは私が達成したいことです:

  1. オブジェクトがS3バケットにプッシュされます
  2. S3バケットがAWSLambdaをトリガーします
  3. Lambdaはいくつかの計算を行い、イベントをSQSキューにプッシュします(パーミッションを定義する必要があります)
  4. アプリケーションはSQSから読み取ります

以前のユースケースからわかるように、AWSLambdaメソッドをSQSキューにメッセージを送信できる唯一のアプリケーションにしたいと思います。プリンシパルと条件「sourceArn」を設定しようとしました。しかし、それらのどれも機能しません。

enter image description here

誰か助けてもらえますか?

14

SourceArnフィールドにLambdaが入力されるとは思いません。 SourceArnがSNSで機能することは知っていますが、Lambdaは、SNSのようなAWS機能ではなく、実際には任意のコードを実行しています。

別の方法として、Lambda関数が実行されるIAMロールにポリシーをアタッチできます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1440529349000",
            "Effect": "Allow",
            "Action": [
                "sqs:SendMessage"
            ],
            "Resource": [
                "arn:aws:sqs:us-west-2:123456789012:test-queue"
            ]
        }
    ]
}

この方法では、キューに直接アタッチされたポリシーは必要ありません。

12
James