Как написать конфигурационное решение для создания сервера sftp с пользователями sftp и его ключами в сервисе "AWS Transfer for Sftp" для AWS с использованием terraform
Хотите создать SFTP-сервер, пользователей sftp, сегменты s3 для домашнего каталога, политики сегментов s3 с использованием terraform.
один пользователь sftp может иметь несколько ключей, и количество ключей зависит от пользователей, некоторые могут иметь 2 ключа, некоторые могут иметь более 2 и т. д.
Хотите автоматизировать это с помощью Terraform,
Создайте aws_transfer_ssh_key
ресурс с комбинацией пользователей и ключей, предоставленный из переменных
Создана переменная списка с картами (для пользователей), которая будет иметь конфигурации, соответствующие этим пользователям, такие как имя сегмента, имя пользователя sftp и т. Д.
Это работает, с одним открытым ключом (как упомянуто в коде ниже), но теперь я хочу передать значение public_key
как динамически, из переменных, как это сделать?
попробовал ниже:
resource "aws_transfer_server" "sftp" {
identity_provider_type = "SERVICE_MANAGED"
logging_role = "${aws_iam_role.sftp.arn}"
endpoint_type = "VPC_ENDPOINT"
endpoint_details{
vpc_endpoint_id = "<Endpoint-Id-from-other-terraform-resource>"
}
}
#locals.tf
locals {
keylength = ["rsa","rsa","rsa"]
app_parent = "core"
app_name = "datadl"
app_costcode = "IT-DATA"
app_env = "uat"
sftp_user_count = 2
sftp_user = "${list(
map("name", "app1",
"data", "rsa"
),
map("name", "app2",
"data", "rsa"
),
)}"
}
#iam.tf
resource "aws_iam_role_policy" "sftp_user" {
count = "${local.sftp_user_count}"
name = "${local.app_env}-${lookup(local.sftp_user[count.index], "name")}-policy"
role = "${element(aws_iam_role.sftp_user.*.id,count.index)}"
policy = "${element(data.template_file.sftp_user_policy.*.rendered,count.index)}"
}
resource "aws_transfer_user" "sftp_user" {
server_id = "${aws_transfer_server.sftp.id}"
count = "${local.sftp_user_count}"
user_name = "${local.app_env}-${lookup(local.sftp_user[count.index], "name")}-sftp"
role = "${element(aws_iam_role.sftp_user.*.arn,count.index)}"
home_directory = "/${local.app_env}-${lookup(local.sftp_user[count.index], "name")}-sftp"
}
resource "aws_transfer_user" "sftp_user" {
server_id = "${aws_transfer_server.sftp.id}"
count = "${local.sftp_user_count}"
user_name = "${local.app_env}-${lookup(local.sftp_user[count.index], "name")}-sftp"
role = "${element(aws_iam_role.sftp_user.*.arn,count.index)}"
home_directory = "/${local.app_env}-${lookup(local.sftp_user[count.index], "name")}-sftp"
}
resource "aws_iam_role" "sftp_user" {
count = "${local.sftp_user_count}"
name = "${local.app_env}-${lookup(local.sftp_user[count.index], "name")}-role"
assume_role_policy = "${file("${path.module}/templates/assume-sftp.json")}"
}
resource "aws_transfer_ssh_key" "sftp_user" {
server_id = "${aws_transfer_server.sftp.id}"
count = "${local.sftp_user_count}"
user_name = "${element(aws_transfer_user.sftp_user.*.user_name,count.index)}"
body = "${tls_private_key.app1.public_key_openssh}"
}
resource "tls_private_key" "app1" {
count = "${length(local.keylength)}"
algorithm = "RSA"
rsa_bits = 2048
}
resource "aws_key_pair" "app1" {
key_name_prefix = "${local.app_env}-${local.app_parent}-${local.app_name}-"
public_key = "${tls_private_key.app1.public_key_openssh}"
}