Рубрики
Uncategorized

AWS AWS CloudFormation Specization Auditor

Как желание генерировать код из файлов спецификации CloudFormation, привел к аудиту DOCS AWS с … Tagged с помощью AWS, GitHub, DevOps, CloudFormation.

Как желание генерировать код из файлов спецификации CloudFormation, привел к аудиту документов AWS с помощью Python и GitHub действий

Примечание: Этот пост расширяет некоторые контенты, ранее упомянутые в Сокращение документов, чтобы генерировать помощь PowerShell в Vaporshell , но не нужно читать, чтобы понять, что здесь происходит.

«Это выглядит круто».

Когда я впервые увидел Файлы спецификации ресурсов AWS CloudFormation Files В 2016 или 2017 году, представляя услуги, поддерживаемые CFN, я предполагал, что они будут полезны для инфракодеров. Я люблю создавать и улучшать инструменты автоматизации. Как еще можно не отставать от количества новых услуг, поддерживаемых AWS CloudFormation?

Мне было любопытно, как был сгенерирован код для наборов разработки, которые помогали в создании шаблонов CFN, таких как Sparkleformation , Тропосфера , вероятно, AWS Cloud Development Kit и Параслет .

Я снова вернул эту идею в недавнем посте, и это привело к списку пробелов, которые я хотел создать инструменты.

Некоторые мысли о документации AWS CloudFormation

Документация AWS, кажется, не синхронизирована во многих местах, когда дело доходит до:

  • Какие услуги AWS поддерживаются в каждом регионе
  • Какие сервисы AWS поддерживаются AWS CloudFormation в каждом регионе

Вместо этого он существует через спектр источников, которые иногда могут противоречить друг другу:

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

Другое дело: источник документации AWS для руководства пользователя AWS CloudFormation, на GitHub , не так много Источник Как это дублирование из Live CFN Руководство пользователя И источник выглядит вручную, когда вручную обновляется непоследовательно. Это приводит к тому, что источник документации не отражает документацию, которая является живой, и также надеется оставить путаницу в отношении того, как подходить к PRS к дублированной документации источника:

  • В настоящее время есть> 90 PRS
  • Объединенные изменения делают «источник» на GitHub еще дальше от синхронизации от Live Docs, поскольку он уже не отражает живую/публичную документацию, для которой она является «источником». Управление этим вручную должно быть головной болью
  • Иногда в репозитории источника GitHub не существует документации для ресурса или типа свойства. Это может иметь место, даже если документация существует на живом веб -сайте.
  • PR обычно закрыты, без слияния, после того, как правопреемник упоминает, что билет был сделан внутри, чтобы внести исправление в файлы спецификации ресурсов. Это делается из-за кусков документации по руководству пользователя, сгенерируемой из файлов Spec.

Эти файлы спецификации не отслеживаются на GitHub AWS, однако они являются JSON и используются для автоматического генерации больших частей руководства пользователя AWS CFN (и сторонним инструментами, сделанными для оказания помощи в создании/подкладке для шаблонов CFN/и т. Д.). Что делать?

Спецификация ресурсов аудитор

Я сделал свой собственный репозиторий для отслеживания и аудирования этих файлов спецификации в то же время: AWS AWS CloudFormation Specization Auditor Анкет

Это привело к автоматизации всего с помощью Действия GitHub Анкет Я подписался на бета -версию и теперь использую действия GitHub с помощью сценариев Python для:

  • Ищите новые обновления спецификаций CFN и загрузить/push to Repo, если обнаружено
  • Каталог, какие регионы поддерживаются для каждой услуги в CFN
  • Аудиторские ссылки на документацию и руководство пользователя AWS CFN Source Repo для согласованности
    • Какие ссылки нарушены ссылки?
    • Какая документация существует на веб -сайте документации в прямом эфире, но не источник GitHub для документации CFN?

Реализация

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

Чтобы обойти это, мне пришлось переименовать и протолкнуть новый файл рабочего процесса YAML. По сути, это создает новый рабочий процесс GitHub Actions под новым именем, что позволяет выполнять новые прогоны без в зависимости от завершения подвешенного рабочего процесса.

