Рубрики
Без рубрики

Полное руководство по использованию магазина параметров Manager Systems AWS в облачных приложениях

Переменные среды используются почти у каждого разработчика. Они отлично подходят для настройки параметров, которые … Помечено с AWS, DevOps, Python.

Переменные среды используются почти у каждого разработчика. Они отлично подходят для настройки параметров, которые изменяются на основе окружающей среды системы. К сожалению, они плохо масштабируются. Конечно, я согласен, есть способы сделать это, но это не забавный процесс. AWS предлагает продукт, который, я думаю, может занять место переменных окружающей среды (или, по крайней мере, уменьшить их зависимость от них). Параметр AWS Systems Manager – это идеальное решение для создания современных облачных приложений.

Что такое магазин параметров AWS Systems Manager?

AWS Systems Manager Это продукт, предназначенный для того, чтобы помочь вам управлять большие группы серверов, развернутых в облако. Например, он обеспечивает удаленное подключение к системам, безопасным и патчам обновлениях, удаленном исполнении команд и других задач администрирования в масштабе.

Он также предоставляет функцию под названием «Магазин параметров». Магазин параметра является превосходным местом для хранения централизованных данных, таких как клавиши API, строки базы данных, пароли и другие данные конфигурации.

Зачем использовать магазин параметров Manager Systems Manager?

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

  • Легко обновить от центрального интерфейса
  • Структура иерархии
  • Поддерживает шифрование для хранения секретов, таких как пароли
  • Поддерживает версию и откат параметров
  • Позволяет контроль доступа, как для IAM пользователей, так и для ролей
  • Возможность аудит параметра доступа с помощью CloudTrail
  • Поддерживает пропускную способность 1000 транзакций в секунду (должно быть увеличено в ваших настройках)

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

Структура иерархии

Возможно, самое интересное в магазине параметра – это структура иерархии. Иерархии являются параметрами, которые начинаются с косой. Это отличный способ организовывать параметры в управляемой моде. Я часто создаю параметры для Dev, Test и Prod.

/dev/API_KEY
/dev/DB_STRING
/test/API_KEY
/test/DB_STRING
/prod/API_KEY
/prod/DB_STRING

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

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

Типы параметров

Параметр является частью данных, хранящихся в магазине параметров AWS Systems Manager. AWS не содержит валидацию по любым параметрам (с одним исключением покрыты позже).

Существует три типа параметров магазина параметров (и четвертый тип бонусного типа).

  • Нить
  • Stringlist
  • SecureString.

Нить

Строки именно то, что вы ожидаете. Строки – это любой блок текста, такой как Здравствуйте, мир , Тест или вау это отличный блог пост Отказ

Stringlist

StringList, опять же, довольно интуитивно понятен. StringList – это набор строк, разделенных запятой. Например, Кошка, Собака, Кролик и Меркурий, Марс, дыни два примера строковых списков.

SecureString.

SecureString используется для конфиденциальных данных, таких как пароли и ключи API. Данные, хранящиеся в параметре SecureString, зашифрованы с помощью клавиш, управляемых сервисом управления ключом AWS. Вы должны знать, что эти параметры могут бесплатно использовать, но AWS будет взимать плату за услугу управления ключами как обычно.

Подтип – AMI DataType

Существует один странный «бонусный» тип, который вы должны знать. При использовании атрибута String вы можете использовать дополнительный параметр --дата-тип А затем укажите номер ресурса изображения Amazon Machine.

aws ssm put-parameter \
    --name "\amis\linux\golden-ami" \
    --type "String" \
    --data-type "aws:ec2:image" \
    --value "ami-12345abcdeEXAMPLE"

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

Параметры ящики

Существует два типа параметров: стандартные параметры и расширенные параметры. Усовершенствованные параметры поддерживают политики параметров, которые могут устанавливать срок действия параметра, уведомить вас, если параметры истекают, и сообщите, если параметр не изменяется некоторое время.

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

