[英]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.