You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CDK部署偶现AWS CodeDeploy无IAM角色权限问题求助

解决CDK销毁后重新部署CodeDeploy角色权限问题

执行cdk destroy后再次运行cdk deploy时,常遇到如下错误:

AWS CodeDeploy does not have the permissions required to assume the role <ARN_OF_CODEDEPLOY_ROLE>

确认对应的IAM角色已被正常删除,但问题依然出现。相关CDK代码如下:

const codedeployApplication = new codedeploy.ServerApplication (
    this, 
    "CodeDeployApplication", 
    { applicationName: "applicationName" }
);

const codedeployRole = new iam.Role (
    this, 
    "CodeDeployRole", 
    { 
        roleName: "roleName",
        assumedBy: new iam.ServicePrincipal("codedeploy.amazonaws.com"),
        managedPolicies: [ iam.ManagedPolicy.fromAwsManagedPolicyName("service-role/AWSCodeDeployRole") ],
        inlinePolicies: {
            assumeRolePolicy: new iam.PolicyDocument ({
                statements: [
                    new iam.PolicyStatement (
                        {
                            effect: iam.Effect.ALLOW,
                            actions: [ "sts:AssumeRole" ],
                            resources: [ "*" ]
                        }
                    )
                ]
            })
        }
    }
);

const deploymentGroup = new codedeploy.ServerDeploymentGroup (
    this, 
    "DeploymentGroup", 
    {
        application: codedeployApplication,
        deploymentGroupName: "codedeploy-dg",
        role: codedeployRole,
        installAgent: true,
        ec2InstanceTags: new codedeploy.InstanceTagSet (
            { "Name": ["EC2_NAME"] }
        ),
        deploymentConfig: codedeploy.ServerDeploymentConfig.ALL_AT_ONCE
    }
);

问题原因

  1. AWS服务最终一致性:角色销毁后,CodeDeploy服务端的缓存未及时更新,重新创建同名角色时,CodeDeploy仍尝试使用旧的缓存信息进行权限校验,导致失败。
  2. 冗余的信任策略配置:代码中手动添加的inlinePolicies.assumeRolePolicy会覆盖assumedBy自动生成的信任策略,可能导致信任关系配置冲突或无效。

解决思路

1. 清理冗余的信任策略配置

assumedBy: new iam.ServicePrincipal("codedeploy.amazonaws.com")已经会自动生成正确的信任策略,无需手动添加inlinePolicies。修改后的角色代码:

const codedeployRole = new iam.Role (
    this, 
    "CodeDeployRole", 
    { 
        roleName: "roleName",
        assumedBy: new iam.ServicePrincipal("codedeploy.amazonaws.com"),
        managedPolicies: [ iam.ManagedPolicy.fromAwsManagedPolicyName("service-role/AWSCodeDeployRole") ]
    }
);

2. 避免使用固定角色名称

固定roleName会导致销毁后重新创建的角色ARN相同,触发服务端缓存冲突。建议:

  • 移除roleName参数,让CDK自动生成唯一的角色名称;
  • 或者在名称中加入栈标识符,比如${this.stackName}-CodeDeployRole,确保每次部署的角色都是全新的。

3. 等待缓存过期后重试

如果必须使用固定名称,执行cdk destroy后等待5-10分钟,给AWS服务足够的时间同步角色销毁状态,再执行cdk deploy。

4. 手动同步信任策略

若等待后问题仍存在,可手动进入IAM控制台:

  1. 找到重新创建的CodeDeploy角色;
  2. 进入"信任关系"页面,点击"编辑信任策略";
  3. 无需修改内容,直接点击"更新策略",强制同步服务端缓存。

内容的提问来源于stack exchange,提问作者Jordan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 23:27:54