Masalah utama di sini adalah Anda perlu 1) menambahkan peran IAM ke instans RDS untuk mengakses bucket S3 dan 2) menambahkan titik akhir S3 ke VPC tempat instans RDS berjalan untuk memungkinkan komunikasi.
Ini adalah prosedur yang saya ikuti untuk membuatnya berfungsi, menggunakan perintah AWS cli di shell (jaga nilai dengan benar variabel lingkungan yang terlibat), semoga dapat membantu:
- Buat peran IAM:
$ aws iam create-role \
--role-name $ROLE_NAME \
--assume-role-policy-document '{"Version": "2012-10-17", "Statement": [{"Effect": "Allow", "Principal": {"Service": "rds.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'
- Buat kebijakan IAM yang akan dilampirkan ke peran IAM:
$ aws iam create-policy \
--policy-name $POLICY_NAME \
--policy-document '{"Version": "2012-10-17", "Statement": [{"Sid": "s3import", "Action": ["s3:GetObject", "s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::${BUCKET_NAME}", "arn:aws:s3:::${BUCKET_NAME}/*"]}]}'
- Lampirkan kebijakan:
$ aws iam attach-role-policy \
--policy-arn arn:aws:iam::$AWS_ACCOUNT_ID:policy/$POLICY_NAME \
--role-name $ROLE_NAME
- Tambahkan peran ke instance tertentu - langkah ini perlu diulang untuk setiap instance baru:
$ aws rds add-role-to-db-instance \
--db-instance-identifier $RDS_INSTANCE_NAME \
--feature-name s3Import \
--role-arn arn:aws:iam::$AWS_ACCOUNT_ID:role/$ROLE_NAME \
--region $REGION
- Buat titik akhir VPC untuk layanan S3:
$ aws ec2 create-vpc-endpoint \
--vpc-id $VPC_ID \
--service-name com.amazonaws.$REGION.s3
--route-table-ids $ROUTE_TABLE_ID
ID tabel rute yang terkait dengan VPC tempat endpoint dibuat dapat diambil melalui perintah
$ aws ec2 describe-route-tables | jq -r '.RouteTables[] | "\(.VpcId) \(.RouteTableId)"'