设置 Amazon S3 存储桶的访问权限 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

设置 Amazon S3 存储桶的访问权限

要将数据导出到 Amazon S3,请为 PostgreSQL 数据库实例提供权限以访问文件将保存到的 Amazon S3 存储桶。

为此,请使用以下过程。

通过 IAM 角色向 PostgreSQL 数据库实例授予访问 Amazon S3 的权限
  1. 创建一个 IAM 策略。

    该策略提供存储桶和对象权限,以允许 PostgreSQL 数据库实例访问 Amazon S3。

    在创建此策略的过程中,请执行以下步骤:

    1. 在策略中包含以下必需操作,以允许将文件从 PostgreSQL 数据库实例传输到 Amazon S3 存储桶:

      • s3:PutObject

      • s3:AbortMultipartUpload

    2. 包含用于标识 Amazon S3 存储桶以及其中的对象的 Amazon Resource Name (ARN)。用于访问 Amazon S3 的 ARN 格式为:arn:aws:s3:::amzn-s3-demo-bucket/*

    有关为 Amazon RDS for PostgreSQL 创建 IAM 策略的更多信息,请参阅 创建和使用适用于 IAM 数据库访问的 IAM 策略。另请参阅 IAM 用户指南中的教程:创建和附加您的第一个客户托管式策略

    以下 Amazon CLI 命令使用这些选项创建一个名为 rds-s3-export-policy 的 IAM 策略。该策略授予对名为 amzn-s3-demo-bucket 的存储桶的访问权限。

    警告

    我们建议您在一个私有 VPC 中设置数据库,该 VPC 配置了用于访问特定存储桶的端点策略。有关更多信息,请参阅 Amazon VPC 用户指南 中的对 Amazon S3 使用端点策略

    强烈建议您不要创建具有所有资源访问权限的策略。此访问权限可能会对数据安全造成威胁。如果您使用 S3:PutObject 创建一个向 "Resource":"*" 授予对所有资源的访问权限的策略,则具有导出特权的用户可以将数据导出到您账户中的所有存储桶。此外,用户可以将数据导出到 Amazon 区域内的任何可公开写入的存储桶

    在您创建策略之后,请记下策略的 Amazon Resource Name (ARN)。在将策略附加到 IAM 角色时,您在后面的步骤中需要使用 ARN。

    aws iam create-policy --policy-name rds-s3-export-policy --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3export", "Action": [ "s3:PutObject*", "s3:ListBucket", "s3:GetObject*", "s3:DeleteObject*", "s3:GetBucketLocation", "s3:AbortMultipartUpload" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }'
  2. 创建一个 IAM 角色。

    这样,Amazon RDS 就可以担任该 IAM 角色以代表您访问 Amazon S3 存储桶。有关更多信息,请参阅 IAM 用户指南中的创建向 IAM 用户委派权限的角色

    我们建议在基于资源的策略中使用 aws:SourceArnaws:SourceAccount 全局条件上下文键,以限制对特定资源的服务权限。这是防范混淆代理人问题最有效的方法。

    如果同时使用全局条件上下文键和包含账户 ID 的 aws:SourceArn 值,则 aws:SourceAccount 值和 aws:SourceArn 值中的账户在同一策略语句中使用时,必须使用相同的账户 ID。

    • 如果您想对单个资源进行跨服务访问,请使用 aws:SourceArn

    • 如果您想允许该账户中的任何资源与跨服务使用操作相关联,请使用 aws:SourceAccount

    在策略中,确保使用具有资源的完整 ARN 的 aws:SourceArn 全局条件上下文键。以下示例说明了如何使用 Amazon CLI 命令创建一个名为 rds-s3-export-role 的角色来实现该目的。

    对于 Linux、macOS 或 Unix:

    aws iam create-role \ --role-name rds-s3-export-role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333", "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:db:dbname" } } } ] }'

    对于 Windows:

    aws iam create-role ^ --role-name rds-s3-export-role ^ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333", "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:db:dbname" } } } ] }'
  3. 将您创建的 IAM 策略附加到您创建的 IAM 角色。

    以下 Amazon CLI 命令将以前创建的策略附加到一个名为 rds-s3-export-role. 的角色。请将 your-policy-arn 替换为您在前面的步骤中记下的策略 ARN。

    aws iam attach-role-policy --policy-arn your-policy-arn --role-name rds-s3-export-role
  4. 将该 IAM 角色添加到数据库实例中。您可以使用 Amazon Web Services Management Console 或 Amazon CLI 执行该操作,如下所述。

使用控制台为 PostgreSQL 数据库实例添加 IAM 角色
  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 选择 PostgreSQL 数据库实例名称以显示其详细信息。

  3. Connectivity & security (连接性和安全性) 选项卡上的 Manage IAM roles (管理 IAM 角色) 部分中,在 Add IAM roles to this instance (向此实例添加 IAM 角色) 下选择要添加的角色。

  4. Feature (功能) 下,选择 s3Export

  5. 选择 Add role (添加角色)

使用 CLI 为 PostgreSQL 数据库实例添加 IAM 角色
  • 使用以下命令将角色添加到名为 my-db-instance 的 PostgreSQL 数据库实例中。将 your-role-arn 替换为您在上一步中记下的角色 ARN。使用 s3Export 作为 --feature-name 选项的值。

    对于 Linux、macOS 或 Unix:

    aws rds add-role-to-db-instance \ --db-instance-identifier my-db-instance \ --feature-name s3Export \ --role-arn your-role-arn \ --region your-region

    对于 Windows:

    aws rds add-role-to-db-instance ^ --db-instance-identifier my-db-instance ^ --feature-name s3Export ^ --role-arn your-role-arn ^ --region your-region