2

Je ne sais pas comment configurer la partie "EmailConfiguration" de la section de ressources de cloudformation sans serveur. Quelqu'un at-il un exemple sur la façon de faire cela? Toute orientation serait très appréciée!Comment configurer la configuration de messagerie pour les pools d'utilisateurs aws cognito?

Voici mon fichier serverless.yml.

service: cognito-email-config 
provider: 
    name: aws 
    runtime: nodejs6.10 
    region: us-east-1 

plugins: 
    - serverless-stack-output 

custom: 
    output: 
    handler: serverless/output.handler 
    file: outputs/stack.json 

functions: 
    preSignUp: 
    handler: serverless/preSignUp.handler 
    postConfirmation: 
    handler: serverless/postConfirmation.handler 

resources: 
    Resources: 
    SESRole: 
     Type: "AWS::IAM::Role" 
     Properties: 
     AssumeRolePolicyDocument: 
      Version: "2012-10-17" 
      Statement: 
      - Effect: "Allow" 
       Principal: 
       Service: 
        - "cognito-idp.amazonaws.com" 
       Action: 
       - "sts:AssumeRole" 
     Policies: 
      - PolicyName: "CognitoSESPolicy" 
      PolicyDocument: 
       Version: "2012-10-17" 
       Statement: 
       - Effect: "Allow" 
        Action: 
        - "ses:SendEmail" 
        - "ses:SendRawEmail" 
        Resource: "*" 
    CognitoUserPool: 
     Type: "AWS::Cognito::UserPool" 
     Properties: 
     UserPoolName: ${env:COGNITO_USER_POOL} 
     EmailConfiguration: 
      ReplyToEmailAddress: [email protected] 
      SourceArn: 
      Fn::GetAtt: [SESRole, Arn] 
     AutoVerifiedAttributes: 
      - phone_number 
     MfaConfiguration: "OPTIONAL" 
     SmsConfiguration: 
      ExternalId: ${env:COGNITO_USER_POOL}-external 
      SnsCallerArn: 
      Fn::GetAtt: [SNSRole, Arn] 
     Schema: 
      - Name: name 
      AttributeDataType: String 
      Mutable: true 
      Required: true 
      - Name: email 
      AttributeDataType: String 
      Mutable: false 
      Required: true 
      - Name: phone_number 
      AttributeDataType: String 
      Mutable: false 
      Required: true 

après l'exécution que je reçois cette erreur ...

Serverless: Deployment failed! 

    Serverless Error --------------------------------------- 

    An error occurred while provisioning your stack: CognitoUserPool - Email arn does not belong to your account. (Service: AWSCognitoIdentityProvider; Status Code: 400; Error Code: NotAuthorizedException; Request ID: f2b14a38-82a1-11e7-8ea0-eb271a42c298). 

    Get Support -------------------------------------------- 
    Docs:   docs.serverless.com 
    Bugs:   github.com/serverless/serverless/issues 
    Forums:  forum.serverless.com 
    Chat:   gitter.im/serverless/serverless 

    Your Environment Information ----------------------------- 
    OS:      linux 
    Node Version:   8.2.1 
    Serverless Version:  1.20.0 

ERROR: Job failed: exit code 1 

Je ne pense pas que je me sers "SourceArn" de "EmailConfiguration" correctement; Je viens de copier l'exemple de SNS à SES (en utilisant l'essentiel ci-dessous) en espérant que cela fonctionnerait.

Voici référence de documentation aws pour la ressource que je dois configurer: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-emailconfiguration

cela m'a aidé en tant que référence, mais ne montre pas comment utiliser SES: https://gist.github.com/singledigit/2c4d7232fa96d9e98a3de89cf6ebe7a5

Répondre

3

Je suis juste allé par la même épreuve et finalement compris. AWS a une documentation horrible à ce sujet. Partager mon expérience pour vous aider et/ou aider les autres.

1.) Vous devrez vérifier l'adresse e-mail que vous voulez envoyer depuis SES.

2.) Une fois que vous avez vérifié l'e-mail, vous pouvez cliquer dessus dans le tableau de bord SES et voir son ARN d'identité (par exemple: arn: aws: ses: us-west-2: MY-AWS-ACCOUNT- NUMBER: identity/[email protected]). Cet ARN d'identité est ce que vous utiliserez dans CloudFormation ci-dessus pour SourceARN sous EmailConfiguration. 3. Une fois que vous avez cliqué sur l'e-mail vérifié dans le tableau de bord SES, vous avez la possibilité de définir des stratégies d'identité. Ajoutez cet extrait ici (en remplaçant l'ARN de ressource ci-dessous par l'ARN d'identité correct que vous avez saisi à l'étape 2):

{ 
    "Version": "2008-10-17", 
    "Statement": [ 
     { 
      "Sid": "stmnt1234567891234", 
      "Effect": "Allow", 
      "Principal": { 
       "Service": "cognito-idp.amazonaws.com" 
      }, 
      "Action": [ 
       "ses:SendEmail", 
       "ses:SendRawEmail" 
      ], 
      "Resource": "arn:aws:ses:us-west-2:<MY-AWS-ACCOUNT-NUMBER>:identity/[email protected]" 
     } 
    ] 
}