Gems/AWSMetrics/cdv1/aws_metrics/auth.py (42 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 ( core, aws_iam as iam ) from .aws_metrics_stack import AWSMetricsStack from aws_metrics.policy_statements_builder.user_policy_statements_builder import UserPolicyStatementsBuilder from aws_metrics.policy_statements_builder.admin_policy_statements_builder import AdminPolicyStatementsBuilder from .aws_utils import resource_name_sanitizer class AuthPolicy: """ Creator of auth policies related to the Feature stack """ def __init__(self, stack: AWSMetricsStack, application_name: str): self._stack = stack self._application_name = application_name def generate_policy(self, role_name: str) -> None: """ Generate required role policy for calling service / using resources. See https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-create-and-manage-api.html :param role_name: Role to create the managed user policy for :return: The created IAM managed policy. """ if role_name == 'User': policy_statements_builder = UserPolicyStatementsBuilder() elif role_name == 'Admin': policy_statements_builder = AdminPolicyStatementsBuilder() else: raise Exception('Role name needs to be either User or Admin') policy_id = f'{role_name}Policy' policy_statements_builder = policy_statements_builder\ .add_aws_metrics_stack_policy_statements(self._stack)\ .add_data_ingestion_policy_statements(self._stack.data_ingestion_component)\ .add_real_time_data_processing_policy_statements(self._stack.real_time_data_processing_component)\ .add_dashboard_policy_statements(self._stack.dashboard_component) # Add policy statements for the optional batch processing feature policy_statements_builder = policy_statements_builder\ .add_data_lake_integration_policy_statements(self._stack.data_lake_integration_component) \ .add_batch_processing_policy_statements(self._stack.batch_processing_component)\ .add_batch_analytics_policy_statements(self._stack.batch_analytics_component) policy_statements = policy_statements_builder.build() policy = iam.ManagedPolicy( self._stack, policy_id, managed_policy_name=resource_name_sanitizer.sanitize_resource_name( f'{self._stack.stack_name}-{role_name}Policy', 'iam_managed_policy'), statements=policy_statements) policy_output = core.CfnOutput( self._stack, id=f'{policy_id}Output', description=f'{role_name} policy arn to call service', export_name=f'{self._application_name}:{policy_id}', value=policy.managed_policy_arn)