Terraform의 AWS CognitoUserPool을 사용하여 Google 인증 가져오기

나는 지난번에 ALB와 Cognito를 이용하여 웹 응용 프로그램에 대한 접근 제한을 설정한 것에 관한 보도를 썼다.
https://zenn.dev/bun913/articles/alb-cognito-auth
그래서 제 마음속의 "Cognito 대단하다!"증가함에 따라 이번에는 자주 있는 OAuth의 소셜 ID 로그인을 기반으로 Terraform을 사용해 보려고 합니다.
イメージ
이번에 할 일
  • GCP를 통해 Google OAuth를 만드는 데 필요한 리소스(수동)
  • Terraform에 사용할 API가 없기 때문
  • Terraform을 사용하여 Cognito 사용자 풀을 만드는 자원
  • 호스트의 UI 확인 Google 로그인 가능
  • 이번에 안 하는 거.
  • 클라이언트 애플리케이션을 통해 Google 인증을 위한 별도의 UI 생성
  • Cognito의 ID 풀을 활용하여 AWS 리소스에 대한 승인
  • 기사 추가 계획
  • 사전 준비


    이것에 관해서는 금방 동그랗게 던지지만, 매우 알기 쉬운 반 방법 선생의 보도입니다.
    Celient ID와 Celient Secret을 얻으려면 다음 글의 "Google 인증 설정"작업을 수행하십시오.
    https://dev.classmethod.jp/articles/amazon-cognito-google-social-signin/#toc-2

    CognitoUserPool 만들기


    다음은 Terraform을 사용하여 Cognito 사용자 수영장의 자원을 제작합니다.
    요점만 발췌하고 모든 코드는 이곳의 창고를 참조하세요.
    https://github.com/bun913/cognito_id_pool_practice
    modules/auth/main.tf
    resource "aws_cognito_user_pool" "main" {
      name = "${var.prefix}-auth"
    
      mfa_configuration = "OFF"
    
      account_recovery_setting {
        recovery_mechanism {
          name     = "verified_phone_number"
          priority = 1
        }
      }
    
      admin_create_user_config {
        allow_admin_create_user_only = true
        invite_message_template {
          email_message = "{username}さん、あなたの初期パスワードは {####} です。初回ログインの後パスワード変更が必要です。"
          email_subject = "${var.tags.Project}(開発環境)への招待"
          sms_message   = "{username}さん、あなたの初期パスワードは {####} です。初回ログインの後パスワード変更が必要です。"
        }
      }
    
      # ユーザー名の他にemailでの認証を許可
      alias_attributes = ["email"]
    
      tags = var.tags
    }
    
    resource "aws_cognito_user_pool_domain" "main" {
      # 今回独自ドメインは利用せず、 `ap-northeast-1.amazoncognito.com` のドメインを利用
      domain       = "test-cogn-social-login-bun"
      user_pool_id = aws_cognito_user_pool.main.id
    }
    
    resource "aws_cognito_user_pool_client" "main" {
      name            = "${var.prefix}-client"
      user_pool_id    = aws_cognito_user_pool.main.id
      generate_secret = true
      # CallBackUrlにローカルで別途動かしているアプリケーションを指定
      callback_urls = [
        "http://localhost:8080/"
      ]
      allowed_oauth_flows = ["code"]
      explicit_auth_flows = [
        "ALLOW_REFRESH_TOKEN_AUTH",
        "ALLOW_USER_SRP_AUTH",
      ]
      supported_identity_providers = [
        "COGNITO",
        "Google"
      ]
      allowed_oauth_scopes                 = ["openid"]
      allowed_oauth_flows_user_pool_client = true
    }
    
    resource "aws_cognito_identity_provider" "google_provider" {
      user_pool_id  = aws_cognito_user_pool.main.id
      provider_name = "Google"
      provider_type = "Google"
    
      provider_details = {
        authorize_scopes = "email"
        client_id        = var.google_client_id
        client_secret    = var.google_client_secret
      }
    
      attribute_mapping = {
        email    = "email"
        username = "sub"
      }
    }
    
    
    variables.tf에 변수 정보 기재
    특히 지정google_client_idgoogle_client_secret를 잊지 마십시오.
    Google 인증 준비 과정에서 얻은 클라이언트 ID 및 클라이언트 기밀 정보를 저장하는 terraform.tfvars라는 파일을 만들었습니다.
    (기밀 정보 때문에 Git 관리 대상에서 제외)

    호스트 UI에서 확인


    Terraform을 낮은 순서로 실행하여 Conngit 리소스를 생성합니다.
    terraform init
    terraform plan
    terraform apply
    
    AWS 관리 콘솔로 이동하여 호스트의 UI를 낮은 순서로 확인합니다.
    (2022년 3월 23일 현재 새 UI의 단계)
  • 코니토의 서비스 화면에서 상기 제작된 사용자 수영장
  • 을 선택한다.
  • 사용자 풀의 상세 화면을 선택하는 "Application Integration"탭
  • Application Client 목록에서 위에서 작성한 Application Client
  • 를 선택합니다.
  • 호스트의 UI에서 "호스트의 UI 표시"를 클릭
  • ホストされたUI
    호스트의 UI 가 표시되어야 합니다. Google ID로 인증할 수 있는지 확인하십시오.
    Google認証確認

    좋은 웹페이지 즐겨찾기