요청하신 구성(SageMaker, S3, KMS, CloudWatch, EC2, RDS)을 연동하고 활용하기 위한 AWS IAM 역할, KMS 키 정책, EC2 User-Data, 그리고 기본 DB 쿼리문을 정리해 드립니다.
서비스 간의 원활한 통신과 보안을 고려하여 최소 권한 원칙(Least Privilege)에 기반한 템플릿으로 작성했습니다. 환경에 맞게 ARN(Amazon Resource Name) 등 일부 값을 수정하여 사용하시면 됩니다.
이 역할은 EC2(또는 SageMaker) 인스턴스에 부여하여 S3, KMS, CloudWatch, RDS에 접근할 수 있도록 합니다.
어떤 서비스가 이 역할을 맡을 수 있는지 정의합니다.
JSON
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"ec2.amazonaws.com",
"sagemaker.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
JSON
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3Access",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::YOUR_BUCKET_NAME",
"arn:aws:s3:::YOUR_BUCKET_NAME/*"
]
},
{
"Sid": "KMSAccess",
"Effect": "Allow",
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": [
"arn:aws:kms:REGION:ACCOUNT_ID:key/YOUR_RDS_KMS_KEY_ID",
"arn:aws:kms:REGION:ACCOUNT_ID:key/YOUR_CW_KMS_KEY_ID"
]
},
{
"Sid": "CloudWatchAccess",
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams",
"cloudwatch:PutMetricData"
],
"Resource": "*"
},
{
"Sid": "RDSAccess",
"Effect": "Allow",
"Action": [
"rds:DescribeDBInstances",
"rds:DescribeDBClusters",
"rds-db:connect"
],
"Resource": "*"
}
]
}
참고:
rds-db:connect는 IAM 데이터베이스 인증을 사용할 때 필요합니다. 일반 비밀번호 인증을 사용한다면 제외해도 무방합니다.
KMS 키를 생성할 때, 해당 서비스를 위해 키 사용 권한을 명시적으로 허용해야 합니다. (기본 관리자 권한 외에 추가해야 할 Statement입니다.)
RDS 서비스가 저장소 암호화/복호화를 위해 키를 사용할 수 있도록 허용합니다.