web-dev-qa-db-ja.com

AWS Cloudformationロールには、ロールでAssumeRoleを実行する権限がありません

次のリソースを含む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にしようとしているように見えることです。ここで何が起こっているのか理解できません。

そして、ポリシーのアクションを*に設定すると、機能します!どのようなアクセス許可が不足しているのかわかりません。

ありがとう

8
jprivillaso

これは、作成したロール、つまりCodePipelineRoleの信頼関係に関係しています。

  1. IAMのロールに移動します
  2. [信頼関係]タブを選択します...
  3. 次に、信頼関係を編集してコードパイプラインを含めます

      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "codeformation.amazonaws.com"
            ]
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }```
    
1
OneMoreNerd

コードビルドの役割が役割を引き受けられなかった何らかの理由で、EKSで同様の問題が発生しました。十分なアクセス権を持つユーザーを作成し、以下を設定することで解決しました。

AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY

クラウドビルドの環境セクションからのデフォルトの環境変数としての環境変数:

https://docs.aws.Amazon.com/cli/latest/userguide/cli-configure-envvars.html

0
Parth Mehta

背後では、AWSサービスが何らかの種類のロールキャッシュを保持しているようです。ロールを作成し、ポリシーをアタッチして、新しいCodeBuildプロジェクトを順番に作成しようとすると、CodeBuildはロールを見つけられないため、不正なエラーを出します。これは、(404ではなく)存在しないバケットでアクセス禁止エラーが発生するのと似ています。スタックを他の2つのスタックに分離する場合:最初にロールを作成し、次にCodeBuildを作成すると、機能します。 CLIコマンドがすぐに機能する理由がわかりません。

0

追加してみてくださいsts:AssumeRoleをアクションのリストに追加します。

https://docs.aws.Amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html

乾杯

0
david24365