RDS PostgreSQL 导入+导出至/从 S3

RDS PostgreSQL 导入+导出至/从 S3

是否可以同时启用输入出口使用 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"

不幸的是,我只能添加s3Imports3Export喜欢

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

如何在同一个数据库实例上同时启用s3Imports3Export?我是否可以在角色上以某种方式启用另一个“功能”,以便让我在 PostgreSQL 中使用aws_s3.query_export_to_s3()和 函数?aws_s3.table_import_from_s3()

答案1

AWS 博客文章建议您简单地将两个角色添加到数据库中。我知道它谈论的是 Aurora,但我认为它适用于 PostgreSQL。看起来这种类型的功能角色与实例角色是分开的。我过去曾对 Oracle RDS 做过类似的事情。

我在控制台中四处查看后发现,RDS 数据库可以有多个角色,因为在数据库的主页上有一个部分“当前 IAM角色对于这个实例”。

一般步骤似乎是

  1. 创建一项策略,如下所示
  2. 创建两个角色,一个名为 rds-import-role,一个名为 rds-export role
  3. 将一项策略与两个角色关联
  4. 将角色添加到数据库
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 实例

RDS 实例

控制台中添加的角色

使用控制台添加的 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

使用 CLI 添加的角色

相关内容