- PVSM.RU - https://www.pvsm.ru -
Представьте, что у вас в облаке маленький проектик. Уже полгода вы платите за него по 20 центов в месяц. В принципе, ничего особенного. Но однажды утром вдруг приходит крупный счёт на 2700 долларов.
В облаке мы платим за хранение, вычисления и другие услуги по мере их использования. Не нужно поднимать собственный сервер. Однако недостаток в том, что можно случайно потратить больше денег, чем есть в кошельке. Это особенно сложно с бессерверными решениями, которые автоматически масштабируются вместе с поступающим трафиком.
Случайно оставите без присмотра дорогую VM или ваши лямбда-функции выйдут из-под контроля — и это может привести к неожиданному счёту.
В этой статье рассмотрим, как работает биллинг и как предотвратить появление неожиданных счетов.
Эта статья о персональным проектах и маленьких компаниях с относительно небольшими счетами. Какая-нибудь крупная корпорация может и не заметить разницу в 3000 долларов.
К сожалению, тут нет идеального решения. Как рассказывает в своём подкасте [2] Кори Куинн, биллинговая система AWS отстаёт на несколько часов, а в некоторых случаях до 24 или 48 часов. В результате оповещения о превышении квоты могут сработать через несколько часов или дней после того, как произошёл значительный перерасход. Оповещения по-прежнему отличный инструмент для защиты от лишних расходов, но только в тех случаях, когда вы что-то забыли на несколько дней, например, не остановили дорогой инстанс EC2 после семинара по машинному обучению.
Вы сами выбираете, сколько времени потратить на защиту от непредвиденных расходов, но настоятельно рекомендую потратить две минуты на настройку бюджетных оповещений!
Есть множество механизмов для защиты от неожиданных счетов. Рассмотрим безопасность, оповещения, действия по исправлению ситуации и улучшение видимости.
Это первое, что вы должны настроить при создании новой учетной записи AWS.
Вот официальное руководство [3] от AWS по настройке многофакторной аутентификации (MFA), которая представляет дополнительный барьер против злоумышленников.
Это второе, что нужно настроить при создании нового аккаунта AWS.
Бюджетные оповещения — самый популярный способ следить за своими расходами. Например, по электронной почте приходит уведомление о превышении лимита. Можно дополнительно настроить уведомления с помощью Amazon SNS [4] или AWS Chatbot [5].
Вот короткое видео [6] (52 секунды) по созданию первого бюджетного оповещения. Райан Льюис сделал более длинное видео [7] с более подробным описанием, деталями бюджетных оповещений и множеством способов их настройки.
Если вы уже используете CDK, то лучше всего использовать пакет aws-budget-notifier [8].
Начните с суммы, которая немного превышает ваши текущие расходы и которая вас устраивает. Например, 10 долларов. Если у вас уже есть рабочие нагрузки, которые работают несколько месяцев, то возьмите среднюю цифру и добавьте 50%.
Также рекомендую настроить несколько оповещений о выставлении счетов с различными пороговыми значениями:
В дополнение к заранее установленным пороговым значениям, вы также можете попробовать сервис обнаружения аномалий в стоимости услуг AWS [10].
Поскольку вы можете отправлять уведомления в SNS, то можно запустить лямбда-функцию, которая запускает aws-nuke [11] с разрушением всей инфраструктуры в вашем аккаунте. Никогда не используйте это на аккаунте в продакшне. Для дополнительной информации загляните в репозиторий GitHub [11].
Недавно AWS представила [12] бюджетные действия (Budget Actions). Это расширение для бюджетных оповещений (Budget Alerts), где при превышении бюджетного лимита запускаются определённые действия. В дополнение к отправке уведомлений по электронной почте теперь вы можете применять пользовательские политики IAM, такие как «Запретить запуск инстансов EC2» или позволить AWS закрыть инстансы EC2 и RDS, как показано ниже.
Консоль AWS для мобильных приложений [13] даёт возможность проверить все расходы в 3-5 нажатий.
Вот два экрана из мобильного приложения:
Чтобы использовать приложение, следует настроить выделенного пользователя [14], который получает только те разрешения [15], что необходимы приложению для отображения ваших расходов.
Вот политика IAM, которая даёт приложению доступ на чтение, а также к оповещениям cloudwatch.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ce:DescribeCostCategoryDefinition",
"ce:GetRightsizingRecommendation",
"ce:GetCostAndUsage",
"ce:GetSavingsPlansUtilization",
"ce:GetReservationPurchaseRecommendation",
"ce:ListCostCategoryDefinitions",
"ce:GetCostForecast",
"ce:GetReservationUtilization",
"ce:GetSavingsPlansPurchaseRecommendation",
"ce:GetDimensionValues",
"ce:GetSavingsPlansUtilizationDetails",
"ce:GetCostAndUsageWithResources",
"ce:GetReservationCoverage",
"ce:GetSavingsPlansCoverage",
"ce:GetTags",
"ce:GetUsageForecast",
"health:DescribeEventAggregates",
"cloudwatch:DescribeAlarms",
"aws-portal:ViewAccount",
"aws-portal:ViewUsage",
"aws-portal:ViewBilling"
],
"Resource": "*"
}
]
}
Разрешения разбиваются на три группы:
ce:
). Подробная информация о текущих и прогнозируемых расходах.
cloudwatch:DescribeAlarms
). Показывает предупреждения, но не позволяет ничего сделать.
aws-portal:
и health:
). Позволяют отобразить мобильную панель мониторинга.Если случайно выложить ключи доступа в публичный репозиторий [16], злоумышленники могут запустить в вашем аккаунте дорогие инстансы EC2 и использовать их, например, для майнинга биткоинов. Были сообщения о случаях, когда маленькие инстансы прячутся в малоиспользуемых регионах, так что владелец не замечает их в детализации биллинга.
Чтобы очистить код от ключей доступа или других секретов, можно использовать менеджер секретов AWS Secrets Manager [17].
При создании первого секрета следуйте этому руководству AWS [17]. После этого замените секрет из кодовой базы, запрашивая его с помощью одного из официальных клиентов AWS (boto3 для Python [18]).
import boto3
client = boto3.client('secretsmanager')
response = client.get_secret_value(SecretId='replace-me')
secret = response['SecretString']
Обратите внимание, что каждый секрет стоит $0,40 в месяц, плюс $0,05 за 10000 вызовов API.
Если вам пришёл неожиданный счёт, остановите все приложения, из-за которых возникла ситуация, при необходимости поменяйте ключи доступа и обратитесь в службу поддержки AWS. Вот 20-секундное видео [19], куда нажимать.
Пошаговая инструкция по подаче заявки в службу поддержки:
Хотя некоторым возместили их неожиданный счёт, слишком не рассчитывайте на это.
Первое, что нужно сделать, это настроить MFA [20] и бюджетные оповещения [21]. После этого можете изучить более сложные операции, такие как бюджетные действия, чтобы заблокировать аккаунт, если расходы резко возрастут.
Чтобы секреты и ключи доступа не попали в публичные репозитории, сохраняйте их в AWS Secrets Manager [22].
Автор: m1rko
Источник [23]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/amazon-web-services/359924
Ссылки в тексте:
[1] https://twitter.com/fmc_sea/status/1328510918855073793: https://twitter.com/fmc_sea/status/1328510918855073793
[2] подкасте: https://www.lastweekinaws.com/podcast/aws-morning-brief/whiteboard-confessional-the-curious-case-of-the-9000-aws-bill-increase/
[3] официальное руководство: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_enable_virtual.html
[4] Amazon SNS: https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/budgets-sns-policy.html
[5] AWS Chatbot: https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/sns-alert-chime.html
[6] короткое видео: https://youtu.be/_YXSDIPFhTI
[7] Райан Льюис сделал более длинное видео: https://www.youtube.com/watch?v=MKNtSOQXFrY
[8] aws-budget-notifier: https://awscdk.io/packages/@stefanfreitag/aws-budget-notifier@0.1.5/#/
[9] бюджетные действия: https://bahr.dev/2020/12/02/surprise-bills/#3-budget-actions
[10] обнаружения аномалий в стоимости услуг AWS: https://aws.amazon.com/aws-cost-management/aws-cost-anomaly-detection/
[11] aws-nuke: https://github.com/rebuy-de/aws-nuke
[12] представила: https://aws.amazon.com/about-aws/whats-new/2020/10/announcing-aws-budgets-actions/
[13] Консоль AWS для мобильных приложений: https://aws.amazon.com/console/mobile/
[14] настроить выделенного пользователя: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html
[15] получает только те разрешения: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html
[16] случайно выложить ключи доступа в публичный репозиторий: https://www.reddit.com/r/aws/comments/9i2zzh/huge_unexpected_45k_bill_for_ec2_instances/
[17] AWS Secrets Manager: https://aws.amazon.com/secrets-manager/
[18] boto3 для Python: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html
[19] 20-секундное видео: https://youtu.be/oKNAxfmQMZM
[20] MFA: https://bahr.dev/2020/12/02/surprise-bills/#1-secure-your-account-with-multi-factor-authentication
[21] бюджетные оповещения: https://bahr.dev/2020/12/02/surprise-bills/#2-budget-alerts
[22] сохраняйте их в AWS Secrets Manager: https://bahr.dev/2020/12/02/surprise-bills/#5-secrets-manager
[23] Источник: https://habr.com/ru/post/534016/?utm_source=habrahabr&utm_medium=rss&utm_campaign=534016
Нажмите здесь для печати.