В чем разница между IAM-ролью и IAM-политикой в AWS?

«В чем разница между IAM-ролью и IAM-политикой в AWS?» — вопрос из категории Облачные платформы, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В IAM (Identity and Access Management) роли и политики — это взаимосвязанные, но разные сущности для управления доступом.

IAM Policy (Политика) — это JSON-документ, который определяет разрешения (что можно или нельзя делать). Политика сама по себе ничего не разрешает, пока не будет прикреплена к какой-либо сущности (роли, пользователю или группе). Она содержит statements с Effect (Allow/Deny), Action (например, s3:GetObject) и Resource (ARN).

Пример политики, разрешающей чтение из конкретного S3-бакета:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowS3Read",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my-application-logs",
        "arn:aws:s3:::my-application-logs/*"
      ]
    }
  ]
}

IAM Role (Роль) — это личность IAM с определенным набором разрешений (прикрепленными политиками), которая не имеет постоянных долгосрочных учетных данных (пароля или access keys). Роль предназначена для временного делегирования прав.

Ключевые отличия и взаимодействие:

  1. Назначение: Политика — это правило. Роль — это идентичность, которой можно временно стать.
  2. Использование: Политики прикрепляются к ролям (или пользователям). Роли принимаются (assume) AWS-сервисами (например, EC2-инстансом или Lambda-функцией) или пользователями федерации.
  3. Учетные данные: Роль при принятии предоставляет временные security credentials (через STS — Security Token Service), которые живут от 15 минут до 12 часов. Пользователь IAM имеет долгосрочные ключи.

Типичный DevOps-сценарий: Вы создаете роль EC2-S3-ReadRole, прикрепляете к ней политику (как в примере выше), а затем назначаете эту роль EC2-инстансу. Приложения на этом инстансе автоматически получают временные права для чтения S3, без необходимости хранить ключи в конфигах.