我想使用Terraform与一个测试用户创建AWS Cognito用户池。创建用户池非常简单:
resource "aws_cognito_user_pool" "users" {
name = "${var.cognito_user_pool_name}"
admin_create_user_config {
allow_admin_create_user_only = true
unused_account_validity_days = 7
}
}
但是,我找不到创建AWS Cognito用户的资源。 AWS Cli
可行aws cognito-idp admin-create-user --user-pool-id <value> --username <value>
关于如何使用Terraform的任何想法?
答案 0 :(得分:2)
当前无法直接在Terraform中实现,因为没有资源可在用户池中创建用户。
有一个open issue请求该功能,但尚未对其进行任何工作。
答案 1 :(得分:1)
为了使事情自动化,可以使用null_resource和local_exec
预配器以terraform形式执行您的aws cli
命令
例如
resource "aws_cognito_user_pool" "pool" {
name = "mypool"
}
resource "null_resource" "cognito_user" {
triggers = {
user_pool_id = aws_cognito_user_pool.pool.id
}
provisioner "local-exec" {
command = "aws cognito-idp admin-create-user --user-pool-id ${aws_cognito_user_pool.service.id} --username myuser"
}
}
答案 2 :(得分:1)
由于与matusko解决方案相反,不可能直接通过Terraform进行此操作,因此我建议使用CloudFormation模板。
我认为它更为优雅,因为:
带有模板的简单解决方案如下所示。请记住,我跳过了没有直接相关的文件和资源,例如provider
。该示例还包含将用户加入组。
variables.tf
variable "COGITO_USERS_MAIL" {
type = string
description = "On this mail passwords for example users will be sent. It is only method I know for receiving password after automatic user creation."
}
cf_template.json
{
"Resources" : {
"userFoo": {
"Type" : "AWS::Cognito::UserPoolUser",
"Properties" : {
"UserAttributes" : [
{ "Name": "email", "Value": "${users_mail}"}
],
"Username" : "foo",
"UserPoolId" : "${user_pool_id}"
}
},
"groupFooAdmin": {
"Type" : "AWS::Cognito::UserPoolUserToGroupAttachment",
"Properties" : {
"GroupName" : "${user_pool_group_admin}",
"Username" : "foo",
"UserPoolId" : "${user_pool_id}"
},
"DependsOn" : "userFoo"
}
}
}
cognito.tf
resource "aws_cognito_user_pool" "user_pool" {
name = "cogito-user-pool-name"
}
resource "aws_cognito_user_pool_domain" "user_pool_domain" {
domain = "somedomain"
user_pool_id = aws_cognito_user_pool.user_pool.id
}
resource "aws_cognito_user_group" "admin" {
name = "admin"
user_pool_id = aws_cognito_user_pool.user_pool.id
}
user_init.tf
data "template_file" "application_bootstrap" {
template = file("${path.module}/cf_template.json")
vars = {
user_pool_id = aws_cognito_user_pool.user_pool.id
users_mail = var.COGNITO_USERS_MAIL
user_pool_group_admin = aws_cognito_user_group.admin.name
}
}
resource "aws_cloudformation_stack" "test_users" {
name = "${var.TAG_PROJECT}-test-users"
template_body = data.template_file.application_bootstrap.rendered
}
来源
示例 基于以下项目的简单项目:
在ELB和Spring Boot上进行安全检查。 这意味着ELB无法将未经授权的用户传递给应用程序。应用程序可以根据映射到Cognito角色的PostgreSQL角色进行进一步的安全检查。
Terraform项目和简单应用程序:
更多信息如何在terraform git存储库的README.MD中运行它。