Głównym problemem jest to, że musisz 1) dodać rolę uprawnień do instancji RDS, aby uzyskać dostęp do zasobnika S3, oraz 2) dodać punkt końcowy S3 do VPC, na którym działa instancja RDS, aby umożliwić komunikację.
To jest procedura, którą zastosowałem, aby to zadziałało, używając poleceń AWS cli w powłoce (zadbaj o odpowiednią wartość zmiennych środowiskowych), mam nadzieję, że może to pomóc:
- Utwórz rolę uprawnień:
$ 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"}]}'
- Utwórz zasady uprawnień, które zostaną dołączone do roli uprawnień:
$ 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}/*"]}]}'
- Załącz zasady:
$ aws iam attach-role-policy \
--policy-arn arn:aws:iam::$AWS_ACCOUNT_ID:policy/$POLICY_NAME \
--role-name $ROLE_NAME
- Dodaj rolę do określonej instancji — ten krok należy powtórzyć dla każdej nowej instancji:
$ 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
- Utwórz punkt końcowy VPC dla usługi S3:
$ aws ec2 create-vpc-endpoint \
--vpc-id $VPC_ID \
--service-name com.amazonaws.$REGION.s3
--route-table-ids $ROUTE_TABLE_ID
Identyfikator tabeli tras powiązany z VPC, w którym tworzony jest punkt końcowy, można pobrać za pomocą polecenia
$ aws ec2 describe-route-tables | jq -r '.RouteTables[] | "\(.VpcId) \(.RouteTableId)"'