如何使用 Terraform 创建 AWS Cognito 用户
How to create a AWS Cognito user with Terraform
我想使用 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 实现吗?
目前无法在 Terraform 中直接执行此操作,因为没有可在用户池中创建用户的资源。
有一个 open issue 请求该功能,但尚未开始任何工作。
为了使事情自动化,可以使用 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.pool.id} --username myuser"
}
}
由于无法直接通过 Terraform 与 matusko 解决方案相反,因此我建议使用 CloudFormation 模板。
在我看来它更优雅,因为:
- 它不需要在本地安装额外的应用程序
- 它可以由 terraform 管理,因为 CF 堆栈可以被 terraform 销毁
使用模板的简单解决方案如下所示。请记住,我跳过了不直接相关的文件和资源,如 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
}
来源
- https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html
- https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudformation_stack
例子
简单项目基于:
- 地形,
- 认知,
- 弹性负载均衡器,
- Auto Scaling 组,
- Spring 启动应用程序
- PostgreSQL 数据库。
对 ELB 和 Spring 引导进行安全检查。
这意味着 ELB 无法将未经授权的用户传递给应用程序。并且应用程序可以根据映射到 Cognito 角色的 PostgreSQL 角色进行进一步的安全检查。
Terraform 项目和简单应用程序:
- https://github.com/test-aws-cognito
Docker 由应用程序代码制作的图像:
- https://hub.docker.com/r/testawscognito/simple-web-app
有关如何在 terraform git 存储库的 README.MD.运行 中 运行 的更多信息。
请注意,AWS Terraform 提供程序现在支持 aws_cognito_user
资源,如此处记录:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cognito_user
撰写本文时的版本 4.3.0。
我想使用 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 实现吗?
目前无法在 Terraform 中直接执行此操作,因为没有可在用户池中创建用户的资源。
有一个 open issue 请求该功能,但尚未开始任何工作。
为了使事情自动化,可以使用 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.pool.id} --username myuser"
}
}
由于无法直接通过 Terraform 与 matusko 解决方案相反,因此我建议使用 CloudFormation 模板。
在我看来它更优雅,因为:
- 它不需要在本地安装额外的应用程序
- 它可以由 terraform 管理,因为 CF 堆栈可以被 terraform 销毁
使用模板的简单解决方案如下所示。请记住,我跳过了不直接相关的文件和资源,如 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
}
来源
- https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html
- https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudformation_stack
例子 简单项目基于:
- 地形,
- 认知,
- 弹性负载均衡器,
- Auto Scaling 组,
- Spring 启动应用程序
- PostgreSQL 数据库。
对 ELB 和 Spring 引导进行安全检查。 这意味着 ELB 无法将未经授权的用户传递给应用程序。并且应用程序可以根据映射到 Cognito 角色的 PostgreSQL 角色进行进一步的安全检查。
Terraform 项目和简单应用程序:
- https://github.com/test-aws-cognito Docker 由应用程序代码制作的图像:
- https://hub.docker.com/r/testawscognito/simple-web-app
有关如何在 terraform git 存储库的 README.MD.运行 中 运行 的更多信息。
请注意,AWS Terraform 提供程序现在支持 aws_cognito_user
资源,如此处记录:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cognito_user
撰写本文时的版本 4.3.0。