Untitled
unknown
plain_text
a year ago
2.0 kB
3
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