Vấn đề chính ở đây là bạn cần 1) thêm vai trò IAM vào cá thể RDS để truy cập nhóm S3 và 2) thêm điểm cuối S3 vào VPC nơi cá thể RDS chạy để cho phép truyền thông.
Đây là quy trình tôi đã làm theo để làm cho nó hoạt động, bằng cách sử dụng các lệnh AWS cli trong một trình bao (quan tâm đến giá trị phù hợp với các biến môi trường liên quan), hy vọng nó có thể giúp:
- Tạo vai trò 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"}]}'
- Tạo chính sách IAM sẽ được gắn với vai trò 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}/*"]}]}'
- Đính kèm chính sách:
$ aws iam attach-role-policy \
--policy-arn arn:aws:iam::$AWS_ACCOUNT_ID:policy/$POLICY_NAME \
--role-name $ROLE_NAME
- Thêm vai trò vào một phiên bản cụ thể - bước này cần được lặp lại cho mọi phiên bản mới:
$ 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
- Tạo điểm cuối VPC cho dịch vụ S3:
$ aws ec2 create-vpc-endpoint \
--vpc-id $VPC_ID \
--service-name com.amazonaws.$REGION.s3
--route-table-ids $ROUTE_TABLE_ID
Id bảng tuyến đường liên quan đến VPC nơi điểm cuối được tạo có thể được truy xuất thông qua lệnh
$ aws ec2 describe-route-tables | jq -r '.RouteTables[] | "\(.VpcId) \(.RouteTableId)"'