source/idea/infrastructure/install/permissions.py (47 lines of code) (raw):

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 import aws_cdk from aws_cdk import aws_iam as iam from constructs import Construct, DependencyGroup from idea.infrastructure.install.constants import RES_ECR_REPO_NAME_SUFFIX from idea.infrastructure.install.installer_permissions.create_permissions import ( CreatePermissions, ) from idea.infrastructure.install.installer_permissions.delete_permissions import ( DeletePermissions, ) from idea.infrastructure.install.installer_permissions.update_permissions import ( UpdatePermissions, ) class Permissions(Construct): def __init__( self, scope: Construct, id: str, dependency_group: DependencyGroup, environment_name: str, ): super().__init__(scope, id) self.environment_name = environment_name # TODO: Split role into separate Install/Delete/Update roles to allow for finer grained permissions self.pipeline_role = iam.Role( self, "PipelineRole", assumed_by=self.get_principal(), role_name=f"Admin-{environment_name}-{aws_cdk.Aws.REGION}-PipelineRole", ) statements = ( CreatePermissions(environment_name).get_permissions() + DeletePermissions(environment_name).get_permissions() + UpdatePermissions(environment_name).get_permissions() ) for statement in statements: self.pipeline_role.add_to_policy(statement) dependency_group.add(self.pipeline_role) def get_principal(self) -> iam.ServicePrincipal: return iam.ServicePrincipal( "ecs-tasks.amazonaws.com", conditions={ "ArnLike": { "aws:SourceArn": f"arn:{aws_cdk.Aws.PARTITION}:ecs:{aws_cdk.Aws.REGION}:{aws_cdk.Aws.ACCOUNT_ID}:*" }, "StringEquals": {"aws:SourceAccount": aws_cdk.Aws.ACCOUNT_ID}, }, )