来自特定 AWS Batch 权限的作业

Jobs from specific AWS Batch permissions

如何只允许来自特定 AWS Batch 队列的作业(并基于特定的作业描述)发布到特定的 SNS 主题?

我想通过声明附加到作业 IAM 策略:

    {
      "Effect": "Allow",
      "Action": "sns:Publish",
      "Resource": ["<arn of the specific SNS topic"]
      "Condition": {"ArnEquals": {"aws:SourceArn": "arn:aws:???"}}

    }

但是源 ARN 应该是什么?作业队列的 ARN,作业定义的 ARN?或者也许这应该完全不同地设置?

我在处理在 Fargate 容器中执行的 AWS Batch 作业时有过类似的经历,这些作业在分配角色和权限的范围内遵循与 ECS 相同的原则。

如果您要从容器内执行的代码向特定主题发布消息,那么您应该创建一个具有必要权限的角色,然后在 JobRoleArn property 中使用其 ARN你的工作定义。

例如(下面的代码可能有一些小错误,但我只是想在这里解释一下这个概念):

角色 cloudformation:

"roleresourceID": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "AWS": "*"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "RoleName": "your-job-role"
      }
    }

附加到角色的政策:

"policyresourceid": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
             {
               "Action": "sns:Publish",
               "Effect": "Allow",
               "Resource": "<arn of the specific SNS topic>"
             }
          ],
          "Version": "2012-10-17"
        },
      "PolicyName": "your-job-role-policy",
      "Roles": [
          {
            "Ref": "roleresourceID"
          }
        ]
      }
   }

最后将角色附加到职位定义:

....other job definition properties

"JobRoleArn": {
      "Fn::GetAtt": [
         "roleresourceID",
         "Arn"
       ]
   }

当然,您可以按照自己喜欢的方式构建和格式化角色和策略,此解释的主要思想是您需要使用工作定义的 JobRoleArn 属性 附加适当的角色。