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},
},
)