Untitled
unknown
plain_text
6 months ago
2.0 kB
2
Indexable
"""Create s3 resources and tasks related to s3""" from aws_cdk import RemovalPolicy from aws_cdk import Stack from aws_cdk import aws_iam as iam from aws_cdk import aws_s3 from aws_cdk import aws_kms as kms from aws_cdk import Duration from principal_environment import PrincipalEnvironment def get_s3_general_policy( *bucket_names: str, kms_key_arn: str ) -> iam.PolicyStatement: """Create policy statement for reading and writing S3 objects.""" policy_statement = iam.PolicyStatement() policy_statement.effect = iam.Effect.ALLOW policy_statement.add_actions( "s3:GetObject*", "s3:GetBucket*", "s3:List*", "s3:DeleteObject*", "s3:PutObject*", "s3:Abort*", "kms:Encrypt", "kms:Decrypt", "kms:ListAliases", "kms:ListKeys", "kms:GenerateDataKey", ) for bucket in bucket_names: policy_statement.add_resources( f"arn:aws:s3:::{bucket}/*", f"arn:aws:s3:::{bucket}" ) policy_statement.add_resources(kms_key_arn) return policy_statement def create_bucket( scope: Stack, bucket: str, env: PrincipalEnvironment, encryption_key: kms.Ikey ) -> aws_s3.Bucket: bucket_obj = aws_s3.Bucket( scope, f"Bucket-{bucket}", block_public_access=aws_s3.BlockPublicAccess.BLOCK_ALL, encryption=aws_s3.BucketEncryption.KMS, enforce_ssl=True, bucket_name=f"{bucket}-{env.aws_environment_name}-{env.region}", versioned=False, removal_policy=RemovalPolicy.DESTROY, encryption_key=scope.kms, lifecycle_rules=[ aws_s3.LifecycleRule( id="bucket_lifecycle", expiration=Duration.days(365 * 7) ) ], ) s3_policy_statement = get_s3_general_policy(bucket, encryption_key.key_arn) bucket_obj.add_to_resource_policy(s3_policy_statement) return bucket_obj
Editor is loading...
Leave a Comment