【问题标题】:User: batch.amazonaws.com is not authorized to perform: sts:AssumeRole on resource用户:batch.amazonaws.com 无权执行:sts:AssumeRole on resource
【发布时间】:2023-03-19 10:20:01
【问题描述】:

我一直在尝试创建一些基础架构,其中包括 EC2、ECS、S3 和 Batch(更多)等一系列服务。一切似乎都很好,直到它到达构建批处理过程的步骤。

我正在关注一个中型博客,这是 CF 模板:Github Repo Link

这个 YAML 已经过时了,我在这里和那里做了一些修改,但不是那些有角色的。

我有超过 3 个 CloudFormation 堆栈卡在回滚中,因为它无法稳定从我拥有的 YAML 配置构建的计算环境。我联系了 Compute Environment 以查看确切的错误,这就是我得到的:

DELETING - CLIENT_ERROR - User: batch.amazonaws.com is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::402726478692:role/service-role/AWSBatchServiceRole (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: f9d6c19d-4e77-4814-ac2c-b437e0546977; Proxy: null)

现在,它甚至不会在自动回滚时删除此计算环境。但是,我主要关心的是为什么它不能创建?我已经阅读了有关同一主题的文档和几个问题,但似乎没有任何效果。

这是我的 YAML 配置的摘录。这部分是针对计算环境的:

ComputeEnvironment:
    Type: "AWS::Batch::ComputeEnvironment"
    Properties:
      Type: MANAGED
      ServiceRole: !Sub "arn:aws:iam::${AWS::AccountId}:role/service-role/AWSBatchServiceRole"
      ComputeEnvironmentName: !Sub "${Environment}-batch-processing_3"
      ComputeResources:
        MaxvCpus: 1
        SecurityGroupIds:
          - !Ref SecurityGroup
        Type: EC2
        Subnets: !Ref Subnets
        MinvCpus: 1
        InstanceRole: !Ref ECSInstanceProfile
        InstanceTypes:
          - "c6gd.medium"
        Tags: {"Name": !Sub "${Environment} - Batch Instance" }
        DesiredvCpus: 1
      State: ENABLED

  JobQueue:
    DependsOn: ComputeEnvironment
    Type: "AWS::Batch::JobQueue"
    Properties:
      ComputeEnvironmentOrder:
        - Order: 1
          ComputeEnvironment: !Ref ComputeEnvironment
      State: ENABLED
      Priority: 1
      JobQueueName: "HighPriority"

  Job:
    Type: "AWS::Batch::JobDefinition"
    Properties:
      Type: container
      JobDefinitionName: !Sub "${Environment}-batch-s3-processor"
      ContainerProperties:
        Memory: 2048
        Privileged: false
        JobRoleArn: !Ref JobRole
        ReadonlyRootFilesystem: true
        Vcpus: 1
        Image: !Sub "${AWS::AccountId}.dkr.ecr.us-west-2.amazonaws.com/${DockerImage}"
      RetryStrategy:
        Attempts: 1

  JobRole:
    Type: "AWS::IAM::Role"
    Properties:
      Path: "/"
      RoleName: !Sub "${Environment}-BatchJobRole"
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          -
            Action: 
              - "sts:AssumeRole"
            Effect: "Allow"
            Principal:
              Service: 
                - "ecs-tasks.amazonaws.com"
                - "batch.amazonaws.com"
      Policies:
        -
          PolicyName: !Sub "${Environment}-s3-access"
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              -
                Effect: "Allow"
                Action: 
                  - "s3:*"
                  - "iam:*"
                  - "batch:*"
                Resource: !Sub "arn:aws:s3:::batch-${AWS::AccountId}-${AWS::Region}/*"

  ECSInstanceProfile:
    Type: "AWS::IAM::InstanceProfile"
    Properties:
      Path: "/"
      Roles:
        - !Ref ECSRole

  ECSRole:
    Type: "AWS::IAM::Role"
    Properties:
      Path: "/"
      RoleName: !Sub "${Environment}-batch-ecs-role"
      SourceAccount:
        Ref: AWS::AccountId
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          -
            Action: "sts:AssumeRole"
            Effect: "Allow"
            Principal:
              Service: 
                - "ec2.amazonaws.com"
                - "batch.amazonaws.com"
      Policies:
        - PolicyName: !Sub "${Environment}-full-access-for-batch-resource"
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              -
                Effect: "Allow"
                Action: 
                  - "s3:*"
                  - "iam:*"
                  - "batch:*"
                Resource: !Sub "arn:aws:s3:::batch-${AWS::AccountId}-${AWS::Region}/*"
        - PolicyName: !Sub ${Environment}-ecs-batch-policy
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              -
                Effect: "Allow"
                Action:
                  - "ecs:CreateCluster"
                  - "ecs:DeregisterContainerInstance"
                  - "ecs:DiscoverPollEndpoint"
                  - "ecs:Poll"
                  - "ecs:RegisterContainerInstance"
                  - "ecs:StartTelemetrySession"
                  - "ecs:StartTask"
                  - "ecs:Submit*"
                  - "logs:CreateLogStream"
                  - "logs:PutLogEvents"
                  - "logs:DescribeLogStreams"
                  - "logs:CreateLogGroup"
                  - "ecr:BatchCheckLayerAvailability"
                  - "ecr:BatchGetImage"
                  - "ecr:GetDownloadUrlForLayer"
                  - "ecr:GetAuthorizationToken"
                  - "s3:*"
                  - "batch:*"
                Resource: "*"
        - PolicyName: !Sub "${Environment}-ecs-instance-policy"
          PolicyDocument:
            Statement:
              -
                Effect: "Allow"
                Action:
                  - "ecs:DescribeContainerInstances"
                  - "ecs:ListClusters"
                  - "ecs:RegisterTaskDefinition"
                  - "s3:*"
                  - "batch:*"
                Resource: "*"
              -
                Effect: "Allow"
                Action:
                  - "ecs:*"
                  - "s3:*"
                  - "batch:*"
                Resource: "*"

如您所见,我已尝试在这些策略中提供足够多的权限,这已经是一种不好的做法,但我仍然无法使其承担角色。任何帮助将不胜感激。

编辑:我已经检查过,我可以看到AWSBatchServiceRole,我已经添加了AWSBatchServiceRoleAWSBatchFullAccess 权限,在Trust Relationship 中,我确实有Sts:AssumeRole。这是来自Trust Relationship 的 JSON:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "batch.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

【问题讨论】:

  • AWSBatchServiceRole 是否包含正确的承担角色策略/信任关系? docs.aws.amazon.com/batch/latest/userguide/…
  • 刚刚检查过,是的,我确实有这个角色,但它是“AWS Managed”策略的默认策略和默认权限。
  • 而您的帐户 id 实际上是错误消息 402726478692 中的那个?或者你想跨账户做点什么?
  • 是的,它是同一个ID,我没有尝试跨账户甚至跨区域做任何事情。这一切都在同一个地区,在同一个帐户下。更新了问题,提供了有关我要实现的目标的更多信息。

标签: amazon-web-services yaml amazon-cloudformation aws-cloudformation-custom-resource assume-role


【解决方案1】:

我的一个朋友想通了,它奏效了。这是一个愚蠢的错误。

arn:aws:iam::${AWS::AccountId}:role/service-role/AWSBatchServiceRole 更改为arn:aws:iam::${AWS::AccountId}:role/AWSBatchServiceRole 并且有效。

service-role/ 不是必需的,至少现在不是。

【讨论】:

    猜你喜欢
    • 2014-03-24
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 2021-05-16
    • 1970-01-01
    相关资源
    最近更新 更多