我正在尝试创建一个 ec2 实例,并且我想使用 AWS Secrets Manager 中的 ssh-key 这是我的 terraform 代码,它给出了错误
数据资源“aws_secretsmanager_secret_version”“ssh_key”尚未在根模块中声明。
我不确定它要我在哪里添加秘密代码以及该代码是否已写入
resource "aws_security_group" "wordpress_sg" {
name = "wordpress-sg"
description = "Security group for the WordPress instance"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"] // Allow SSH access from anywhere
}
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"] // Allow HTTP access from anywhere
}
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"] // Allow HTTPS access from anywhere
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_instance" "example" {
ami = var.ami_id
instance_type = var.instance_type
key_name = data.aws_secretsmanager_secret_version.ssh_key
security_groups = [aws_security_group.wordpress_sg.name]
}
output "instance_public_ip" {
value = aws_instance.example.public_ip
}
data "aws_secretsmanager_secret" "secrets" {
arn = "arn:aws:secretsmanager:us-east-1:xxxx:secret:mysecret-xxxx"
}
data "aws_secretsmanager_secret_version" "current" {
secret_id = data.aws_secretsmanager_secret.secrets.id
}
我的秘密名称是 mysecret,ssh 密钥保存为名为 ssh-key 的键值对
如果您的秘密已创建,则无需在 terraform(或任何其他 IAC)中重新创建相同的内容,它已经存在。我想您已经在控制台中填充了秘密。
您可以做到这一点的一种方法是确保您的盒子具有实例角色和配置文件,附加一个允许其访问秘密的策略,然后您可以使用 awscli 应用程序将其与您的用户数据一起引入。
在您的用户数据中,您可以发出命令
https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html