是否可以同时启用输入和出口使用 RDS PostgreSQL 实例到 S3 存储桶?我已经能够使用以下模式来启用其中一个,并取得一致的成功:
- rds-s3-io-角色
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rds.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceArn": "arn:aws:rds:us-west-2:112233445566:db:dbname",
"aws:SourceAccount": "112233445566"
}
}
}
]
}
- rds-s3-io-策略
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:ListMultipartUploadParts",
"s3:PutObject",
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bucket_name",
"arn:aws:s3:::bucket_name/*"
]
}
]
}
我将政策附加到角色上,如下所示
aws iam attach-role-policy \
--policy-arn "arn:aws:iam::112233445566:policy/rds-s3-io-policy"\
--role-name "rds-s3-io-role"
不幸的是,我只能添加s3Import
或s3Export
喜欢
aws rds add-role-to-db-instance \
--db-instance-identifier "db_name" \
--feature-name s3Import \
--role-arn "arn:aws:iam::112233445566:role/rds-s3-io-role" \
--region us-west-2
如何在同一个数据库实例上同时启用s3Import
和s3Export
?我是否可以在角色上以某种方式启用另一个“功能”,以便让我在 PostgreSQL 中使用aws_s3.query_export_to_s3()
和 函数?aws_s3.table_import_from_s3()
答案1
这AWS 博客文章建议您简单地将两个角色添加到数据库中。我知道它谈论的是 Aurora,但我认为它适用于 PostgreSQL。看起来这种类型的功能角色与实例角色是分开的。我过去曾对 Oracle RDS 做过类似的事情。
我在控制台中四处查看后发现,RDS 数据库可以有多个角色,因为在数据库的主页上有一个部分“当前 IAM角色对于这个实例”。
一般步骤似乎是
- 创建一项策略,如下所示
- 创建两个角色,一个名为 rds-import-role,一个名为 rds-export role
- 将一项策略与两个角色关联
- 将角色添加到数据库
aws rds add-role-to-db-cluster --db-cluster-identifier aurora-postgres-cl --feature-name s3Export --role-arn arn:aws:iam::123456789012:role/aurora-s3-export-role
aws rds add-role-to-db-cluster --db-cluster-identifier aurora-postgres-cl --feature-name s3Import --role-arn arn:aws:iam::123456789012:role/aurora-s3-import-role
政策
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:ListMultipartUploadParts",
"s3:PutObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::aurora-pg-sample-loaddata01/*",
"arn:aws:s3:::aurora-pg-sample-loaddata01"
]
}
]
}
信任关系
{"Version": "2012-10-17","Statement": [
{
"Effect": "Allow","Principal": {
"Service": "rds.amazonaws.com"
},"Action": "sts:AssumeRole"
}
]
}
演示
我自己尝试了一下,大约花了 20 分钟。这是 RDS 实例
控制台中添加的角色
使用 CLI 添加的角色
aws rds add-role-to-db-instance --db-instance-identifier timtest1 --feature-name s3Import --role-arn arn:aws:iam::123456789:role/tim-temp-postgresql-test-import
aws rds add-role-to-db-instance --db-instance-identifier timtest1 --feature-name s3Export --role-arn arn:aws:iam::123456789:role/tim-temp-postgresql-test-export