次のリソースを含むcloudformationスタックを実行しようとしています。
スタックを実行しようとすると、次のエラーで失敗します。
arn:aws:iam :: ACCOUNT_ID:role/CodePipelineRoleは、ロールarn:aws:iam :: ACCOUNT_ID:role/CodePipelineRole(サービス: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にしようとしているように見えることです。ここで何が起こっているのか理解できません。
そして、ポリシーのアクションを*に設定すると、機能します!どのようなアクセス許可が不足しているのかわかりません。
ありがとう
これは、作成したロール、つまりCodePipelineRoleの信頼関係に関係しています。
次に、信頼関係を編集してコードパイプラインを含めます
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"codeformation.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}```
コードビルドの役割が役割を引き受けられなかった何らかの理由で、EKSで同様の問題が発生しました。十分なアクセス権を持つユーザーを作成し、以下を設定することで解決しました。
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
クラウドビルドの環境セクションからのデフォルトの環境変数としての環境変数:
https://docs.aws.Amazon.com/cli/latest/userguide/cli-configure-envvars.html
背後では、AWSサービスが何らかの種類のロールキャッシュを保持しているようです。ロールを作成し、ポリシーをアタッチして、新しいCodeBuildプロジェクトを順番に作成しようとすると、CodeBuildはロールを見つけられないため、不正なエラーを出します。これは、(404ではなく)存在しないバケットでアクセス禁止エラーが発生するのと似ています。スタックを他の2つのスタックに分離する場合:最初にロールを作成し、次にCodeBuildを作成すると、機能します。 CLIコマンドがすぐに機能する理由がわかりません。
追加してみてくださいsts:AssumeRole
をアクションのリストに追加します。
https://docs.aws.Amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html
乾杯