Isssue с разрешениями KMS для профиля EC2 insatnce

#amazon-web-services #terraform #terraform-provider-aws

Вопрос:

Помогите, пожалуйста, найти ошибку в моем коде, потому что прямо сейчас, когда я его запускаю, он работает хорошо, за исключением частичного создания экземпляров EC2 в ASG. Они завершились ошибкой, из-за которой недостаточно разрешений на ключ KMS для шифрования/дешифрования корневого устройства.

 resource "aws_launch_template" "this" {
  name        = local.name
  description = var.lt_description
  image_id      = var.image_id
  instance_type = var.instance_type
  key_name      = var.key_name
  iam_instance_profile {
    arn = aws_iam_instance_profile.this.arn
  }

  network_interfaces {
    associate_public_ip_address = var.associate_public_ip_address
    security_groups = var.security_groups
  }

  block_device_mappings {
    device_name = var.device_name
    ebs {
      volume_size = var.device_volume_size
      volume_type = var.device_volume_type
      delete_on_termination = var.device_delete_on_termiation
      encrypted = var.device_enable_encryption
      kms_key_id = var.device_enable_encryption ? var.device_encryption_key : null
    }
  }
}

resource "aws_autoscaling_group" "this" {
  availability_zones = var.availability_zones
  desired_capacity   = var.asg_desired_capacity
  max_size           = var.asg_max_size
  min_size           = var.asg_min_size

  launch_template {
    id      = aws_launch_template.this.id
    version = "$Latest"
  }
}

data "aws_iam_policy_document" "assume_policy" {
  statement {
    actions = ["sts:AssumeRole"]
    principals {
      type        = "Service"
      identifiers = ["ec2.amazonaws.com"]
    }
  }
}

data "aws_iam_policy_document" "instance_policy" {

  statement {
    actions   = [
      "ec2:*"
    ]
    resources = ["*"]
  }

  statement {
    actions = [
       "kms:Encrypt",
       "kms:Decrypt",
       "kms:ReEncrypt",
       "kms:GenerateDataKey",
       "kms:DescribeKey",
       "kms:GenerateDataKeyWithoutPlainText"
    ]
    resources = [var.device_encryption_key]
  }
}

resource aws_iam_role "this" {
   path                = "/terraform/instances/"
   name                = "${local.name}-asg-iam-role"
   description         = var.role_description
   assume_role_policy  = data.aws_iam_policy_document.assume_policy.json
}

resource aws_iam_policy "instance_policy" {
  path                = "/terraform/instances/"
  name                = "${local.name}-instance-policy"
  description         = "${local.name} IAM KMS policy"
  policy              = data.aws_iam_policy_document.instance_policy.json
}

resource aws_iam_role_policy_attachment "this" {
  role                = aws_iam_role.this.name
  policy_arn          = aws_iam_policy.instance_policy.arn
}

resource aws_iam_instance_profile "this" {
  path                = "/terraform/instances/"
  name                = "${local.name}-instances-profile"
  role                = aws_iam_role.this.name
} 
 

Могу подтвердить, что все элементы, созданные без каких-либо проблем, и терраформирование вернут зеленый свет. Только проблема с разрешениями и ASG, которая завершает экземпляры из-за отсутствия разрешений

Завершение ошибки :

Клиент.Внутренняя ошибка: Ошибка клиента при запуске

Также можно подтвердить, что без шифрования он работает

Ответ №1:

вам нужно предоставить связанной с сервисом роли ASG доступ к вашему ключу KMS. более подробная информация здесь