infrastructure/parallelcluster-ui-cognito.yaml (141 lines of code) (raw):

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: ParallelCluster UI Cognito User Pool Parameters: AdminUserEmail: Description: Email address of administrative user setup by default. Type: String MinLength: 1 PermissionsBoundaryPolicy: Type: String Description: 'ARN of the IAM policy to use as permissions boundary for every IAM role' Default: '' AllowedPattern: "^(arn:.*:iam::.*:policy\\/([a-zA-Z0-9_-]+))|()$" IAMRoleAndPolicyPrefix: Type: String Description: 'Prefix applied to the name of every IAM role and policy (max length: 10)' Default: '' MaxLength: 10 CustomDomain: Type: String Description: (Optional) Custom domain name. If omitted, the default domain name will be used. Default: '' CustomDomainCertificateArn: Type: String Description: '(Optional) ARN of the ACM Certificate issued for the custom domain. This is required only if `CustomDomain` is specified.' Default: '' Conditions: GovCloud: !Equals [!Ref AWS::Region, 'us-gov-west-1'] UsePermissionBoundary: !Not [ !Equals [ !Ref PermissionsBoundaryPolicy, '' ] ] UseCustomDomain: !Not [!Equals [!Ref CustomDomain, '']] Metadata: AWS::CloudFormation::Interface: ParameterGroups: - Label: default: Admin info Parameters: - AdminUserEmail - Label: default: (Optional) Permissions Parameters: - IAMRoleAndPolicyPrefix - PermissionsBoundaryPolicy - Label: default: (Optional) Custom Domain Parameters: - CustomDomain - CustomDomainCertificateArn ParameterLabels: AdminUserEmail: default: Initial Admin's Email IAMRoleAndPolicyPrefix: default: Prefix for IAM Roles and Policies PermissionsBoundaryPolicy: default: Permissions Boundary Resources: SNSRole: Type: AWS::IAM::Role Properties: RoleName: !Sub - ${IAMRoleAndPolicyPrefix}SNSRole-${StackIdSuffix} - { StackIdSuffix: !Select [ 0, !Split [ '-', !Select [ 2, !Split [ '/', !Ref 'AWS::StackId' ] ] ] ] } AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - cognito-idp.amazonaws.com Action: - sts:AssumeRole Policies: - PolicyName: !Sub ${IAMRoleAndPolicyPrefix}SNSPermissions PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: sns:publish Resource: '*' PermissionsBoundary: !If [ UsePermissionBoundary, !Ref PermissionsBoundaryPolicy, !Ref 'AWS::NoValue' ] UserPoolDomain: Type: AWS::Cognito::UserPoolDomain Properties: UserPoolId: !Ref CognitoUserPool Domain: !If - UseCustomDomain - !Ref CustomDomain - !Join [ "-", ["pcui-auth", !Select [2, !Split [ "/", !Ref 'AWS::StackId']]]] CustomDomainConfig: !If - UseCustomDomain - { CertificateArn: !Ref CustomDomainCertificateArn } - !Ref AWS::NoValue CognitoUserPool: Type: AWS::Cognito::UserPool Properties: AutoVerifiedAttributes: - email Schema: [{Name: email, AttributeDataType: String, Mutable: true, Required: true}] UserPoolName: !Sub ${AWS::StackName}-userpool UsernameConfiguration: CaseSensitive: false AdminCreateUserConfig: AllowAdminCreateUserOnly: true InviteMessageTemplate: EmailSubject: "[AWS ParallelCluster UI] Welcome to AWS ParallelCluster UI, please verify your account." EmailMessage: "You are invited to manage clusters with ParallelCluster UI. Your administrator will contact you with the link to access. Your username is {username} and your temporary password (you will need to change it in your first access) is <br><br> {####}" UsernameAttributes: - 'email' CognitoAdminGroup: Type: AWS::Cognito::UserPoolGroup Properties: Description: User group that can manage clusters and users GroupName: admin Precedence: 1 UserPoolId: !Ref CognitoUserPool CognitoAdminUser: Type: AWS::Cognito::UserPoolUser Properties: DesiredDeliveryMediums: - EMAIL UserAttributes: - Name: email Value: !Ref AdminUserEmail - Name: email_verified Value: True Username: !Ref AdminUserEmail UserPoolId: !Ref CognitoUserPool CognitoUserToAdminGroup: Type: AWS::Cognito::UserPoolUserToGroupAttachment Properties: GroupName: !Ref CognitoAdminGroup Username: !Ref CognitoAdminUser UserPoolId: !Ref CognitoUserPool Outputs: UserPoolAuthDomain: Description: The domain of the authorization server. Value: !If - UseCustomDomain - !Sub https://${UserPoolDomain} - !Sub - https://${Domain}.${Auth}.${AWS::Region}.amazoncognito.com - {Domain: !Ref UserPoolDomain, Auth: !If [GovCloud, 'auth-fips', 'auth']} CustomDomainEndpoint: Condition: UseCustomDomain Description: | The endpoint associated with the custom domain name. Add an A record in your DNS for the custom domain name pointing to this endpoint. Value: !GetAtt UserPoolDomain.CloudFrontDistribution UserPoolId: Description: Cognito UserPool Id Value: !Ref CognitoUserPool SNSRole: Description: Role for SNS Value: !GetAtt SNSRole.Arn