. S3 버킷 정책 (Bucket Policy)

이 정책은 S3 버킷에 직접 연결되어, 특정 네트워크(VPC)에서만 접근을 허용하고 데이터 암호화를 강제합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowAccessFromSpecificVPCE",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<BUCKET_NAME>",
                "arn:aws:s3:::<BUCKET_NAME>/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpce": "<VPCE_ID>"
                }
            }
        },
        {
            "Sid": "DenyUnencryptedObjectUploads",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::<BUCKET_NAME>/*",
            "Condition": {
                "StringNotEquals": {
                    "s3:x-amz-server-side-encryption": "aws:kms"
                }
            }
        }
    ]
}

정책 설명:

변경해야 할 변수:


2. Lambda용 IAM 정책 (Writer 역할)

MySQL에서 데이터를 가져와 S3에 저장하는 Lambda 함수에 부여하는 정책입니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "LambdaS3WriteOnly",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::<BUCKET_NAME>/<FOLDER_NAME>/*"
        },
        {
            "Sid": "KMSKeyUsage",
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey",
                "kms:Encrypt"
            ],
            "Resource": "arn:aws:kms:<REGION>:<ACCOUNT_ID>:key/<KEY_ID>"
        }
    ]
}

정책 설명: