Terraform KMS访问被拒绝



我在获取地形来解密KMS cipertext时遇到问题。

我已经使用aws-cli创建了一个新的KMS cipertext。

aws kms create-key
aws kms create-alias --alias-name alias/some-name --target-key-id KEYID
aws kms encrypt --key-id KEYID --plaintext SOMETEXT

在我的地形文件中,我添加了:

data "aws_kms_secrets" "example" {
secret {
name = "some-name"
payload = "AQICAHgVf2E9PsbkjhirN4jL+dPBwssdKYuzvWfinKOjd/F3CAHsILNXf2iPu08U0FgT88FcAAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMVxbKhOhe6Ykgqrc8AgEQgDv9fPIMcjvGOpK78J43xMMxR9C35cJvFT+JAHTxgd5Nk5lNfS+/AyJY+5W4TVq9sLw0Cz8ziSM/HW2xVg=="
}
}

但是,当我运行terraform plan时,我会得到以下错误:

data.aws_kms_secrets.example: Refreshing state...
Error: Failed to decrypt 'some-name': AccessDeniedException: The ciphertext refers to a customer master key that does not exist, does not exist in this region, or you are not allowed to access.
status code: 400, request id: 8daef259-61b4-4cb0-9991-bb84ad76c71a

然而,我可以使用aws-cli成功解密cipertext:

aws kms decrypt --profile=freid --region=eu-west-2 --ciphertext-blob fileb://<(echo AQICAHgVf2E9PsbkjhirN4jL+dPBwssdKYuzvWfinKOjd/F3CAHsILNXf2iPu08U0FgT88FcAAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMVxbKhOhe6Ykgqrc8AgEQgDv9fPIMcjvGOpK78J43xMMxR9C35cJvFT+JAHTxgd5Nk5lNfS+/AyJY+5W4TVq9sLw0Cz8ziSM/HW2xVg== | base64 -D) --query Plaintext --output text | base64 -D

我的cli和terraform都使用相同的aws-creds,所以我不认为这是权限问题。我使用的是区域eu-west-2,但当我运行terraform plan时,它会要求我将provider.aws.region设置为eu-west2。我不确定为什么它要求我设置这个,因为在计划中,我无论如何都将其设置为eu-west-2:

provider aws {
profile = "freid"
region = "eu-west-2"
}

所以,我有点困惑,为什么地形会被拒绝进入。如果有任何帮助,我们将不胜感激,您可以在这里找到我的tf文件:https://github.com/redstraw/sommelier/tree/master/infrastructure

我没有意识到,但当您不使用默认的aws配置文件时,您需要将提供程序添加到每个.tf文件中。

有一次,我把它添加到example.tf中,它开始工作:

provider aws {
profile = "freid" 
region = "eu-west-2" 
}

我不完全确定为什么会这样。如果有人知道原因,请评论。

最新更新