Skip to main content

IAM intro

· 3 min read

В этом посте посмотрим, как работает IAM и как применять базовые политики.

Введение

IAM предназначен для контроля доступа к ресурсам. Ресурсы могуть быть разными. Это S3 bucket, SQS queue, Kafka topic, выписка из биллинга, статистика, grafana dashboard, логи и т.д. Мы всегда хотим обеспечить минимальный доступ к ресурсам и только тем, кому строго положено.

В этом состоит два важнейших принципа проектирования вычислительных систем:

Подготовка

Идем в NWS консоль и генерируем новый токен. Далее, экспортируем токен в консоль:

export NWS_API_TOKEN=eyJhbGciOiJ...

Проверяем токен:

nws ct
21 Apr 2024 13:41:35 MSK        INFO    ✅ Success! Token valid

Отлично! Токен активный и можем приступить к работе

Hello World - защита сервиса Friends при помощи IAM

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

Для примера рассмотрим сервис Friends, который реализует простейший, но полновестный NWS API. API для сервиа доступен на понде.

Для начала скинем токен и попробуем получить доступ к API без авторизации:

unset NWS_API_TOKEN
nws fr list
2024/04/21 10:51:30.737 INFO    rpc error: code = Unauthenticated desc = ❌ auth: access token is invalid or expired

Это ошибка аутентификации, т.е токен не рабочий.

Вернем токен и попробуем сделать list снова:

export NWS_API_TOKEN=eyJhbGciOiJ...
nws fr list
2024/04/21 10:50:04.150 INFO    rpc error: code = PermissionDenied desc = ❌ auth: forbidden

Forbidden означает, что юзер авторизовался через токен, но у него нет прав на метод list у Friends API. Во тут и начинается работа с IAM.

Добавление IAM Policy

Для начала, посмотрим, какие политики доступны для данного пользователя:

nws iam policy list
21 Apr 2024 13:56:45 MSK        INFO    ✅ Success! Found 0 policies

Из этого следует, что ВСЕ API для IAM User закрыты по умолчанию и каждый API или ресурс перед использованием нужно открывать при помощи IAM. Такое поведение - by design и соответствует AWS Best Practices для IAM Users.

tee friends.json <<EOF
{
"id": "t8hhkqr6",
"version": "0.0.1",
"description": "allow actions for the Friends service",
"active": true,
"statements": [
{
"sid": "16oq0d",
"effect": "allow",
"actions": ["friends:list", "friends:read", "friends:create"],
"resources": ["nrn:nws:friends:ru-msk-0a:*:*"],
"principals": ["*"]
}
]
}
EOF

Как видим, политика разрешает методы friends:list, friends:read и friends:create для всех пользователей и IAM Groups внутри зоны ru-msk-0a.

Применяем политику:

nws iam p c --config ./friends.json
21 Apr 2024 14:10:30 MSK        INFO    ✅ Success! Policy added

И снова пробуем метод list сервиса Friends:

nws fr list
21 Apr 2024 14:12:16 MSK        INFO    ✅ Success! No friends found. Wanna add more ?

Теперь попробуем вызвать метод, который политика НЕ разрешила. Например, nuke:

nws fr nuke
2024/04/21 11:13:51.304 INFO    rpc error: code = PermissionDenied desc = ❌ auth: forbidden

Эпилог

В NWS аунтификация реализована через токен, а авторизация - через IAM Policy. В то время, как аутентификация позволяет ответить на вопрос: КТО ВЫ?, авторизация отвечает на вопрос: ЧТО вам разрешено делать?.

По умолчанию, все сервисы NWS недоступны для IAM Users, что отвечает лучшим практикам AWS и Google Cloud.

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

Ссылки

  1. AWS Best Practices for IAM Users link
  2. Google Cloud Enable API link