Не получено сообщение в Amazon SNS от Textract

Я использую StartDocumentAnalysis для асинхронного сканирования файла .pdf из корзины S3. Как сказано в документации, я должен получить уведомление о статусе задания в предоставленной теме SNS.

StartDocumentAnalysis возвращает идентификатор задания (JobId), который вы используете для получения результатов операции. Когда анализ текста завершен, Amazon Textract публикует статус завершения в теме Amazon Simple Notification Service (Amazon SNS), которую вы указываете в NotificationChannel.

Код, который я использую для запуска анализа, выглядит так:

    fun analyzeDocument(documentId: String) {
        klogger.info { "Start Textract analysis on document '$documentId'" }

        val request = StartDocumentAnalysisRequest()
            .withFeatureTypes("TABLES", "FORMS")
            .withDocumentLocation(DocumentLocation()
                .withS3Object(S3Object()
                    .withName(documentId)
                    .withBucket(bucketName)
                )
            )
            .withNotificationChannel(NotificationChannel()
                .withSNSTopicArn(snsTopicArn)
                .withRoleArn(snsRoleArn)
            )

        val jobId = textract.startDocumentAnalysis(request).jobId

        klogger.info { "Analysis started for document '$documentId'. Job ID: '$jobId'" }
    }

Я создал SNS в консоли AWS.

  • snsTopicArn = arn:aws:sns:us-east-1:093475263507:textract-result.fifo
  • snsRoleArn = arn:aws:iam::093475263507:role/SNSSuccessFeedback

Я могу вручную опубликовать сообщение для этого соцсети с консоли, но ни одно сообщение от Textract никогда не попадает в тему соцсети. Я ждал уже несколько часов - подозреваю, что уже получил бы сообщение.

Я не уверен, что snsRoleArn правильный. Я просто использовал какой-то случайный, который у меня уже был в AWS. Могло ли это быть проблемой? Какой snsRoleArn я должен использовать? Если нет, то почему я не получаю сообщение?

Могу ли я что-то упустить в политике доступа?

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "SNS:GetTopicAttributes",
        "SNS:SetTopicAttributes",
        "SNS:AddPermission",
        "SNS:RemovePermission",
        "SNS:DeleteTopic",
        "SNS:Subscribe",
        "SNS:ListSubscriptionsByTopic",
        "SNS:Publish",
        "SNS:Receive"
      ],
      "Resource": "arn:aws:sns:us-east-1:093475263507:textract-result.fifo",
      "Condition": {
        "StringEquals": {
          "AWS:SourceOwner": "093475263507"
        }
      }
    }
  ]
}

person Whizzil    schedule 08.02.2021    source источник


Ответы (1)


Использование случайной роли IAM для конкретной задачи - не лучшая практика. В этом случае следует использовать роль IAM, к которой привязана политика SNS. Я бы попробовал использовать что-то вроде этого:

введите описание изображения здесь

person smac2020    schedule 08.02.2021