Стандартные параметры

  • Бесплатно
  • Максимум 10000 параметров (на регион)
  • 4КБ максимальный размер

Расширенные параметры

  • Оплаченный
  • Максимум 100 000 параметров (на регион)
  • 8КБ максимальный размер
  • Поддерживает политики параметров

Интеллектуальный мер

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

Интеллектуальная точница помогает контролировать расходы и предотвращать сбои, поскольку вы попали в предел стандартных параметров или пытались сохранить ключ более 4 КБ. Если вы не против тратить деньги на передовые параметры, это стоит рассмотреть.

Управляющие параметры с помощью AWS CLI

Вам нужно будет установить и настроить AWS CLI Если вы еще не сделали.

Создание параметров очень легко. Существует встроенная команда для создания параметров.

aws ssm put-parameter --name "/test/email/liscence" --type "String" --value "XM56HE1I9M2AC9W30UM1"

Чтобы создать SecureString, добавьте - Я-ID и укажите клавишу KMS ARN.

aws ssm put-parameter --name "/test/email/password" --value "4G00DPA$$W0RD" --type "SecureString" --key-id "arn:aws:kms:us-east-2:123456789012:key/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e"

Получение параметров еще веселее. Чтобы получить параметр по имени, используйте Получение параметров Отказ

aws ssm get-parameters --names "/dev/API_KEY" "/test/API_KEY" "/prod/API_KEY"

Параметры секурусной связи требуют - С дешифрованием флаг.

aws ssm get-parameters --names "/prod/API_KEY" --with-decryption

Вы можете получить все параметры в иерархии

aws ssm get-parameters-by-path --path "/dev"

и использовать Описать-параметры Чтобы запросить параметры по типу.

aws ssm describe-parameters --filters "Key=Type,Values=StringList"

Версия для параметра

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

aws ssm put-parameter --name "/test/email/liscence" --type "String" --value "XM56HE1I9M2AC9W30UM1"

aws ssm put-parameter --name "/test/email/liscence" --type "String" --value "XM56HE1I000000000000" --overwrite

Давайте проверим историю параметра.

aws ssm get-parameter-history --name "/test/email/liscence"

{
    "Parameters": [
        {
            "Name": "/test/email/liscence",
            "Type": "String",
            "LastModifiedDate": "2020-05-22T16:25:04.303000-04:00",
            "LastModifiedUser": "arn:aws:iam::",
            "Value": "XM56HE1I9M2AC9W30UM1",
            "Version": 1,
            "Labels": [],
            "Tier": "Standard",
            "Policies": []
        },
        {
            "Name": "/test/email/liscence",
            "Type": "String",
            "LastModifiedDate": "2020-05-22T16:25:38.281000-04:00",
            "LastModifiedUser": "arn:aws:iam::",
            "Value": "XM56HE1I000000000000",
            "Version": 2,
            "Labels": [],
            "Tier": "Standard",
            "Policies": []
        }
    ]
}

Политики параметров

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

Вы можете установить время истечения с политиками.

{
   "Type":"Expiration",
   "Version":"1.0",
   "Attributes":{
      "Timestamp":"2018-12-02T21:34:33.000Z"
   }
}

Вы можете настроить уведомления, если параметр истекает.

{
   "Type":"ExpirationNotification",
   "Version":"1.0",
   "Attributes":{
      "Before":"15",
      "Unit":"Days"
   }
}

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

{
   "Type":"NoChangeNotification",
   "Version":"1.0",
   "Attributes":{
      "After":"20",
      "Unit":"Days"
   }
}

Присвоение политики параметров с AWS CLI является относительно простым.

aws ssm put-parameter   
    --name "/dev/apikey" \
    --value "XM56HE1I9M2AC9W30UM1" \
    --type "String" \
    --overwrite \    
    --policies "[{policies-enclosed-in-brackets-and-curly-braces}]"

Настройка ролей службы для EC2

Если вы хотите использовать магазин параметра с другими сервисами (вы, вероятно, делаете), вам нужно предоставить этот сервисный доступ с помощью сервисной роли.

