Можно ли создать новую роль в AWS?

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

Ответ

Да, создание кастомных IAM ролей — это фундаментальная практика безопасности и управления доступом в AWS (принцип наименьших привилегий).

Роль (IAM Role) — это сущность с разрешениями, которая не привязана к конкретному пользователю. Её могут "принимать" (assume) AWS-сервисы (EC2, Lambda), пользователи из другого AWS-аккаунта или федеративные пользователи.

Практический пример создания роли для EC2-инстанса через Terraform (Infrastructure as Code):

# 1. Политика доверия (Trust Policy): определяет, кто может принять эту роль.
data "aws_iam_policy_document" "ec2_assume_role" {
  statement {
    actions = ["sts:AssumeRole"]
    principals {
      type        = "Service"
      identifiers = ["ec2.amazonaws.com"]
    }
  }
}

# 2. Создание самой роли.
resource "aws_iam_role" "app_instance_role" {
  name               = "my-app-instance-role"
  assume_role_policy = data.aws_iam_policy_document.ec2_assume_role.json
}

# 3. Прикрепление managed policy (например, только для чтения S3).
resource "aws_iam_role_policy_attachment" "s3_read_only" {
  role       = aws_iam_role.app_instance_role.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"
}

# 4. Создание Instance Profile для привязки роли к EC2.
resource "aws_iam_instance_profile" "app_instance_profile" {
  name = "my-app-instance-profile"
  role = aws_iam_role.app_instance_role.name
}

# 5. Запуск EC2 инстанса с этой ролью.
resource "aws_instance" "app_server" {
  ami                  = "ami-0c55b159cbfafe1f0"
  instance_type        = "t2.micro"
  iam_instance_profile = aws_iam_instance_profile.app_instance_profile.name
  # ...
}

Зачем это нужно в DevOps:

  • Безопасность: Убирает необходимость хранить долгоживущие Access Keys на инстансах.
  • Грантулярный доступ: Можно создать роль, разрешающую только писать логи в конкретный CloudWatch Log Group или вытягивать секреты из определённого параметра в Parameter Store.
  • Автоматизация: Сервисы типа Lambda, ECS, EKS автоматически принимают роли, что критично для бессерверных и контейнерных архитектур.

Создание через AWS Console/CLI — это оперативная ручная настройка, в то время как использование Terraform, CloudFormation или CDK (Infrastructure as Code) является стандартом для воспроизводимых и контролируемых конфигураций.