Рубрики
Uncategorized

Облакоформация лучших практик

Есть много инструментов для предоставления ресурсов AWS, я предпочитаю использовать облачность для моего ежедневного … Теги от AWS, DEVOPS.

Есть много инструментов для предоставления ресурсов AWS, я предпочитаю использовать облачность для моей повседневной работы. Вот мои рекомендации, которые могут помочь вам более эффективно использовать облачность и безопасно на протяжении всего его рабочего процесса.

НЕ ХАДУДЕНИЕ ИМЯ В СВОИХ Шаблонах

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

❗ ️ Постарайтесь избегать использования имен в общем и используйте теги или добавьте префикс на все ваши ресурсы.

AWSTemplateFormatVersion: 2010-09-09
Parameters:
  Prefix:
    Type: String
Resources:
  Role:
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Sub ${Prefix}-role

Проверьте шаблоны перед использованием их

Проверьте свои шаблоны против AWS CloudFormation Спецификация ресурсов И проверьте свои шаблоны для небезопасной инфраструктуры — вы можете использовать следующие инструменты для этого автоматически.

CFN-Lint.

CFN-Lint Является ли инструмент командной строки с открытым исходным кодом, который проверяет шаблоны CloudFormation YAML/JSON против спецификации ресурсов облачных ресурсов AWS и дополнительные проверки. Он включает в себя проверку действительных значений для свойств ресурсов и лучших практик.

CFN_NAG

cfn_nag является инструментом командной строки с открытым исходным кодом, который выполняет статический анализ шаблонов облаков. Он будет искать небезопасную инфраструктуру, как:

  • IAM правила, которые слишком разрешены (подстановочные знаки)
  • Правила группы безопасности, которые слишком допустимы (подстановочные знаки)
  • Журналы доступа, которые не включены
  • Шифрование, которое не включено
  • Литералы пароля

⚠️. Если вы хотите приостановить определенные выводы, вы можете сделать это, регулируя метаданные ресурса шаблона, например:

AWSTemplateFormatVersion: 2010-09-09
Resources:
  MyRule:
    Type: 'AWS::IAM::Role'
    Metadata:
      cfn_nag:
        rules_to_suppress:
          - id: F3
            reason: "Complies with own Coding Guidelines"
          - id: W11
            reason: "Complies with own Coding Guidelines"
          - id: W28
            reason: "Should never be replaced"

Автоматизация тестирования облака с помощью TaskCat

TaskCat Является ли инструмент, который тестирует шаблоны облачных декорантов AWS. Он разворачивает шаблон вашей облачной информации в нескольких областях AWS и генерирует отчет с оценкой Pass/Fail для каждого региона.

Используйте AWS-специфические типы параметров или используйте допустимые шаблоны/значения

Чтобы избежать ложных утверждений и следующие ошибки в развертывании используют AWS-специфические типы параметров для существующих ресурсов (таких как существующие идентификаторы виртуальных частных облаков или имя ключа EC2), для не существующих ресурсов определяют разрешенные шаблоны или разрешенные значения для параметра.

AWSTemplateFormatVersion: 2010-09-09
Parameters:
  BackupFrequency:
    Description: Frequency of the Backup
    ConstraintDescription: Must be a valid selection
    Type: String
    Default: Daily
    AllowedValues:
      - Daily
      - Weekly
      - None
  AccountId:
    Type: String
    Description: >-
      The account number.
    ConstraintDescription: Must be a valid Account number
    Default: '123456789101'
    MinLength: 12
    MaxLength: 12
    AllowedPattern: '^\d{12}$'

Разделить стеки

Групповые ресурсы по их техническому контексту, а не имя службы AWS, которое поможет вам сохранить обзор ваших шаблонов (ы), и он поможет вам внести изменения в определенный набор ресурсов, используя свой собственный процесс и расписание, не влияя на другие ресурсы Отказ

Вложенные стеки

Используйте один главный стек и вызвать все остальные стеки как вложенные стеки. Таким образом, вы можете смешивать и сопоставить разные шаблоны, но используйте вложенные стеки для создания одного, унифицированного стека.

Синтаксис короткого формы

Попробуйте использовать синтаксис короткого формы для всех внутренних функций — есть всего несколько случаев, когда невозможно использовать синтаксис короткого формы. Это намного легче прочитать синтаксис короткого формы вместо того, чтобы читать синтаксис для полной функции.

🚨 Wrong:
 Arn: 
   Fn::GetAtt: 
     - CostReporterLambda 
     - Arn 
✅ Right: 
Arn: !GetAtt CostReporterLambda.Arn

💡 Если вы используете короткую форму и немедленно включите другую функцию в параметре ValueToodode, используйте полное имя функции, по крайней мере, одну из функций, например:

    UserData:
        Fn::Base64: !Sub |
        #!/bin/bash

Если у вас есть более двух внутренних функций последовательно, вы можете сделать что-то подобное (😁 да Я знаю, что это не нормальный случай Но когда-нибудь это может быть твой случай), например:

      UserData: !Base64
        Fn::If:
        - UseWindows
        - Fn::Join:
          - ''
          - - |
               

Для чтения кода лучше использовать Действительно Getatt В краткосрочной записи внутри Действительно Sub Отказ

    🚨 Wrong: !Join ['', ['arn:aws:s3:::', !GetAtt [Example, ParameterValue], /*]]
    ✅ Right: !Sub arn:aws:s3:::${Example.ParameterValue}/*

Всегда обращайте внимание на остановки вкладки

Если вам нужно иметь дело с несколькими взаимосвязанными IFS Обратите внимание на остановки вкладки, в противном случае ваш шаблон не будет вызван. В следующем примере у нас есть четыре взаимосвязаны, если условия:

    SubnetIds:
    !If
    - UseAZ1
    - - Fn::ImportValue: !Sub ${NetworkStackName}-PrivateSubnetAID
    - !If
        - UseAZ2
        - - Fn::ImportValue: !Sub ${NetworkStackName}-PrivateSubnetAID
          - Fn::ImportValue: !Sub ${NetworkStackName}-PrivateSubnetBID
        - !If
        - UseAZ3
        - - Fn::ImportValue: !Sub ${NetworkStackName}-PrivateSubnetAID
          - Fn::ImportValue: !Sub ${NetworkStackName}-PrivateSubnetBID
          - Fn::ImportValue: !Sub ${NetworkStackName}-PrivateSubnetCID
        - !If
            - UseAZ4
            - - Fn::ImportValue: !Sub ${NetworkStackName}-PrivateSubnetAID
              - Fn::ImportValue: !Sub ${NetworkStackName}-PrivateSubnetBID
              - Fn::ImportValue: !Sub ${NetworkStackName}-PrivateSubnetCID
              - Fn::ImportValue: !Sub ${NetworkStackName}-PrivateSubnetDID
            - !Ref AWS::NoValue

Параметры vs. Магазин параметров

Если вам нужно использовать настройки/параметры, которые вам нужно больше, чем раз, я, например, всегда хранишь их в магазине параметра AWS и запрашивайте их в моих других шаблонах через AWS:: SSM:: Параметр:: Value Parametertype в других шаблонах. Для параметров, которые мне просто нужно использовать один раз, я просто передаю их через ввод.

Оригинал: «https://dev.to/aws-builders/cloudformation-best-practices-330b»