Ошибка AWS: доступ запрещен в CodeDeploy после сборки Jenkins

Я установил Jenkins на экземпляре EC2, который запускает сборку, когда изменения отправляются в основную ветку в github. После прохождения сборки на jenkins запускается процесс архивирования исходного кода и помещения его в конкретную корзину S3. Затем приложение CodeDeploy, о котором знает Дженкинс в конфигурации, запускает развертывание, чтобы попытаться получить исходный код ZIP из S3, но выдает ошибку Доступ запрещен. Похоже, что у роли IAM нет прав доступа и разрешений на загрузку ZIP с S3.

Моя проблема заключается в том, чтобы понять роль IAM, ее связь с пользователем Jenkins и роль службы IAM? Как мне настроить разрешения и кто должен их получать? Пожалуйста, посоветуйте и помогите разобраться в этом.


person nael    schedule 06.12.2016    source источник


Ответы (1)


Обычно в настройке CodeDeploy есть два сценария: часть, которая «создает» развертывание (обычно ваш сервер CI / агент сборки), и агент CodeDeploy, который запускается на целевом экземпляре (ах) и выполняет фактическое развертывание. Первая половина, по сути, проталкивается в CodeDeployment, а вторая половина - это вытягивает из него ... вот как мне нравится это визуализировать.

Для CI-серверов / агентов сборки они должны иметь роль IAM с разрешениями, подобными приведенным ниже ... Это позволяет агенту сборки (1) получить доступ к корзине S3, которую вы указали для развертывания, и (2) получить доступ к службе CodeDeploy для создания доработки и др.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        },        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::YourDeploymentBucket"
        },
        {
            "Effect": "Allow",
            "Action": [
                "codedeploy:*"
            ],
            "Resource": "*"
        }
    ]
}

В целевых экземплярах EC2 они должны иметь что-то вроде этого ... Это дает службе агента CodeDeploy (1) доступ к корзине S3 для извлечения ревизии и (2) доступ ко всем общим корзинам развертывания кода, чтобы агент может обновиться сам. Конечно, эти экземпляры должны соответствовать всем остальным критериям ... как правило, им нужна роль IAM и должен быть установлен агент развертывания кода.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::YourDeploymentBucket/*",
                "arn:aws:s3:::aws-codedeploy-us-east-1/*",
                "arn:aws:s3:::aws-codedeploy-us-west-1/*",
                "arn:aws:s3:::aws-codedeploy-us-west-2/*",
                "arn:aws:s3:::aws-codedeploy-ap-northeast-1/*",
                "arn:aws:s3:::aws-codedeploy-ap-northeast-2/*",
                "arn:aws:s3:::aws-codedeploy-ap-south-1/*",
                "arn:aws:s3:::aws-codedeploy-ap-southeast-1/*",
                "arn:aws:s3:::aws-codedeploy-ap-southeast-2/*",
                "arn:aws:s3:::aws-codedeploy-eu-central-1/*",
                "arn:aws:s3:::aws-codedeploy-eu-west-1/*",
                "arn:aws:s3:::aws-codedeploy-sa-east-1/*"
            ]
        }
    ]
}

Как вы назначаете эти разрешения, зависит от вас ... если ваши агенты сборки являются экземплярами EC2, было бы лучше назначить их как политику, прикрепленную к роли IAM, связанной с экземпляром (-ами). Для целевых машин развертывания вы должны сделать то же самое ... создать политику и назначить ее ролям IAM, связанным с экземплярами, на которые вы хотите настроить таргетинг.

person Brett Green    schedule 19.12.2016