Gems/AWSClientAuth/cdk/cognito/cognito_identity_pool.py (60 lines of code) (raw):
"""
Copyright (c) Contributors to the Open 3D Engine Project.
For complete copyright and license terms please see the LICENSE at the root of this distribution.
SPDX-License-Identifier: Apache-2.0 OR MIT
"""
from aws_cdk import (
CfnOutput,
Environment,
aws_cognito as cognito,
aws_iam as iam)
from constructs import Construct
from auth.cognito_identity_pool_role import CognitoIdentityPoolRole
from cognito.cognito_user_pool import CognitoUserPool
from utils import name_utils
from utils.constants import *
class CognitoIdentityPool:
"""
Create Identity pool. Allow authenticated and unauthenticated flow. Add authenticated authorization using
Cognito user pool, login with Amazon and Google 3rd party provider support.
"""
def __init__(self, scope: Construct, feature_name: str, project_name: str, env: Environment,
cognito_user_pool: CognitoUserPool) -> None:
"""
:param scope: Construct role scope will be attached to
:param feature_name: Name of the feature for resource
:param project_name: Name of the project for resource
:param env: Environment set up by App
:param cognito_user_pool: User pool to allow authenticated users from
"""
supported_login_providers = {} if LOGIN_WITH_AMAZON_APP_CLIENT_ID or GOOGLE_APP_CLIENT_ID else None
if LOGIN_WITH_AMAZON_APP_CLIENT_ID:
supported_login_providers['www.amazon.com'] = LOGIN_WITH_AMAZON_APP_CLIENT_ID
if GOOGLE_APP_CLIENT_ID:
supported_login_providers['accounts.google.com'] = GOOGLE_APP_CLIENT_ID
self._identity_pool = \
cognito.CfnIdentityPool(scope, id=name_utils.format_aws_resource_id(feature_name, project_name, env,
cognito.CfnIdentityPool.__name__),
identity_pool_name=name_utils.format_aws_resource_name(
feature_name, project_name, env,
cognito.CfnIdentityPool.__name__),
allow_unauthenticated_identities=True,
allow_classic_flow=True,
cognito_identity_providers=[
cognito.CfnIdentityPool.CognitoIdentityProviderProperty(
client_id=cognito_user_pool.get_user_pool_client().ref,
provider_name=cognito_user_pool.get_user_pool().attr_provider_name)
],
supported_login_providers=supported_login_providers)
self._identity_pool.add_depends_on(cognito_user_pool.get_user_pool())
self._identity_pool.add_depends_on(cognito_user_pool.get_user_pool_client())
# Create roles to associate with Cognito Identity pool
self._auth_role = CognitoIdentityPoolRole(scope, feature_name, project_name, env,
self._identity_pool, authenticated=True)
self._unauth_role = CognitoIdentityPoolRole(scope, feature_name, project_name, env,
self._identity_pool, authenticated=False)
self._auth_role.get_role().node.add_dependency(self._identity_pool)
self._unauth_role.get_role().node.add_dependency(self._identity_pool)
# Attach roles to Cognito Identity pool
cognito.CfnIdentityPoolRoleAttachment(scope,
id=name_utils.format_aws_resource_id(feature_name, project_name,
env,
cognito.CfnIdentityPoolRoleAttachment.__name__),
identity_pool_id=self._identity_pool.ref,
roles={
'authenticated': self._auth_role.get_role().role_arn,
'unauthenticated': self._unauth_role.get_role().role_arn
})
CfnOutput(
scope,
'CognitoIdentityPoolId',
description="Cognito Identity pool id",
value=self._identity_pool.ref)
def get_authenticated_role(self) -> iam.Role:
"""
:return: Created Authenticated IAM role
"""
return self._auth_role.get_role()
def get_unauthenticated_role(self) -> iam.Role:
"""
:return: Created Unauthenticated IAM role
"""
return self._unauth_role.get_role()
def get_identity_pool(self) -> cognito.CfnIdentityPool:
"""
:return: Created identity pool
"""
return self._identity_pool