【问题标题】:Terraform KMS_key_id invalid root key errorTerraform KMS_key_id 无效的根密钥错误
【发布时间】:2021-05-03 09:59:13
【问题描述】:

下面是我的 VPC、安全组和 KMS 设置,我遇到了错误:

Terraform 脚本失败的原因是:错误: data.aws_kms_key.by_key_arn: : 无效或未知密钥:kms_key_id,

给了我一个KMS_key_id,那么如何定义kms_key_id呢?我应该使用“数据“aws_kms_key”“by_key_arn”吗?

这是我的 aws_vpc 的有效根密钥吗? eu-west-1 是我的地区,22***** 是我的 aws 帐户,5367*-***** 是我的密钥 ID

 data "aws_vpc" "vpc" {
   tags = {
    Name = "my_vpc"
    }
   }
 resource "aws_security_group" "a" {
    name   = "a"
    vpc_id = "${data.aws_vpc.vpc.id}"
    }
 data "aws_kms_key" "by_key_arn" {
     kms_key_id = "arn:aws:kms:eu-west-1:22******:key/5367*-****-****-****-********"
    }

【问题讨论】:

  • 您提供的 ARN 似乎不存在。使用密钥 ID 而不是完整的 ARN 是有效的 - 有效吗?

标签: terraform terraform-provider-aws


【解决方案1】:

如果您需要使用 KMS 密钥来加密 S3 存储桶之类的东西,您应该可以这样做:

resource "aws_s3_bucket" "mybucket" {
  bucket = "mybucket"

  server_side_encryption_configuration {
    rule {
      apply_server_side_encryption_by_default {
        kms_master_key_id = arn:aws:kms:eu-west-1:22******:key/5367*-****-****-****-********"
        sse_algorithm     = "aws:kms"
      }
    }
  }
}

但是,如果您希望使用提供的密钥以在除使用密钥 arn 之外包含的多个资源中使用,则可以这样导入:

data "aws_kms_key" "by_key_arn" {
  key_id = "arn:aws:kms:eu-west-1:22******:key/5367*-****-****-****-********"
}

注意数据块中的key_id 参数。您有kms_key_id,它不是该数据块的有效参数。 key_id 的有效选项是:

  • 别名:alias/my-key
  • 密钥 ID:1234abcd-12ab-34cd-56ef-1234567890ab
  • 别名 ARN:arn:aws:kms:us-east-1:111122223333:alias/my-key
  • 密钥 ARN:arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

参考:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/kms_key

【讨论】:

  • 我在 ebs 中使用 kms_key_id,也无法部署,下面的脚本有什么问题吗:provider "aws" { region = "eu-west-1"} resource "aws_ebs_volume" "test " { availability_zone = "eu-west-1a" size = 40 encrypted = "True" kms_key_id = "arn:aws:kms:eu-west-1:22******:key/5367*-*** *-****-****-********" } 资源 "aws_security_group" "a" { name = "a" vpc_id = "${data.aws_vpc.vpc.id}" } }
  • 日志记录部分如下:资源“aws_s3_bucket”“bucket”{bucket =“my_insecure_bucket”acl =“private”日志记录{target_bucket =“bucket”target_prefix =“log/”}}数据“aws_vpc” “vpc”{标签={名称=“my_vpc”}}
  • Terraform 代码没有明显的错误。如果您仍然收到您发布的原始错误,那是因为kms_key_id 不是aws_kms_key 数据块的有效选项。正如我在回答中所说,对于aws_kms_key 数据块,您需要key_id
猜你喜欢
  • 2018-09-18
  • 2017-01-15
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-03
  • 1970-01-01
相关资源
最近更新 更多