无法使用 Boto3 创建 ECS 任务定义,但可以在控制台中使用

问题描述 投票:0回答:1

我正在使用 AWS 学习者实验室,并尝试使用 CLI 和 Python 进行一些实验。
我正在尝试为 ECS 创建任务定义。当我在 AWS 控制台中执行此操作时,它工作得很好。

但是如果我像下面这样使用 Boto3 尝试它,我会收到以下错误消息:

botocore.errorfactory.AccessDeniedException: An error occurred (AccessDeniedException) when calling the RegisterTaskDefinition operation: User: arn:aws:sts::744663755802:assumed-role/voclabs/user2451565=Joseph_Ahmed is not authorized to perform: ecs:RegisterTaskDefinition on resource: arn:aws:ecs:us-east-1:744663755802:task-definition/testtask:* with an explicit deny in an identity-based policy
from boto3 import client
import json

ECS_client = client("ecs", region_name='us-east-1')

res = ECS_client.register_task_definition(
    family='testtask',
    networkMode='awsvpc',
    taskRoleArn='arn:aws:iam::744663755802:role/LabRole',
    executionRoleArn='arn:aws:iam::744663755802:role/LabRole',
    containerDefinitions=[
        {
        },
    ],
    requiresCompatibilities=[
        'FARGATE'
    ],
    cpu='.5 vCPU',
    memory='1 GB',
    runtimePlatform={
        'cpuArchitecture': 'X86_64',
        'operatingSystemFamily': 'LINUX'
    }
)


print(json.dumps(res, indent=4))

我正在使用的学习者实验室是:https://awsacademy.instruction.com/(如果有帮助的话)。关于 ecs 服务的唯一想法是:
亚马逊弹性容器服务(ECS)

  • 支持的实例类型:nano、micro、small、medium、large。

  • 温馨提示:

    • 创建集群时:为避免权限错误(无法创建角色),如果尝试创建使用 EC2 实例作为基础设施(而不是 Fargate)的集群,请先使用 EC2 控制台创建 Auto Scaling 组,然后创建 ECS 集群时选择使用现有的 Auto Scaling 组。

      • 如果您看到消息“无法承担 ECS 服务链接角色”,请选择后退按钮,然后重试。如果您的帐户中尚不存在服务相关角色,有时会发生这种情况。
    • 创建任务定义时:为避免权限错误,请务必设置LabRole为任务角色和任务执行角色。

python amazon-web-services boto3 amazon-ecs aws-cli
1个回答
0
投票

要解决使用 Boto3 创建 ECS 任务定义时出现的 AccessDeniedException,请按照以下步骤操作:

  1. 检查 IAM 角色权限

    • 确保 LabRole 具有必要的权限。添加此策略: enter image description here
  2. 验证信任关系

    • 确保
      LabRole
      的信任关系允许ECS承担该角色: enter image description here
  3. 检查是否显式拒绝

    • 确保没有任何策略附加到对 ecs:RegisterTaskDefinition 有显式拒绝的用户、组或角色。
© www.soinside.com 2019 - 2024. All rights reserved.