Solución:
He creado dos recursos personalizados de CloudFormation para aplicar la configuración del cliente de la aplicación Cognito y el nombre de dominio. Con estos recursos, puede tener un script como este:
UserPoolTestClient:
Type: 'AWS::Cognito::UserPoolClient'
Properties:
ClientName: UserPoolTestClient
GenerateSecret: true
UserPoolId: !Ref UserPoolTest
UserPoolTestClientSettings:
Type: 'Custom::CognitoUserPoolClientSettings'
Properties:
ServiceToken: !GetAtt CloudFormationCognitoUserPoolClientSettings.Arn
UserPoolId: !Ref UserPoolTest
UserPoolClientId: !Ref UserPoolTestClient
SupportedIdentityProviders:
- COGNITO
CallbackURL: 'https://www.amazon.com'
LogoutURL: 'https://www.google.com'
AllowedOAuthFlowsUserPoolClient: true
AllowedOAuthFlows:
- code
AllowedOAuthScopes:
- openid
UserPoolTestDomain:
Type: 'Custom::CognitoUserPoolDomain'
Properties:
ServiceToken: !GetAtt CloudFormationCognitoUserPoolDomain.Arn
UserPoolId: !Ref UserPoolTest
Domain: 'userpool-test-01'
El código completo está aquí.
Parece que no hay forma de proporcionar Integración de la aplicación -> Nombre de dominio y Federación -> Proveedores de identidad a través de CloudFormation.
Encontré solo referencia para Cliente de grupo de usuarios (Configuración general -> Clientes de aplicaciones) pero no configurará Integración de la aplicación -> Configuración del cliente de la aplicación.
Si necesita automatizar el proceso de proporcionar Nombre de dominio, Proveedores de identidad y Configuración del cliente de la aplicación para el grupo de usuarios, puede hacerlo creando un script personalizado (AWS CLI) o Lambda (AWS SDK) que debe realizarse después de la implementación de la pila.
ACTUALIZAR
Verificar excelente ejemplo (respuesta a continuación) que muestra el uso de recursos personalizados de CloudFormation con Lambda.
CloudFormation ha agregado el recurso AWS :: Cognito :: UserPoolDomain para administrar el dominio del grupo de usuarios:
Type: AWS::Cognito::UserPoolDomain
Properties:
CustomDomainConfig:
CertificateArn: !Ref CertificateArn
Domain: "your.custom.domain.com"
UserPoolId: !Ref UserPool
Además, se ha agregado una configuración a AWS :: Cognito :: UserPoolClient:
Type: AWS::Cognito::UserPoolClient
Properties:
AllowedOAuthFlows:
- String
AllowedOAuthFlowsUserPoolClient: Boolean
AllowedOAuthScopes:
- String
AnalyticsConfiguration:
AnalyticsConfiguration
CallbackURLs:
- String
ClientName: String
DefaultRedirectURI: String
ExplicitAuthFlows:
- String
GenerateSecret: Boolean
LogoutURLs:
- String
ReadAttributes:
- String
RefreshTokenValidity: Integer
SupportedIdentityProviders:
- String
UserPoolId: String
WriteAttributes:
- String