繁体   English   中英

没有任务角色的 AWS CDK ECS 任务定义

[英]AWS CDK ECS Task Definition Without Task Role

在 AWS CDK v2 中,ECS TaskDefinition L2 构造具有可选属性 TaskRole,如果未指定,则 CDK 默认行为是创建任务角色。 但是我不想为此资源设置任务角色,AWS 实际上不需要它 - 没有此属性的任务定义可以 function。 我如何在 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,
            },
        })

在 CDK 中,这是必要的,因为 L2 构造实现了Grantable接口,其方法取决于角色的存在。 从技术上讲,您可以覆盖任何节点上的几乎任何属性,这将使您获得这种效果,但这可能会导致难以追踪错误。

此外,如果没有为任务定义指定角色,您的任务将从集群中的 EC2 实例角色继承权限,这几乎肯定不是您想要的行为。 如果那您想要的行为,您最好将角色显式定义为与 EC2 集群中使用的角色相同。

或者,如果您打算让您的任务没有权限,您最好的选择是要么坚持默认行为,要么显式定义一个没有附加策略的角色,然后(可选)传递角色.withoutPolicyUpdates上的 .withoutPolicyUpdates 返回的 object以防止它被赠款更新。

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(),
            // ...
            },
        })

您可以使用tryRemoveChild escape hatch方法按 ID 删除任意子构造:

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

诀窍是识别构造 ID。 有时您需要在源代码中查找它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM