Go语言 无任务角色的AWS CDK ECS任务定义

fslejnso  于 2023-01-18  发布在  Go
关注(0)|答案(2)|浏览(110)

在AWS CDK v2中,ECS TaskDefinition L2构造具有可选属性TaskRole,如果未指定,则CDK默认行为是创建任务角色。但是,我不希望为此资源设置任务角色。AWS中实际上不需要此属性-任务定义可以在没有此属性的情况下运行。我如何在CDK中管理此属性?我无法'我看不出有什么方法可以取消设置任务角色,或者一开始就不生成任务角色。为此,我需要返回到L1构造吗?我配置:

taskDefinition := awsecs.NewEc2TaskDefinition(stack, jsii.String(deploymentEnv+service.Tag+"TaskDef"), &awsecs.Ec2TaskDefinitionProps{
            Family:      jsii.String(deploymentEnv + service.Tag), 
            NetworkMode: awsecs.NetworkMode_BRIDGE,
            //TaskRole: what can i do here to fix this
            Volumes: &[]*awsecs.Volume{
                &efs_shared_volume,
            },
        })
2g32fytz

2g32fytz1#

可以使用tryRemoveChildescape hatch方法按ID删除任意子构件:

taskDefinition.Node().TryRemoveChild(jsii.String("TaskRole"))

诀窍在于标识构造ID。有时需要在源代码中查找它。

n8ghc7c1

n8ghc7c12#

在CDK中,这是必要的,因为L2构造实现了Grantable接口,并且其方法依赖于角色的存在。* 从技术上讲 *,您可以覆盖任何节点上的几乎任何属性,从而获得这种效果,但这可能会导致难以跟踪错误。
此外,如果没有为任务定义指定角色,您的任务将从集群中的EC2示例角色继承权限,这几乎肯定不是您想要的行为。如果这是您想要的行为,您最好显式定义角色,使其与EC2集群中使用的角色相同。
或者,如果您的意图是使任务具有 no 权限,则最好的办法是坚持默认行为或显式定义一个没有附加策略的角色,然后(可选地)在角色对象上传递.withoutPolicyUpdates返回的对象,以防止它被赠款更新。

const role = new iam.Role(this, 'Role', {
  assumedBy: new iam.ServicePrincipal('ecs-tasks.amazonaws.com'),
  description: 'Empty ECS task role with no permissions',
});

// ...

taskDefinition := awsecs.NewEc2TaskDefinition(stack, jsii.String(deploymentEnv+service.Tag+"TaskDef"), &awsecs.Ec2TaskDefinitionProps{
            // ...
            TaskRole: role.withoutPolicyUpdates(),
            // ...
            },
        })

相关问题