auth.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. """
  2. Copyright (c) Contributors to the Open 3D Engine Project.
  3. For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. SPDX-License-Identifier: Apache-2.0 OR MIT
  5. """
  6. from aws_cdk import (
  7. CfnOutput,
  8. aws_iam as iam
  9. )
  10. from .aws_metrics_stack import AWSMetricsStack
  11. from aws_metrics.policy_statements_builder.user_policy_statements_builder import UserPolicyStatementsBuilder
  12. from aws_metrics.policy_statements_builder.admin_policy_statements_builder import AdminPolicyStatementsBuilder
  13. from .aws_utils import resource_name_sanitizer
  14. class AuthPolicy:
  15. """
  16. Creator of auth policies related to the Feature stack
  17. """
  18. def __init__(self, stack: AWSMetricsStack, application_name: str):
  19. self._stack = stack
  20. self._application_name = application_name
  21. def generate_policy(self, role_name: str) -> None:
  22. """
  23. Generate required role policy for calling service / using resources.
  24. See https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-create-and-manage-api.html
  25. :param role_name: Role to create the managed user policy for
  26. :return: The created IAM managed policy.
  27. """
  28. if role_name == 'User':
  29. policy_statements_builder = UserPolicyStatementsBuilder()
  30. elif role_name == 'Admin':
  31. policy_statements_builder = AdminPolicyStatementsBuilder()
  32. else:
  33. raise Exception('Role name needs to be either User or Admin')
  34. policy_id = f'{role_name}Policy'
  35. policy_statements_builder = policy_statements_builder\
  36. .add_aws_metrics_stack_policy_statements(self._stack)\
  37. .add_data_ingestion_policy_statements(self._stack.data_ingestion_component)\
  38. .add_real_time_data_processing_policy_statements(self._stack.real_time_data_processing_component)\
  39. .add_dashboard_policy_statements(self._stack.dashboard_component)
  40. # Add policy statements for the optional batch processing feature
  41. policy_statements_builder = policy_statements_builder\
  42. .add_data_lake_integration_policy_statements(self._stack.data_lake_integration_component) \
  43. .add_batch_processing_policy_statements(self._stack.batch_processing_component)\
  44. .add_batch_analytics_policy_statements(self._stack.batch_analytics_component)
  45. policy_statements = policy_statements_builder.build()
  46. policy = iam.ManagedPolicy(
  47. self._stack,
  48. policy_id,
  49. managed_policy_name=resource_name_sanitizer.sanitize_resource_name(
  50. f'{self._stack.stack_name}-{role_name}Policy', 'iam_managed_policy'),
  51. statements=policy_statements)
  52. CfnOutput(
  53. self._stack,
  54. id=f'{policy_id}Output',
  55. description=f'{role_name} policy arn to call service',
  56. export_name=f'{self._application_name}:{policy_id}',
  57. value=policy.managed_policy_arn)