Развертывание CodePipeline в Beanstalk завершается неудачно, несмотря на правильную настройку IAM - PullRequest
1 голос
/ 29 февраля 2020

Context

Сначала это был проект CodeStar, а затем он перерос в нечто большее. Мы повторно использовали приложение Beanstalk для создания сред stage и prod и сохранили изначально созданную среду dev как есть.

Мы обновили CodePipeline для развертывания в наших новых средах с использованием "Elasti c Beanstalk "в качестве поставщика. (Хотя CodeStar настроил развертывание с использованием CloudFormation для среды, которую он автоматически предоставил в приложении Beanstalk.)

Проблема

Развертывание не выполнено из-за ошибки, в которой упоминается autoscaling:DescribeAutoScalingGroups авторизован для выполнения ролью IAM CodePipeline.

Вот полное сообщение об ошибке, отображаемое в CodePipeline:

Недостаточные разрешения

Развертывание не удалось.

Предоставленная роль не имеет достаточных разрешений: Пользователь: arn: aws: sts :: xxx: предполагаемая роль / CodeStarWorker-xxx-on-cod-ToolChain / yyy не авторизован для выполнения: autoscaling: DescribeAutoScalingGroups (Service : AmazonAutoScaling; код состояния: 403; код ошибки: AccessDenied; идентификатор запроса: 905ee6ef-d75d-4cf8-b5f3-e6b16a5f6477)

Служба: AmazonAutoScaling, сообщение: пользователь: arn: aws: sts :: xxx : предполагаемая роль / CodeStarWorker-xxx-on-cod-ToolChain / yyy не разрешено выполнять: автоматическое масштабирование: DescribeAutoScalingGroups

Fai привел к развертыванию приложения.

Служба: AmazonAutoScaling, сообщение: пользователь: arn: aws: sts :: xxx: предполагаемая роль / CodeStarWorker-xxx-on-cod-ToolChain / yyy не авторизован для выполнения : autoscaling: DescribeAutoScalingGroups

IAM

Вот содержание CodePipeline (он же CodeStarWorker-xxx-on-cod-ToolChain):

enter image description here

И вот связанная Граница разрешений (первоначально сгенерированная CodeStar и в конечном итоге обновленная нами, чтобы попытаться заставить все это работать):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ssm:GetParameters",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ssm:ResourceTag/awscodestar:projectArn": "arn:aws:codestar:yyy:xxx:project/xxx-on-cod"
                }
            }
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:CreateBucket",
                "iam:PassRole",
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:s3:::aws-codestar-yyy-xxx/xxx-on-cod/ssh/*",
                "arn:aws:s3:::elasticbeanstalk-yyy-xxx/*",
                "arn:aws:s3:::elasticbeanstalk-yyy-xxx",
                "arn:aws:s3:::awscodestar-remote-access-yyy/*",
                "arn:aws:s3:::awscodestar-remote-access-signatures-yyy/*",
                "arn:aws:iam::xxx:role/CodeStarWorker-xxx-on-cod-CloudFormation",
                "arn:aws:secretsmanager:yyy:xxx:secret:xxx"
            ]
        },
        {
            "Sid": "VisualEditor4",
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "codebuild:*",
                "ec2:Describe*",
                "ec2:*SecurityGroup*",
                "iam:PassRole"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "VisualEditor14",
            "Effect": "Allow",
            "Action": [
                "logs:*"
            ],
            "Resource": [
                "arn:aws:logs:yyy:xxx:log-group:/aws/elasticbeanstalk/*"
            ]
        },
        {
            "Sid": "VisualEditor6",
            "Effect": "Allow",
            "Action": [
                "elasticbeanstalk:CreateApplicationVersion",
                "elasticbeanstalk:UpdateEnvironment"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "VisualEditor5",
            "Effect": "Allow",
            "Action": [
                "autoscaling:DescribeAutoScalingGroups",
                "autoscaling:SuspendProcesses",
                "autoscaling:ResumeProcesses",
                "autoscaling:DescribeScalingActivities"
            ],
            "Resource": [
                "arn:aws:autoscaling:yyy:xxx:autoScalingGroup:*"
            ]
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "sns:Get*",
                "sns:Publish",
                "logs:DescribeLogGroups",
                "cloudtrail:StartLogging",
                "lambda:ListFunctions",
                "cloudtrail:CreateTrail",
                "sns:Subscribe",
                "xray:Put*",
                "logs:CreateLogGroup",
                "logs:PutLogEvents",
                "sns:List*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": "*",
            "Resource": [
                "arn:aws:cloudformation:yyy:xxx:stack/awseb-e-mjdwv9ptcz-stack/2d588c80-5284-11ea-a1d4-068f4db663b8",
                "arn:aws:cloudformation:yyy:xxx:stack/awseb-e-mjdwv9ptcz-stack/2d588c80-5284-11ea-a1d4-068f4db663b8/*",
                "arn:aws:cloudformation:yyy:xxx:stack/awscodestar-xxx-on-cod-*",
                "arn:aws:codebuild:yyy:xxx:project/xxx-on-cod",
                "arn:aws:codecommit:yyy:xxx:xxx-on-codecommit",
                "arn:aws:codepipeline:yyy:xxx:xxx-on-cod-Pipeline",
                "arn:aws:elasticbeanstalk:yyy:xxx:*/xxx-on-cod*",
                "arn:aws:s3:::aws-codestar-yyy-xxx-xxx-on-cod-pipe",
                "arn:aws:s3:::aws-codestar-yyy-xxx-xxx-on-cod-pipe/*",
                "arn:aws:s3:::elasticbeanstalk-yyy-xxx/resources/environments/e-fp3mwptx9q",
                "arn:aws:s3:::elasticbeanstalk-yyy-xxx/resources/environments/e-fp3mwptx9q/*",
                "arn:aws:s3:::elasticbeanstalk-yyy-xxx/resources/environments/e-mjdwv9ptcz",
                "arn:aws:s3:::elasticbeanstalk-yyy-xxx/resources/environments/e-mjdwv9ptcz/*"
            ]
        }
    ]
}

