Как да

Как да проверите шаблоните за CloudFormation с cfn-lint и cfn-nag

Как да проверите шаблоните за CloudFormation с cfn-lint и cfn-nag

Тази статия ръководи читателя как да валидира своя шаблон за облачна формация с помощта на инструменти cfn-lint и cfn-nag. Той също така обяснява как да създадете конвейер, който валидира шаблон на CloudFormation и го внедрява в CloudFormation.

Добра практика на DevOps е винаги да включва стъпка за проверка на нашия код / ​​шаблони за грешки в сигурността и синтаксиса. Също така, в нашия случай това ни спестява от повреда на тръбопровода поради грешки в синтаксиса.

Изисквания / предпоставки

buildspec.yml Съдържание

The buildspec.yml файлът, качен в нашия репо за CodeCommit, трябва да съдържа следния код.

Първо, той инсталира инструментите cfn-lint и cfn-nag. След това проверява шаблона CloudFormation с помощта на двата инструмента.

версия: 0.2 фази: инсталиране: runtime-версии: ruby: 2.6 команди: - pip3 install awscli --upgrade --quiet - pip3 install cfn-lint --quiet - apt-get install jq git -y -q - gem install cfn-nag build: команди: - cd ./ - cfn-lint ECR.yaml - cfn_nag_scan -i ECR.ямъл

Където ECR.ямъл трябва да бъде заменено с името на шаблона, който искате да проверите. Вашият шаблон за облачна информация трябва да бъде качен в хранилището на CodeCommit.

CloudFormation cfn-lint

Използването на cfn-lint позволява проверки на синтаксисни грешки на вашия шаблон за CloudFormation. За да проверите вашия шаблон, изпълнете командата по-долу. Ако приемем, че нашият шаблон е написан във формат YAML.

cfn-lint име на шаблон.ямъл

CloudFormation cfn-nag

Инструментът cfn-nag е за проверки на сигурността. Той изследва шаблона CloudFormation за всяка несигурна инфраструктура e.ж. групи за сигурност, която позволява достъп за всички. За да проверите вашия шаблон, изпълнете командата по-долу. Ако приемем, че нашият шаблон е написан във формат YAML.

cfn_nag_scan -i шаблон.ямъл

Създайте проект на CodeBuild

Ще създадем проект на CodeBuild, за да проверим и проверим нашия шаблон на CloudFormation, преди да го разположим в CloudFormation. Ще използваме шаблона по-долу CloudFormation, за да създадем нашия проект за изграждане.

AWSTemplateFormatVersion: "2010-09-09" Описание: "Шаблон за създаване на проект за изграждане на код" Параметри: ProjectName: Тип: String Описание: Името на проекта CodeBuild По подразбиране: Validate-CF-Template CodeBuildRole: Тип: Описание на низа: Името на ролята на buildbuild по подразбиране : CodeBuild-ValidateCF Ресурси: IAMRole: Тип: 'AWS :: IAM :: Role' Свойства: Описание: CodeBuild Validate CF Template RoleName: !Ref CodeBuildRole AssumeRolePolicyDocument: Версия: 2012-10-17 Изявление: - Ефект: Разрешаване на главница: Услуга: - изграждане на код.amazonaws.com Действие: - 'sts: AssumeRole' ManagedPolicyArns: - arn: aws: iam :: aws: policy / AWSCodeBuildAdminAccess - arn: aws: iam :: aws: policy / CloudWatchLogsFullAccess - arn: aws: iam :: aws: policy / AWSCodecommitF - arn: aws: iam :: aws: policy / AmazonS3FullAccess Етикети: - Ключ: "Проект" Стойност: "test-blog" - Ключ: "Околна среда" Стойност: "тест" - Ключ: "createdBy" Стойност: "Морийн Бараса "- Ключ:" Име "Стойност: !Ref CodeBuildRole BuildProject: Тип: AWS :: CodeBuild :: Свойства на проекта: Име: !Ref ProjectName Описание: изграждане на проект за валидиране на нашата CF Template ServiceRole: !Ref IAMRole Артефакти: Тип: NO_ARTIFACTS Околна среда: Тип: LINUX_CONTAINER ComputeType: BUILD_GENERAL1_SMALL Изображение: aws / codebuild / standard: 4.0 PrivilegedMode: true Източник: Местоположение: https: // git-codecommit.eu-central-1.amazonaws.com / v1 / repos / test-lint Тип: CODECOMMIT BuildSpec: buildspec.yml TimeoutInMinutes: 15 Етикети: - Ключ: „Проект“ Стойност: „test-blog“ - Ключ: „Околна среда“ Стойност: „тест“ - Ключ: „createdBy“ Стойност: „Морийн Бараса“ - Ключ: „Име“ Стойност: !Ref ProjectName Изходи: Проект: Описание: Проектът за изграждане на codebuild Стойност: !Ref ProjectName Export: Име: "BuildProject" Стойност: !Ref ProjectName 

