Идентичность и затраты — Примеры

Пример 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>"
  }
}

# ежемесячный разбор читает самые крупные строки первыми и группирует их по тегам

Владелец, окружение, проект и срок действия превращают «чьё это?» в поиск, а срок действия делает удаление решением, а не догадкой. Хранилище тарифицируется помесячно независимо от того, подключён диск или нет, поэтому неподключённые ресурсы тихо накапливаются, пока внимание остаётся на очевидных крупных строках, и именно теги позволяют разбору их найти. Обычная ошибка — требовать теги в документе, а не при создании, к которому моменту ресурс уже существует.