使用Terraform上传CloudFront公钥报错:无效RSA密钥
解决Terraform创建CloudFront公钥时的InvalidArgument错误
问题分析
你遇到的错误源于传递给aws_cloudfront_public_key的encoded_key格式不符合CloudFront要求。控制台手动粘贴公钥能成功,是因为AWS会自动兼容PEM内容中的换行符、首尾空白等细节;而filebase64会严格读取文件全部内容(包括末尾换行符)并做base64编码,导致编码后的内容无法被CloudFront识别。
解决方案
尝试以下任意一种修改方式:
方案1:直接传递原始PEM内容
将encoded_key改为使用file函数读取原始PEM内容,替换filebase64:
resource "aws_cloudfront_public_key" "public_key" { name = "public-key" comment = "Public key for signed URLs" encoded_key = file("${path.module}/public_key.pem") }
方案2:去除多余空白后再编码
若文件存在首尾空白或多余换行,先通过trimspace处理再做base64编码:
resource "aws_cloudfront_public_key" "public_key" { name = "public-key" comment = "Public key for signed URLs" encoded_key = base64encode(trimspace(file("${path.module}/public_key.pem"))) }
方案3:统一换行符格式(Windows环境适用)
如果是Windows系统生成的公钥文件(含CRLF换行符),替换为Unix格式LF换行符后再编码:
resource "aws_cloudfront_public_key" "public_key" { name = "public-key" comment = "Public key for signed URLs" encoded_key = base64encode(replace(file("${path.module}/public_key.pem"), "\r\n", "\n")) }
验证步骤
- 保存修改后的
main.tf - 执行
terraform plan确认配置变更 - 执行
terraform apply重新创建资源
内容的提问来源于stack exchange,提问作者sparsespeculator
相关产品推荐
相关产品推荐

