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

使用AWS CDK -r选项通过角色部署时遇STS权限错误问询

问题分析与解决方案

核心问题原因

你遇到的错误是因为:

  • CDK的-r(--role-arn)选项指定的是CloudFormation部署角色,仅用于让CloudFormation通过该角色执行资源的创建/更新操作,不会自动替换你本地AWS会话的凭证来执行代码中的其他角色切换逻辑。
  • 你的CDK代码中存在切换到barRole的逻辑,这段逻辑执行时使用的是你本地的用户凭证(fooUser),而非指定的fooRole。由于barRole的信任关系仅允许root用户切换,fooUser没有权限,因此报错。
  • 你在IAM模拟器中测试fooRole切换barRole成功,是因为fooRole拥有AdministratorAccess权限且属于账号root管辖范围,但实际执行时发起请求的是fooUser,而非fooRole。

解决方案

方法1:修改barRole信任关系,允许fooUser切换

更新barRole的信任策略,将fooUser加入可信主体:

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::000000000000:root",
                    "arn:aws:iam::000000000000:user/fooUser"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

方法2:先本地切换到fooRole再部署

如果不想修改barRole的信任关系,可以先切换到fooRole的凭证再执行部署:

  1. 获取fooRole的临时凭证:
aws sts assume-role --role-arn arn:aws:iam::000000000000:role/fooRole --role-session-name cdk-deploy-session
  1. 设置环境变量(替换为返回的实际值):
export AWS_ACCESS_KEY_ID="临时访问密钥ID"
export AWS_SECRET_ACCESS_KEY="临时私有访问密钥"
export AWS_SESSION_TOKEN="临时会话令牌"
  1. 执行CDK部署(无需-r选项):
cdk deploy

方法3:在CDK代码中指定使用部署角色切换barRole

如果代码需要切换barRole,可以配置它使用部署角色的凭证发起请求。例如在AWS SDK调用中显式传入fooRole的凭证,或通过CDK的Role.fromRoleArn结合credentialProvider指定凭证来源。

关于CDK -r选项的意义

-r选项的作用是指定CloudFormation部署角色,让CloudFormation通过该角色完成资源的生命周期管理,避免直接使用本地凭证执行高权限操作。但它不会覆盖本地会话的凭证,因此代码中主动发起的角色切换仍会使用你当前的用户凭证,这就是你看到错误的根本原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 12:54:27