如何通过Terraform将Secrets Manager中已有账号密码分配给OpenSearch实例
从AWS Secrets Manager导入凭据配置OpenSearch高级安全
要实现从Secrets Manager复用已有凭据配置OpenSearch的主用户,你需要通过Terraform数据源拉取秘密并解析后注入资源配置,具体步骤如下:
1. 配置Secrets Manager数据源
使用aws_secretsmanager_secret_version数据源获取目标秘密的最新版本。假设你的秘密以JSON格式存储(结构如{"master_username": "xxx", "master_password": "xxx"}),配置如下:
data "aws_secretsmanager_secret_version" "opensearch_master_creds" { secret_id = "arn:aws:secretsmanager:us-east-1:123456789012:secret:opensearch-master-creds-xxxxxx" # 替换为你的秘密ARN或名称 } # 解析JSON格式的秘密内容 locals { opensearch_master_creds = jsondecode(data.aws_secretsmanager_secret_version.opensearch_master_creds.secret_string) }
2. 修改OpenSearch资源配置
将master_user_options中的明文凭据替换为解析后的本地变量值:
resource "aws_opensearch_domain" "example" { domain_name = "ggkitty" engine_version = "Elasticsearch_7.1" cluster_config { instance_type = "r5.large.search" } advanced_security_options { enabled = true anonymous_auth_enabled = true internal_user_database_enabled = true master_user_options { master_user_name = local.opensearch_master_creds.master_username master_user_password = local.opensearch_master_creds.master_password } } encrypt_at_rest { enabled = true } domain_endpoint_options { enforce_https = true tls_security_policy = "Policy-Min-TLS-1-2-2019-07" } node_to_node_encryption { enabled = true } ebs_options { ebs_enabled = true volume_size = 10 } }
关键注意事项
- 权限要求: 执行Terraform的IAM角色必须拥有
secretsmanager:GetSecretValue权限,否则无法拉取秘密内容。 - 秘密格式: 如果你的秘密不是JSON格式(比如纯文本),可以直接使用
data.aws_secretsmanager_secret_version.opensearch_master_creds.secret_string,但推荐用JSON存储多字段凭据。 - 秘密版本: 默认拉取最新版本,如需指定版本可添加
version_id或version_stage参数。
内容的提问来源于stack exchange,提问作者nohardfeelings
相关产品推荐
相关产品推荐