Първо, шаблонът започва с осигуряване на роля на CodeBuild. След това създава проект за изграждане.

N / B: Потребителят трябва да персонализира шаблона. Имената на ресурси, свойства и тагове трябва да съответстват на специфичните изисквания на потребителя.

Когато стартирате проекта за изграждане, получавате изхода по-долу:

Изграждане на резултатите от проекта

След като шаблонът ни бъде потвърден, получаваме резултати, показващи всякакви грешки или предупреждения. Моят шаблон няма грешки в синтаксиса или сигурността, но имам 1 предупреждение.

В случай, че имаме неуспех, проектът за изграждане ще се провали. Например, ако имаме синтаксична грешка в нашия шаблон. Вижте резултатите по-долу.

Изграждане на неуспешни резултати от проекта

Създайте CodePipeline, за да внедрите шаблона в CloudFormation

Можем да добавим горния проект за изграждане към конвейер, за да разположим нашия шаблон за CloudFormation. Използвайте шаблона по-долу, за да създадете тръбопровод, който проверява вашия шаблон на CloudFormation и го изпраща в CloudFormation за предоставяне на ресурси.

AWSTemplateFormatVersion: "2010-09-09" Описание: "Шаблон за създаване на codepipeline" Параметри: PipelineName: Тип: Описание на низа: Името на CodePipeline по подразбиране: Стек за внедряване в CloudFormation: Тип: Описание на низа на облака по подразбиране: eu -central-1-create-ECR-Stack PipelineRole: Тип: Описание на низа: Име на ролята за внедряване на Cloudformation Име по подразбиране: codepipeline-ECR CFRole: Тип: Описание на низа: Име на ролята на CodePipeline По подразбиране: codepipeline-cloudformation CWEventsRole: Тип: Описание на низа: Името на ролята на събитията в Cloudwatch По подразбиране: codepipeline-cwevents Име на кофа: Тип: Описание на низа: vpc, където ще бъдат разположени нашите бастионни хостове. Частно шифроване на кофа: ServerSideEncryptionConfiguration: - ServerSideEncryptionByDefault: SSEAlgorithm: AES256 BucketName: !Ref BucketName PublicAccessBlockConfiguration: BlockPublicAcls: TRUE BlockPublicPolicy: TRUE IgnorePublicAcls: TRUE RestrictPublicBuckets: TRUE VersioningConfiguration: Status: Enabled Tags: - Key: "Project" Value: "test-blog" - Key: "Environment" Value: "Key:" Environment "Value "createdBy" Стойност: "Морийн Бараса" - Ключ: "Име" Стойност: !Ref BucketName CodePipelineRole: Тип: 'AWS :: IAM :: Role' Свойства: Описание: CodeBuild Validate CF Template RoleName: !Ref PipelineRole AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - "codepipeline.amazonaws.com "Action: - 'sts: AssumeRole' Policies: - PolicyName: root PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - 'iam: PassRole' Resource: '*' ManagedPolicyArns: - arn: aws : iam :: aws: policy / AWSCodePipeline_FullAccess - arn: aws: iam :: aws: policy / AWSCodeCommitFullAccess - arn: aws: iam :: aws: policy / AmazonS3FullAccess - arn: aws: iam :: aws: policy / AWSCodeccessAd arwmin : aws: iam :: aws: policy / AWSCodeDeployFullAccess - arn: aws: iam :: aws: policy / AWSCloudFormationFullAccess Етикети: - Ключ: „Проект“ Стойност: „test-blog“ - Ключ: „Околна среда“ Стойност: „тест“ - Ключ: "createdBy" Стойност: "Морийн Бараса" - Ключ: "Име" Стойност: !Ref PipelineRole CloudFormationRole: Тип: „AWS :: IAM :: Role“ Свойства: Описание: CodeBuild Validate CF Template RoleName: !Ref CFRole AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - "cloudformation.amazonaws.com "Action: - 'sts: AssumeRole' ManagedPolicyArns: - arn: aws: iam :: aws: policy / AmazonS3FullAccess - arn: aws: iam :: aws: policy / PowerUserAccess Tags: - Key:" Project "Value:" test -blog "- Key:" Environment "Стойност:" test "- Key:" createdBy "Стойност:" Maureen Barasa "- Key:" Name "Стойност: !Ref CFRole AmazonCloudWatchEventRole: Тип: „AWS :: IAM :: Role“ Свойства: Описание: CodeBuild Проверка на ролята на шаблона на CF Име на ролята: !Ref CWEventsRole AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - "events.amazonaws.com "Action: - 'sts: AssumeRole' Policies: - PolicyName: root PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - 'codepipeline: StartPipelineExecution' Resource: !Присъединете се към [", ['arn: aws: codepipeline:', !Препратка 'AWS :: Регион', ':', !Препратка 'AWS :: AccountId', ':', !Ref DeployPipeline]] Тагове: - Ключ: „Проект“ Стойност: „test-blog“ - Ключ: „Околна среда“ Стойност: „тест“ - Ключ: „createdBy“ Стойност: „Морийн Бараса“ - Ключ: „Име“ Стойност: !Ref CWEventsRole AmazonCloudWatchEventRule: Тип: AWS :: Събития :: Свойства на правилата: EventPattern: източник: - aws.codecommit детайлен тип: - „Регистриране на състоянието на CodeCommit“: - arn: aws: codecommit: eu-central-1: 429758582529: test-lint детайл: събитие: - referenceCreated - referenceUpdated referenceType: - reference referenceName: - master Targets: - Арн: !Присъединете се към [", ['arn: aws: codepipeline:', !Препратка 'AWS :: Регион', ':', !Препратка 'AWS :: AccountId', ':', !Ref DeployPipeline]] RoleArn: !GetAtt AmazonCloudWatchEventRole.Arn Id: codepipeline-DeployPipeline DeployPipeline: Тип: AWS :: CodePipeline :: Свойства на тръбопровода: RoleArn: !GetAtt CodePipelineRole.Име на Arn: !Ref PipelineName ArtifactStore: Местоположение: !Ref S3 Тип: S3 Етапи: - Име: Действия с източника: - Име: SourceAction ActionTypeId: Категория: Собственик на източника: AWS Версия: 1 Доставчик: CodeCommit OutputArtifacts: - Име: SourceArtifact Конфигурация: RepositoryName: test-lint BranchName: master PollForSourceChanges: false RunOrder: 1 - Име: Действия за изграждане: - Име: BuildAction InputArtifacts: - Име: SourceArtifact ActionTypeId: Категория: Собственик на компилация: Версия на AWS: 1 Доставчик: Конфигурация на CodeBuild: Име на проекта: !ImportValue BuildProject BatchEnabled: 'false' OutputArtifacts: [] RunOrder: 1 - Име: Действия за разполагане: - Име: DeployAction InputArtifacts: - Име: SourceArtifact ActionTypeId: Категория: Разполагане Собственик: AWS Версия: 1 Доставчик: CloudFormation Configuration: ActionMode: CREATEN : !Ref стек възможности: CAPABILITY_IAM, CAPABILITY_NAMED_IAM RoleArn: !GetAtt CloudFormationRole.Arn TemplatePath: "SourceArtifact :: ECR.yaml "RunOrder: 1 Тагове: - Ключ:" Проект "Стойност:" test-blog "- Ключ:" Околна среда "Стойност:" тест "- Ключ:" createdBy "Стойност:" Морийн Бараса "- Ключ:" Име "Стойност : !Ref PipelineName

Шаблонът започва с осигуряване на сегмент S3 за качване на нашите артефакти CodePipeline. След това създава три роли. Ролята CodePipeline, която трябва да поеме CodePipeline, ролята на CloudFormation, която ще се използва на етапа на разгръщане и ролята на CloudWatch събития. Ролята на събитията в CloudWatch се използва от правилото за събития в CloudWatch, за да следи за промени в хранилището на CodeCommit и да задейства тръбопровода за стартиране.

И накрая, шаблонът осигурява тръбопровода. Тръбопроводът има три етапа. Източник, изграждане и внедряване. Изходният етап качва код от CodeCommit. Етапът на изграждане използва проекта за изграждане, за да валидира нашия шаблон на CloudFormation. Накрая етапът на разгръщане разгръща шаблона в CloudFormation.

N / B: Потребителят трябва да персонализира шаблона. Имената на ресурси, свойства и тагове трябва да съответстват на специфичните изисквания на потребителя.

CodePipeline

Важни връзки

Други ръководства за AWS:

Щастлива сграда!!!

Инсталирайте и конфигурирайте OpenLDAP сървър на CentOS 8
Този урок ще обхване как да инсталирате OpenLDAP на CentOS 8. LDAP е лек протокол за удостоверяване на домейн. Това означава, че можете да използвате ...
Ограничете su достъпа до привилегировани акаунти в Linux
Как мога да огранича използването на командата su в Linux само до привилегировани акаунти като потребителска група Admin?. Помощната програма su изиск...
Как да инсталирам XAMPP сървър на CentOS 8
XAMPP е лесна за инсталиране и използване дистрибуция на Apache, пакетирана с MariaDB, PHP и Perl. XAMPP първоначално е създаден за Windows среди, но ...