#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. более подробная информация здесь