我正在尝试执行一个包含以下资源的cloudformation堆栈:
在尝试执行堆栈时,它失败并显示以下错误:
arn:aws:iam :: ACCOUNT_ID:role / CodePipelineRole无权在角色arn:aws:iam :: ACCOUNT_ID:role / CodePipelineRole上执行AssumeRole(服务:AWSCodePipeline;状态代码:400;错误代码:InvalidStructureException;请求ID:7de2b1c6-a432-47e6-8208-2c0072ebaf4b)
我使用托管策略创建了该角色,但是我已经尝试使用常规策略,但这两种方法都不起作用。
这是角色策略:
CodePipelinePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
Description: 'This policy grants permissions to a service role to enable Codepipeline to use multiple AWS Resources on the users behalf'
Path: "/"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Resource: "*"
Effect: "Allow"
Condition: {}
Action:
- autoscaling:*
- cloudwatch:*
- cloudtrail:*
- cloudformation:*
- codebuild:*
- codecommit:*
- codedeploy:*
- codepipeline:*
- ec2:*
- ecs:*
- ecr:*
- elasticbeanstalk:*
- elasticloadbalancing:*
- iam:*
- lambda:*
- logs:*
- rds:*
- s3:*
- sns:*
- ssm:*
- sqs:*
- kms:*
这是角色
CodePipelineRole:
Type: "AWS::IAM::Role"
Properties:
RoleName: !Sub ${EnvironmentName}-CodePipelineRole
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Action:
- 'sts:AssumeRole'
Effect: Allow
Principal:
Service:
- codepipeline.amazonaws.com
Path: /
ManagedPolicyArns:
- !Ref CodePipelinePolicy
最让我着迷的是,似乎CodePipelineRole试图将AssumeRole赋予自身。我不明白这里会发生什么。
当我将策略的操作设置为*时,它起作用了!我不知道可能会丢失哪些权限。
谢谢
答案 0 :(得分:1)
在后台,AWS服务似乎保留了某种角色缓存。如果您尝试扮演角色,附加策略并依次创建一个新的CodeBuild项目,则CodeBuild将出现未经授权的错误,因为它找不到该角色。这类似于在不存在的存储桶(而不是404)上获得禁止的访问错误。如果将堆栈分为两个其他堆栈:首先创建角色,然后创建CodeBuild,则它会起作用。我不明白为什么CLI命令会立即生效。
答案 1 :(得分:0)
尝试将sts:AssumeRole
添加到“动作”列表中。
https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html
欢呼
答案 2 :(得分:0)
与您创建的角色(即CodePipelineRole)的信任关系有关
然后编辑信任关系以包含代码管道
var requestContent = new PushStreamContent(async (outputStream, httpContext, transportContext) =>
{
await JsonSerializer.SerializeAsync(outputStream, item);
});
requestContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var response = await _client.PutAsync(path, requestContent);
答案 3 :(得分:0)
由于某些原因,代码构建角色无法担任角色,因此我对EKS也有类似的问题。我通过创建具有足够访问权限的用户并进行设置来解决了该问题:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
env vars是云构建中环境部分中的默认env vars:
https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html
答案 4 :(得分:0)
我敢打赌,您在 CodePipeline 的 Source 操作中指定了 RoleArn。尝试删除它。
document
最后一行是在我的例子中出现同样错误的原因。