首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Terraform创建AWS认知用户

如何用Terraform创建AWS认知用户
EN

Stack Overflow用户
提问于 2019-03-10 12:33:18
回答 4查看 9.9K关注 0票数 12

我想使用Terraform创建一个测试用户的AWS认知用户池。创建用户池非常简单:

代码语言:javascript
复制
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认知用户的资源。它可以用AWS Cli完成

代码语言:javascript
复制
aws cognito-idp admin-create-user --user-pool-id <value> --username <value>

知道怎么用Terraform来做吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-03-11 08:34:22

目前,这在Terraform中是不可能的,因为没有在用户池中创建用户的资源。

有一个公开发行请求这个特性,但是还没有开始它的工作。

票数 4
EN

Stack Overflow用户

发布于 2019-09-26 17:06:30

为了实现自动化,可以使用资源local_exec提供程序在terraform中执行aws cli命令。

例如:

代码语言:javascript
复制
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"
  }
}
票数 7
EN

Stack Overflow用户

发布于 2020-09-25 14:30:05

由于不可能直接通过Terraform (与matusko解决方案相反)来实现这一点,所以我建议使用CloudFormation模板。

在我看来,它更优雅,因为:

  • 它不需要在本地安装额外的应用程序。
  • 它可以由地形管理,就像CF堆栈可以被地形破坏一样。

使用模板的简单解决方案如下所示。请记住,我没有跳过像provider这样的直接相关的文件和资源。示例还包含与组连接的用户。

variables.tf

代码语言:javascript
复制
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

代码语言:javascript
复制
{
  "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

代码语言:javascript
复制
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

代码语言:javascript
复制
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
}

示例简单项目基于:

  • Terraform,
  • 科尼托
  • 弹性负载均衡器
  • 自动缩放小组,
  • 弹簧启动应用
  • PostgreSQL DB.

对ELB和Spring进行安全检查。这意味着ELB不能将未经授权的用户传递给应用程序。应用程序可以根据映射到认知角色的PostgreSQL角色进行进一步的安全检查。

Terraform项目和简单应用程序:

如何在terraform存储库的README.MD中运行它的更多信息。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55087715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档