Трубопровод

enter image description here

Как вы можете видеть, у нас есть два CodeBuild, потому что первый - это тот, который установлен CodeStar, и второй - тот, который слегка изменяет выходной артефакт так, чтобы он был в правильном формате для прямой загрузки в Beanstalk.

Успешное развертывание - это то, что из CodeStar (с использованием провайдера CloudFormation), следующее это сбой (с использованием Beanstalk Provider).

CodeStar CodeBuild (buildspec.yml)

Выходной артефакт используется развертыванием CloudFormation:

version: 0.2

phases:
  install:
    runtime-versions:
      java: openjdk8
    commands:
      # Upgrade AWS CLI to the latest version
      - pip install --upgrade awscli
  pre_build:
    commands:
      - cd $CODEBUILD_SRC_DIR
      - mvn clean compile test
  build:
    commands:
      - mvn war:exploded
  post_build:
    commands:
      - cp -r .ebextensions/ target/ROOT/
      - aws cloudformation package --template template.yml --s3-bucket $S3_BUCKET --output-template-file template-export.yml
      # Do not remove this statement. This command is required for AWS CodeStar projects.
      # Update the AWS Partition, AWS Region, account ID and project ID in the project ARN on template-configuration.json file so AWS CloudFormation can tag project resources.
      - sed -i.bak 's/\$PARTITION\$/'${PARTITION}'/g;s/\$AWS_REGION\$/'${AWS_REGION}'/g;s/\$ACCOUNT_ID\$/'${ACCOUNT_ID}'/g;s/\$PROJECT_ID\$/'${PROJECT_ID}'/g' template-configuration.json
artifacts:
  type: zip
  files:
    - target/ROOT/**/*
    - .ebextensions/**/*
    - 'template-export.yml'
    - 'template-configuration.json'

Наш CodeBuild (buildspec-two.yml)

Используется выходной артефакт в результате (сбойного) развертывания Beanstalk:

# Everything up to that point is the very same as the code from above

artifacts:
  type: zip
  base-directory: 'target/ROOT'
  files:
    - ./**/*
    - .ebextensions/**/*

Заключение

Я не представляю, как может произойти сбой развертывания, поскольку как в Permission Boundary, так и в базовой роли IAM упоминается, что autoscaling:DescribeAutoScalingGroups.

Более того, развертывание в среде CodeStar работает нормально, но эта конкретная среда, которая не проходит развертывание, происходит из точной копии (с точки зрения конфигурации).

Есть идеи?

(Более того, исходная среда dev, так же как и вновь созданная среда stage, даже не имеет связанной с ней AutoScalingGroup ... поэтому я понятия не имею, почему развертывание даже пытается чтобы сделать это.)

(И я заглянул в S3, чтобы убедиться, что оба развертываемых артефакта имеют одинаковую структуру.)

1 Ответ

1 голос
/ 29 февраля 2020

Это сложный вопрос для устранения неполадок, но из того, что я вижу, есть несколько потенциальных проблем. Одним из них является то, что действие «DescribeAutoScalingGroups» не поддерживает разрешение на уровне ресурса, поэтому оно должно быть звездочкой в ​​качестве ресурса, а не ресурса arn. Вы можете попробовать просто удалить:

"Resource": [
                "arn:aws:autoscaling:yyy:xxx:autoScalingGroup:*"
            ]

на границе разрешений и заменить его на

"Resource": [
                "*"
            ]

и посмотреть, решит ли это проблему.

Во-вторых, роль AWSCodeDeployFullAccess не содержит действие «DescribeAutoScalingGroups» в политике. Возможно, вам придется заменить и / или добавить «AWSCodeDeployRole», чтобы иметь возможность использовать это действие. Это может решить эту проблему.

Проекты CodeStar довольно закрыты, когда речь идет о разрешениях, поэтому расширение проекта может оказаться довольно сложным. Проверьте здесь:

https://docs.aws.amazon.com/codestar/latest/userguide/add-iam-role.html

и здесь:

https://docs.aws.amazon.com/codestar/latest/userguide/adh-policy-examples.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...