Здесь я включил роль, которая даст вам доступ к магазину параметров для любой услуги, предполагает, что роль (просто не забудьте приложить это к вашей сервисной роли).

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowSSMAccess",
            "Effect": "Allow",
            "Action": [
                "ssm:PutParameter",
                "ssm:DeleteParameter",
                "ssm:GetParameterHistory",
                "ssm:GetParametersByPath",
                "ssm:GetParameters",
                "ssm:GetParameter",
                "ssm:DescribeParameters",
                "ssm:DeleteParameters"
            ],
            "Resource": "arn:aws:ssm:*:*:parameter/*"
        },
    ]
}

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

Использование BOTO3 для взаимодействия с помощью магазина параметров

Очевидно, что сервис не будет в комплекте с способом взаимодействия с ним из кода и магазин параметра не является исключением. AWS SDK в моем случае BOTO3 Поскольку я использую Python, предлагает простой способ интерфейса с помощью магазина параметра.

Например, в следующем к коду I доступа к трем различным префиксам на основе единой переменной среды, установленной на хосте (вы можете сделать это с помощью данных пользователя EC2 или Dockerfile), а затем мое приложение знает, какой набор параметров для получения Отказ Я использую его к различным вещам, включая ключи API, локации файлов журнала, порты, статус отладки и многое другое.

## PIP
import boto3

ssm = boto3.client('ssm', region_name='us-east-1')
env = os.environ.get('env')

# Select SSM parameters based on the 'env' environment variable
if env == 'DEV':
    prefix = '/-dev/'

elif env == 'TEST':
    prefix = '/-test/'

elif env == 'PROD':
    prefix = '/-prod/'

# If env is not set, raise error to stop server from starting
else:
    raise AttributeError('No value set for environment type (env)')

secrets = {
    'ENV' : env,
    'DEBUG' : ssm.get_parameter(Name= prefix + 'DEBUG')['Parameter']['Value'],
    'PORT' : ssm.get_parameter(Name= prefix + 'PORT')['Parameter']['Value'],
    'FLASK_SECRET_KEY' : ssm.get_parameter(Name= prefix + 'FLASK_SECRET_KEY', WithDecryption=True)['Parameter']['Value'],

    'COGNITO_ID' : ssm.get_parameter(Name= prefix + 'COGNITO_ID', WithDecryption=True)['Parameter']['Value'],
    'CLIENT_ID' : ssm.get_parameter(Name= prefix + 'CLIENT_ID', WithDecryption=True)['Parameter']['Value'],
    'INVOKE_API' : ssm.get_parameter(Name= prefix + 'INVOKE_API', WithDecryption=True)['Parameter']['Value'],
    'API_GATEWAY_KEY' : ssm.get_parameter(Name= prefix + 'API_GATEWAY_KEY', WithDecryption=True)['Parameter']['Value'],
    'SNS_CONTACT_ARN' : ssm.get_parameter(Name= prefix + 'SNS_CONTACT_ARN')['Parameter']['Value'],

    'RAINFOREST_API_KEY' : ssm.get_parameter(Name= prefix + 'RAINFOREST_API_KEY', WithDecryption=True)['Parameter']['Value'],

    'LOG_FILE' : ssm.get_parameter(Name= 'LOG_FILE')['Parameter']['Value']
}

Не забудьте добавить роль сервиса для любой машины, которая будет запустить код, который обращается к магазину параметра!

Заключение

Это все, что вам нужно знать о том, как интеграция магазина параметров AWS Systems Manager. Надеюсь, вы узнали, как использовать AWS Parameter Store немного лучше и может включить его в свою будущую работу.

Если вам понравилось этот контент, следуйте за мной в Twitter, чтобы увидеть больше похожего!

Следуйте @sean_ziegler

Оригинал: “https://dev.to/sean_ziegler/a-complete-guide-to-using-the-aws-systems-manager-parameter-store-44ed”