Чтобы получить такой хороший выход для рабочего процесса, как выглядит рабочий процесс YAML?

Для действий GitHub ваши рабочие процессы должны существовать в следующем месте: .github/Workflow/myworkflow.yml

Я использовал по умолчанию для повседневного запланированного рабочего процесса приложения Python и модифицирован для работы с Pipenv и мои сценарии аудита на питоне:

name: CFN Specification and User Guide Audit

on:
  schedule:
  - cron: 0 2 * * 1-5

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
    - name: Set up Python 3.7
      uses: actions/setup-python@v1
      with:
        python-version: 3.7
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip setuptools
        git submodule update --init --recursive --remote
        pip install pipenv
        pipenv install --dev
    - name: Lint with flake8
      run: |
        # stop the build if there are Python syntax errors or undefined names
        pipenv run flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
        # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
        pipenv run flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
    - name: Look for and update new CFN specs if found
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      run: |
        pipenv run python tools/cfn-resource-list.py
    - name: Audit documentation links and cfn user guide
      run: |
        pipenv run python tools/cfn-supported-region-generator.py  
    - name: Create pull request if any files were updated
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      run: |
        pipenv run python tools/create-pull-request.py

Как видно выше, действия GitHub позволяют получить доступ к секретам, которые можно хранить в настройках репозитория на GitHub:

Я видел много примеров и учебных пособий в Интернете, которые предпочитают использовать Amazons3readonlyaccess Политика, когда речь заходит о предоставлении доступа к публичным ведра S3, что выглядит так:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": "*"
        }
    ]
}

Не делай этого.

Это позволяет любому, кто использует политику для перечисления/загрузки Что угодно Хранится в S3 и на вашем собственном аккаунте, если только политики, специфичные для конкретного ведра, в дополнение к возможности получить доступ к публичным ведра S3, принадлежащие другими учетными записями AWS.

Лучшая практика — пойти с самым явным, ограниченным маршрутом. Поскольку я знаю, к каким общественным ведрах я хочу получить доступ, политика выглядит так:

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

Будущее

AWS AWS CloudFormation Specization Auditor должен продолжать обновлять себя сверхурочно, и полученные файлы JSON могут быть полезны для людей, желающих легко увидеть:

  • Какие ресурсы поддерживаются в каких регионах облачной информации?
  • Какие ссылки на документацию нарушены в файлах спецификации ресурсов CFN, предоставленных AWS?
  • Какие ресурсы, если таковые имеются, упоминаются в других файлах спецификации за пределами US-EAST-1 Анкет Некоторые инструменты зависят от US-EAST-1 Специальный файл в качестве основного исходного файла, хотя мой инструмент обнаружил ошибки, где определенные поддерживаемые ресурсы не были включены (когда они были поддержаны)

Я буду продолжать расширять его, когда сталкиваюсь с большим количеством проблем.

Бонусные мысли

Я подумал, что хорошая функция для документации пользователя AWS CFN будет состоит в том, чтобы перечислить все поддерживаемые регионы в документации для каждого ресурса и типа свойств, поэтому я создал следующее в качестве пиара для Hacktoberfest :

Присоединяйтесь к разговорам о них, если они кажутся стоящими или могут использовать некоторые отзывы!

Окончательные примечания

Хотите помочь улучшить свой рабочий процесс шаблона CloudFormation? Взгляни на:

  • CFN-Python-Lint (Установите свои шаблоны CFN; инструмент включает в себя проверки с конкретными регионами!)
  • AWS CDK : Используйте официальные инструменты Amazon для создания шаблонов CFN через ваш любимый язык кодирования вместо Raw Json/Yaml
  • Проект AWS CDK и CFN-Python-Lint имеет подзаконные зареагии, которые использовались для патчей на лете против базовых файлов спецификации CFN и являются хорошими местами, на которых можно следить за созданием CFN-SPEC рабочих процессов (или если только столкнуться с проблемами):

Первоначально опубликовано в https://icanteven.io 18 октября, 2019

Оригинал: «https://dev.to/scriptautomate/aws-cloudformation-resource-specification-auditor-26g»