CloudFormation의 Cognito User Pool(이메일 주소 및 전화 번호)

10559 단어 ALBcognitoAWS

CloudFormation에서 Cognito



최근에는 ALB의 내장 인증 등 AWS Cognito를 사용하는 장면이 늘어나고 있다고 생각합니다.
유저 관리를 매니지드로 할 수 있는 것은 이점이라고 생각합니다.
이번에는 CloudFormation에서 Cognito User Pool, Indenty Pool 등을 작성합니다.
User Pool을 만들 때 "이메일 주소와 전화 번호 - 사용자는 이메일 주소 또는 전화 번호를 "사용자 이름"으로 사용하여 가입 및 로그인할 수 있습니다. 를 지정합니다.
이것은 2018년 7/5 현재 Cognito User Pool의 일본어 문서에 쓰여 있지 않은 것 같고, 좋은 느낌의 일본어 기사가 없었기 때문에 기술합니다.

영어 문서에는 쓰여져 있습니다.
AWS::Cognito::UserPool

매니지드 콘솔에서 말하면, 다음의 녀석을 선택한 상태입니다.


아래는 CFn 템플릿입니다.
이번에는 이메일 주소로 로그인을 가정합니다.
포인트는 UserPool UsernameAttributes:입니다.
이번에는 email를 지정합니다.
전화번호로 로그인하는 경우는 phone_number 입니다.

기타,
UserPoolClinet는, javascript등으로부터 사용하는 상정으로 시크릿을 무효로 하고 있습니다.
UserPool 이외는 그대로입니다만, IdentityPool을 작성해, 지불하는 권한의 Role등을 기술하고 있습니다.

실행은 다음과 같습니다.$ aws cloudformation deploy --template ./cognito.yaml --stack-name Test --capabilities CAPABILITY_IAM
AWSTemplateFormatVersion: "2010-09-09"
Description: "Cognito Identity Pool and User Pool."
Resources:
  UserPool:
    Type: AWS::Cognito::UserPool
    Properties:
      UserPoolName: !Sub "${AWS::StackName}Users"
      AdminCreateUserConfig:
        AllowAdminCreateUserOnly: false
      UsernameAttributes:
        - email
      AutoVerifiedAttributes:
        - email
      Policies:
        PasswordPolicy:
          MinimumLength: 8
      Schema:
        - Name: email
          AttributeDataType: String
          DeveloperOnlyAttribute: false
          Mutable: true
          Required: true
  UserPoolClient:
    Type: AWS::Cognito::UserPoolClient
    Properties:
      ClientName: !Sub "${AWS::StackName}Users-client"
      GenerateSecret: false
      RefreshTokenValidity: 7
      UserPoolId:
        !Ref UserPool
  IdentityPool:
    Type: AWS::Cognito::IdentityPool
    Properties:
      AllowUnauthenticatedIdentities: false
      IdentityPoolName: !Sub "${AWS::StackName}Users"
      CognitoIdentityProviders:
        - ClientId: !Ref UserPoolClient
          ProviderName: !Sub "cognito-idp.${AWS::Region}.amazonaws.com/${UserPool}"
  AuthenticatedPolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Action:
              - mobileanalytics:PutEvents
              - cognito-sync:*
              - cognito-identity:*
            Resource:
              - "*"
  AuthenticatedRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Action: "sts:AssumeRoleWithWebIdentity"
            Principal:
              Federated: cognito-identity.amazonaws.com
            Condition:
              StringEquals:
                "cognito-identity.amazonaws.com:aud": !Ref IdentityPool
              ForAnyValue:StringLike:
                "cognito-identity.amazonaws.com:amr": authenticated
      ManagedPolicyArns: 
        - !Ref AuthenticatedPolicy
  RoleAttachment:
    Type: AWS::Cognito::IdentityPoolRoleAttachment
    Properties:
      IdentityPoolId: !Ref IdentityPool
      Roles:
        authenticated: !GetAtt AuthenticatedRole.Arn

Outputs:
  UserPoolId:
    Value: !Ref UserPool
    Export:
      Name: !Sub "${AWS::StackName}-UserPool"
  UserPoolArn:
    Value: !GetAtt UserPool.Arn
    Export:
      Name: !Sub "${AWS::StackName}-UserPoolArn"
  UserPoolClientId:
    Value: !Ref UserPoolClient
    Export:
      Name: !Sub "${AWS::StackName}-UserPoolClient"
  IdentityPoolId:
    Value: !Ref IdentityPool
    Export:
      Name: !Sub "${AWS::StackName}-IdentityPool"

좋은 웹페이지 즐겨찾기