【问题标题】:AWS Batch Job application not being able to send SNS notificationAWS Batch Job 应用程序无法发送 SNS 通知
【发布时间】:2022-03-23 12:52:41
【问题描述】:

我有一个 AWS Batch Job,它是一个作为容器运行的 .NET CORE 应用程序,它从 SFTP 服务器下载一个 CSV 文件,解析它并将数据插入 AWS RDS。

当 CSV 损坏时,作业失败并且应该发送 SNS 通知,但我在 CloudWatch 日志中看到以下错误。

 "Message": "User: arn:aws:sts::654001826221:assumed-role/fileimportworker-batch/5f77c736e4e64c2d82df278800ec4f25 is not authorized to perform: SNS:Publish on resource: arn:aws:sns:eu-west-1:accountIdHere:Test-SNS-Batch",

附加到批处理作业角色的我的 IAM 角色具有 SNS:允许发布、允许 S3,还提供对 Secret Manager 中 2 个密钥的读取访问权限。 S3 和 SecretManager 访问工作,该任务能够从 SFTP 下载文件并将其放到 S3 中,还可以从 Secret Manager 读取 RDS 密码。

【问题讨论】:

  • 我尝试使用 AWS CLI 创建一个简单的 Docker 容器,我在我的机器上使用 docker run --env AWS_ACCESS_KEY_ID=id_here --env AWS_SECRET_ACCESS_KEY=secret_here --env REGION=eu-west-1 --env TOPIC_ARN=arn:aws:sns:eu-west-1:account_id_here:Test-SNS-Batch aws_cli 运行它,我得到消息 ID 并将消息传递到我的收件箱。
  • 当我使用所需的环境变量创建新的批处理作业定义并提交作业时,我得到An error occurred (AuthorizationError) when calling the Publish operation: User: arn:aws:iam::account_id_here:user/docker_test is not authorized to perform: SNS:Publish on resource: arn:aws:sns:eu-west-1:account_id_here:Test-SNS-Batch

标签: amazon-web-services amazon-iam amazon-sns aws-batch


【解决方案1】:

AWS Batch Job 可能会使用来自容器的凭证而不是您的环境变量。您必须查看凭证优先级。

https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-precedence

AWS CLI 使用位于 多个地方,例如系统或用户环境变量, 本地 AWS 配置文件,或在命令中显式声明 行作为参数。某些位置优先于其他位置。 AWS CLI 凭证和配置设置优先于 以下顺序:

  1. 命令行选项 - 覆盖任何其他位置的设置。你 可以指定 --region、--output 和 --profile 作为参数 命令行。

  2. 环境变量——您可以将值存储在系统的 环境变量。

  3. CLI 凭据文件 – 凭据和配置文件已更新 当您运行命令 aws configure 时。凭证文件是 位于 Linux 或 macOS 上的 ~/.aws/credentials 或 C:\Users\USERNAME.aws\credentials 在 Windows 上。该文件可以包含 默认配置文件和任何命名配置文件的凭据详细信息。

  4. CLI 配置文件 – 凭据和配置文件已更新 当您运行命令 aws configure 时。配置文件位于 ~/.aws/config 在 Linux 或 macOS 上,或在 C:\Users\USERNAME.aws\config 在 Windows 上。此文件包含配置设置 默认配置文件和任何命名配置文件。

  5. 容器凭证 – 您可以将 IAM 角色与每个 您的 Amazon Elastic Container Service (Amazon ECS) 任务定义。 该角色的临时凭证随后可供该任务的 容器。有关更多信息,请参阅任务的 IAM 角色 Amazon Elastic Container Service 开发人员指南。

  6. 实例配置文件凭证 – 您可以将 IAM 角色与每个 您的 Amazon Elastic Compute Cloud (Amazon EC2) 实例。暂时的 然后,该角色的凭据可用于在 实例。凭证通过 Amazon EC2 交付 元数据服务。有关更多信息,请参阅 Amazon EC2 的 IAM 角色 在适用于 Linux 实例和使用实例的 Amazon EC2 用户指南中 IAM 用户指南中的配置文件。

附:要在不编码的情况下将 AWS Batch 与 SNS 集成,您可以使用 Eventbridge 规则来侦听来自 AWS Batch 的事件模式。您只需选择规则的目标即可在您想要的 SNS 主题上发布消息。

https://docs.aws.amazon.com/batch/latest/userguide/batch_sns_tutorial.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多