AWS Cognito에 서명한 사용자를 Lambda를 통해 DynamoDB에 로그인

개요


AWS Cognito에 서명(등록)하려는 사용자를 DB(DynamoDB)에 등록하는 경우가 비교적 많다.
※ 전제로 코그니토는 사용자 메인스테이션으로 사용하지 말고 DB를 별도로 보관하는 것이 좋습니다.
그래서 이번에는 AWS Cognito에 서명한 사용자를 Lambda를 통해 DynamoDB에 로그인할 수 있도록 최소 구성을 만들었습니다.
실현 방법으로 화면 측면에서 CognitoSDK를 호출한 후에 DynamoDB Insert를 제거하는 방법도 고려할 수 있지만 화면 측면 처리에 의존하는 것을 원하지 않기 때문에 백엔드 측에서 Cognito의 트리거 기능을 사용하고 E-mail 등 인증이 완성될 때 Lambda를 호출할 수 있다.사용자 정보를 DB(DynamoDB)와 공동 작업합니다.

프로비저닝


이번에 실시된 것은 다음과 같은 최소 구성이다.
실제로 코그니토의 E-mail 인증 전 로그인 화면, 인증 후 추가 회원 정보 로그인 화면 등을 만들어 필요한 회원 정보를 등록하도록 하는 것이 좋다.
  • Cognito에서 유지되는 데이터
  • 사용자 이름(id):cognito가 지불한 UUID
  • 로그인 ID(E-mail): 사용자가 등록할 때 입력한 e-mail(유효성 확인)
  • 비밀번호: 사용자가 등록할 때 입력한 비밀번호
  • DynamoDB에 저장된 데이터
  • id: cognito에서 계산한 UUID입니다.파티션 키
  • E-mail: 사용자 속성 정보로서의 E-mail 주소
  • 전제 조건

  • Cognito 사용자 풀 구성
  • DynamoDB에 사용자 테이블이 생성되었습니다
  • Lambda 실행 시간: 이번에는 노드입니다.js 사용또 SAM으로 코그니토 이용자 수영장을 제작하는 경우 호출되는 람다트리거, 람다도 SAM에 집중해 설정할 수 있지만, 이번에는 개별 코그니토 제작 완료(개별 링크 설정이 필요)를 전제로 했다.
    또 이 람바다 트리거는 회원 가입 때 이외에도 비밀번호를 잊어버린 것을 확인하는 호출을 받을 수 있기 때문에 이미 회원으로 가입한 경우에는 별도로 고려해야 한다.

    구축 방법


    lambda 함수 준비


    다음 내용의 Lambda 함수를 만듭니다.
    처리된 내용은 간단하다eventcognito측 사용자의 E-mail에서 확인이 완료되었을 때 대상 사용자의 정보를 수신하고 다이나모DBUser라는 표에 코그니토의 사용자 이름(UID)을 키로 속성 정보와 함께 진행한다putItem.
    signup-link-lambda.js
    const dynamodb = require("aws-sdk/clients/dynamodb");
    const docClient = new dynamodb.DocumentClient();
    
    exports.signupLinkToDBHandler = async (event, context, callback) => {
      var params = {
        TableName: "User",
        Item: {
          id: event.userName,
          email: event.request.userAttributes.email,
        },
      };
      const result = await docClient.put(params).promise();
      console.log(
        `cognito user link to dynamodb id=${event.userName} email=${event.request.userAttributes.email} result=${result}`
      );
    
      callback(null, event);
    };
    

    DynamoDB 액세스 권한 부여


    이 처리를 수행하려면 lambda 함수가 DynamoDB에 접근해야 합니다.대상 람바다의 수행역할(IAM 역할)에 대해 다이나모DB의 객체 테이블 Put에 대한 권한을 부여합니다.
    DynamoDB에 다양한 조작 권한을 부여할 때AmazonDynamoDBFullAccess.(필요한 경우 작은 권한을 설정하십시오.)
    SAM 템플릿의 정의 예를 미리 기재합니다.(SAM으로 구축할 때 AWS 콘솔에서 등록할 경우 별도의 사용 권한을 설정합니다.)
    중점은 Policies에 대한 설정AmazonDynamoDBFullAccess이다.
    template.yaml
    AWSTemplateFormatVersion: 2010-09-09
    Description: >-
      cognito-trigger-sample
    Transform:
      - AWS::Serverless-2016-10-31
    Resources:
      signupLinkToDBFunction:
        Type: AWS::Serverless::Function
        Properties:
          Handler: src/handlers/signup-link-lambda.signupLinkToDBHandler
          Runtime: nodejs14.x
          Architectures:
            - x86_64
          MemorySize: 128
          Timeout: 100
          Description: Link cognito users to DB.
          Policies:
            - AWSLambdaBasicExecutionRole
            - AmazonDynamoDBFullAccess
    

    Cognito의 트리거 설정


    Cognito 측부터 E-mail을 확인할 때 Lambda 함수를 호출하여 다음과 같이 설정합니다.
  • AWS 콘솔에서 Cognito-ユーザプール로 대상을 선택한 사용자 수영장.

  • 선택全般設定-トリガー.
  • 確認後 항목에서 객체의 Lambda 함수를 선택하고 変更の保存를 눌러 설정을 반영합니다.
  • 이상의 설정에서 Cognito 등록 사용자를 통해 E-mail 확인을 할 때 사용자 정보는 DynamoDB로 Put됩니다.
    ※ 정상적으로 동작하지 못할 경우 클라우드워치로그에서 로그가 출력되었는지 확인하세요.

    좋은 웹페이지 즐겨찾기