Идентичность и затраты — Примеры
Пример 1 — Нагрузка, которая хранит собственный ключ
Приложение на инстансе читает из файла, запечённого в его образ, долгоживущий ключ доступа, и ключ даёт больше, чем приложение реально вызывает. Дайте инстансу способ получать учётные данные, которые нечему утечь и которые никому не нужно ротировать, и сузьте то, что он может.
resource "aws_instance" "app" {
ami = "<app-image>"
instance_type = "t3.small"
# приложение читает долгоживущий ключ из файла в этом образе
}
Решение
resource "aws_iam_role" "app" {
name = "app-runtime"
# только сервис вычислений может принимать эту роль
}
resource "aws_iam_instance_profile" "app" {
name = "app-runtime"
role = aws_iam_role.app.name
}
# инстанс несёт профиль вместо файла с ключом
Теперь в образе нет секрета и нечего ротировать: нагрузка просит у платформы временные учётные данные, а платформа решает, выдать ли их. Минимальные права — процесс, поэтому начинайте с запрета, выдайте вызовы, которые доказанно видны в логах, и уберите остальное, — разрешение, привязанное «чтобы разблокировать деплой», переживает деплой. Обычная ошибка — добавить роль, оставив старый ключ на месте, так что остаются два пути.
Пример 2 — Диск, которым никто не владеет
Тест создал большой диск, никогда не подключил его к машине и не удалил, поэтому он появляется в счёте каждый месяц с тех пор. Разбор не может сказать, чей он, поэтому не может его убрать. Измените объявление так, чтобы следующий ресурс такого рода можно было атрибутировать и вывести из эксплуатации.
resource "aws_ebs_volume" "scratch" {
availability_zone = "<zone-a>"
size = 100
}
Решение
resource "aws_ebs_volume" "scratch" {
availability_zone = "<zone-a>"
size = 100
tags = {
owner = "<team>"
environment = "sandbox"
project = "<project>"
expiry = "<date>"
}
}
# ежемесячный разбор читает самые крупные строки первыми и группирует их по тегам
Владелец, окружение, проект и срок действия превращают «чьё это?» в поиск, а срок действия делает удаление решением, а не догадкой. Хранилище тарифицируется помесячно независимо от того, подключён диск или нет, поэтому неподключённые ресурсы тихо накапливаются, пока внимание остаётся на очевидных крупных строках, и именно теги позволяют разбору их найти. Обычная ошибка — требовать теги в документе, а не при создании, к которому моменту ресурс уже существует.