使用AWS JavaScript SDK创建CodeBuild项目时遇sts:AssumeRole权限错误
问题分析与解决方案
可能遗漏的配置项
你遇到的InvalidInputException本质是两个层面的权限问题,结合你的配置,大概率是以下其中一点:
- 当前执行JS代码的身份缺少
iam:PassRole权限
你用来运行JS SDK的AWS凭证(比如本地~/.aws/credentials里的账号,或者ECS/EC2挂载的角色)需要被允许将MYROLE传递给CodeBuild服务。即使MYROLE本身的信任关系正确,如果你的身份没有iam:PassRole权限,AWS会直接拒绝请求。
给当前执行身份添加一条自定义策略:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::xxxxxxxx:role/MYROLE", "Condition": { "StringEquals": { "iam:PassedToService": "codebuild.amazonaws.com" } } } ] } - IAM角色配置未生效
IAM策略或信任关系的修改有时候会有1-5分钟的延迟,如果你刚修改完就测试,建议等几分钟再重试。 - 角色ARN填写错误
仔细核对JS代码中指定的roleArn是否和实际角色的ARN完全一致,包括账号ID、角色名,有没有大小写或拼写错误。 - 角色存在权限边界限制
如果MYROLE设置了权限边界(Permission Boundary),需要确保边界策略允许sts:AssumeRole动作被codebuild.amazonaws.com调用,检查边界策略是否包含相关允许规则。
能用JS SDK创建CodeBuild项目吗?
完全可以,下面是基于AWS SDK v3的完整示例(推荐使用v3,体积更小、模块化):
第一步:安装依赖
npm install @aws-sdk/client-codebuild
第二步:示例代码
const { CodeBuildClient, CreateProjectCommand } = require("@aws-sdk/client-codebuild"); // 初始化CodeBuild客户端(本地开发会自动读取~/.aws/credentials或环境变量) const client = new CodeBuildClient({ region: "us-east-1" }); // 替换成你的AWS区域 async function createCodeBuildProject() { try { const input = { name: "MyDemoBuildProject", // 自定义项目名称 description: "Demo project created via AWS JS SDK", source: { type: "GITHUB", // 可替换为S3、BITBUCKET等源类型 location: "https://github.com/your-username/your-repo.git", // 替换为你的代码仓库地址 buildspec: "buildspec.yml" // 仓库根目录的构建配置文件,若无则可省略 }, artifacts: { type: "NO_ARTIFACTS" // 不需要输出构建产物时使用,也可设置为S3类型 }, environment: { type: "LINUX_CONTAINER", image: "aws/codebuild/standard:6.0", // 官方标准构建镜像,可按需替换 computeType: "BUILD_GENERAL1_SMALL" }, serviceRole: "arn:aws:iam::xxxxxxxx:role/MYROLE" // 替换为你的目标角色ARN }; const command = new CreateProjectCommand(input); const response = await client.send(command); console.log("项目创建成功:", response.project); } catch (error) { console.error("创建失败:", error); } } // 执行创建函数 createCodeBuildProject();
备注
- 若使用AWS SDK v2,代码结构类似,但导入方式和客户端初始化逻辑不同,核心配置参数完全一致。
- 确保代码执行环境有合法的AWS凭证:本地开发可通过
aws configure命令配置,生产环境可通过挂载IAM角色实现。
内容的提问来源于stack exchange,提问作者Hugo
相关产品推荐
相关产品推荐

