为与 Amazon S3 集成的 RDS for Oracle 配置 IAM 权限 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

为与 Amazon S3 集成的 RDS for Oracle 配置 IAM 权限

若要让 RDS for Oracle 与 Amazon S3 集成,您的数据库实例必须可以访问 Amazon S3 存储桶。数据库实例使用的 Amazon VPC 不需要提供 Amazon S3 终端节点的访问权限。

RDS for Oracle 支持在一个账户中的数据库实例与另一个账户中的 Amazon S3 存储桶之间传输文件。如果需要其他步骤,将在以下各节中说明这些步骤。

步骤 1:为 Amazon RDS 角色创建 IAM 策略

在此步骤中,您将创建一个 Amazon Identity and Access Management(IAM)策略,该策略具有在 Amazon S3 存储桶和 RDS 数据库实例之间传输文件所需的权限。此步骤假定您已创建了 S3 桶。

创建策略前,请记下以下信息:

  • 存储桶的 Amazon 资源名称(ARN)。

  • 您的 Amazon KMS 密钥的 ARN,如果您的存储桶使用 SSE-KMS 或 SSE-S3 加密

    注意

    RDS for Oracle 数据库实例无法访问使用 SSE-C 加密的 Amazon S3 桶。

有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的使用服务器端加密保护数据

创建 IAM policy 以允许 Amazon RDS 访问 Amazon S3 桶
  1. 打开 IAM 管理控制台

  2. Access management (访问管理) 下,选择 Policies (策略)

  3. 选择创建策略

  4. Visual editor (可视化编辑器) 选项卡上,选择 Choose a service (选择服务),然后选择 S3

  5. 对于 Actions (操作),选择 Expand all (全部展开),然后选择将文件从 Amazon S3 存储桶传输到 Amazon RDS 所需的存储桶权限和对象权限。例如,执行以下操作:

    • 展开 List (列表),然后选择 ListBucket

    • 展开 Read (读取),然后选择 GetObject

    • 展开 Write(写入),然后选择PutObjectDeleteObject

    • 展开 Permissions management(权限管理),然后选择PutObjectAcl。如果您计划将文件上传到其他账户拥有的存储桶,并且此账户需要完全控制存储桶内容,则需要此权限。

    对象权限是 Amazon S3 中的对象操作的权限。您必须为存储桶中的对象而不是存储桶本身授予这些权限。有关更多信息,请参阅对象操作权限

  6. 选择资源,然后执行以下操作:

    1. 选择特定

    2. 对于,选择添加 ARN。输入桶 ARN。桶名称会自动填入。然后,选择 Add (添加)

    3. 如果显示了对象资源,请选择添加 ARN 以手动添加资源,或者选择任意

      注意

      您可以将 Amazon 资源名称 (ARN) 设置为更具体的 ARN 值,以允许 Amazon RDS 仅访问 Amazon S3 存储桶中的特定文件或文件夹。有关如何为 Amazon S3 定义访问策略的更多信息,请参阅管理您的 Amazon S3 资源的访问权限

  7. (可选)选择 Add additional permissions (添加其他权限),向策略中添加资源。例如,执行以下操作:

    1. 如果您的存储桶使用自定义 KMS 密钥加密,请为该服务选择 KMS

    2. 对于手动操作,请选择以下选项:

      • Encrypt

      • 重新加密起点重新加密终点

      • Decrypt

      • DescribeKey

      • GenerateDataKey

    3. 对于资源,选择特定

    4. 对于密钥,选择添加 ARN。输入自定义密钥的 ARN 作为资源,然后选择添加

      有关更多信息,请参阅 Amazon Simple Storage Service 用户指南中的使用在 Amazon Key Management Service (SSE-KMS) 中存储 KMS 密钥的服务器端加密保护数据

    5. 如果想要 Amazon RDS 访问其他存储桶,请为这些存储桶添加 ARN。您也可以根据需要授予访问 Amazon S3 中所有存储桶和对象的权限。

  8. 选择 Next: Tags (下一步: 标签),然后选择 Next: Review (下一步: 审核)

  9. 对于 Name (名称),请为您的 IAM 策略输入名称,例如 rds-s3-integration-policy。在创建 IAM 角色与您的数据库实例关联时,需要使用此名称。您也可以添加可选的 Description (描述) 值。

  10. 选择创建策略

创建向 Amazon RDS 授予对 Amazon S3 存储桶的访问权限的 Amazon Identity and Access Management(IAM)策略。创建策略后,请记下策略的 ARN。后续步骤需要该 ARN。

根据所需的访问类型,在策略中包括适合的操作:

  • GetObject – 从 Amazon S3 存储桶向 Amazon RDS 传输文件所必需的。

  • ListBucket – 从 Amazon S3 存储桶向 Amazon RDS 传输文件所必需的。

  • PutObject – 从 Amazon RDS 向 Amazon S3 存储桶传输文件所必需的。

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

对于 Linux、macOS 或 Unix:

aws iam create-policy \ --policy-name rds-s3-integration-policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3integration", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }'

以下示例包含自定义 KMS 密钥的权限。

aws iam create-policy \ --policy-name rds-s3-integration-policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3integration", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject", "kms:Decrypt", "kms:Encrypt", "kms:ReEncrypt*", "kms:GenerateDataKey", "kms:DescribeKey", ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*", "arn:aws:kms:::your-kms-arn" ] } ] }'

对于 Windows:

aws iam create-policy ^ --policy-name rds-s3-integration-policy ^ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3integration", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }'

以下示例包含自定义 KMS 密钥的权限。

aws iam create-policy ^ --policy-name rds-s3-integration-policy ^ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3integration", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject", "kms:Decrypt", "kms:Encrypt", "kms:ReEncrypt", "kms:GenerateDataKey", "kms:DescribeKey", ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*", "arn:aws:kms:::your-kms-arn" ] } ] }'

步骤 2:(可选)为 Amazon S3 存储桶创建 IAM 策略

只有在以下情况下才需要此步骤:

  • 您计划从一个账户(账户 A)将文件上传到 Amazon S3 存储桶,然后从另一个账户(账户 B)访问它们。

  • 账户 B 拥有该存储桶。

  • 账户 B 需要完全控制加载到存储桶中的对象。

如果上述条件不适用于您,请跳至步骤 3:为您的数据库实例创建 IAM 角色并附加策略

要创建存储桶策略,请确保您具备以下各项:

  • 账户 A 的账户 ID

  • 账户 A 的用户名

  • 账户 B 中 Amazon S3 存储桶的 ARN 值

创建或编辑存储桶策略
  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. Buckets (存储桶) 列表中,请选择要为其创建或编辑存储桶策略的存储桶的名称。

  3. 选择权限

  4. Bucket policy (存储桶策略) 下,请选择 Edit (编辑)。这将打开编辑存储桶策略页面。

  5. Edit bucket policy(编辑存储桶策略)页面上,探索《Amazon S3 用户指南》中的 Policy examples(策略示例),选择 Policy generator(策略生成器)自动生成策略,或者在 Policy(策略)部分编辑 JSON。

    如果选择 Policy generator(策略生成器)则 Amazon 策略生成器将在新的窗口中打开。

    1. Amazon 策略生成器页面,在 Select Type of Policy(选择策略类型)中,请选择 S3 存储桶Policy(S3 存储桶策略)。

    2. 通过在提供的字段中输入信息来添加语句,然后选择 Add Statement(添加语句)。对所有您想添加的语句重复执行此操作。有关这些字段的更多信息,请参阅 IAM 用户指南中的 IAM JSON 策略元素参考

      注意

      为方便起见,Edit bucket policy(编辑存储桶策略)页面会在 Policy(策略)文本字段上方显示当前存储桶的 Bucket ARN (Amazon 资源名称)。您可以复制此 ARN,以便在 Amazon 策略生成器页面上的语句中使用。

    3. 添加完语句后,请选择生成策略

    4. 复制生成的策略文本,请选择 Close(关闭),然后返回到 Amazon S3 控制台中的 Edit bucket policy(编辑存储桶策略)页面。

  6. Policy(策略)框中,编辑现有策略或从策略生成器粘贴存储桶策略。确保在保存策略之前解决安全警告、错误、一般警告和建议。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Example permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-A-ID:account-A-user" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-destination-bucket", "arn:aws:s3:::amzn-s3-demo-destination-bucket/*" ] } ] }
  7. 请选择 Save changes(保存更改),此操作将让您返回到存储桶权限页面。

步骤 3:为您的数据库实例创建 IAM 角色并附加策略

此步骤假定您已在步骤 1:为 Amazon RDS 角色创建 IAM 策略中创建了 IAM 策略。在此步骤中,您将为 RDS for Oracle 数据库实例创建一个角色,然后将策略附加到该角色。

创建 IAM 角色以允许 Amazon RDS 访问 Amazon S3 桶
  1. 打开 IAM 管理控制台

  2. 在导航窗格中,选择角色

  3. 选择 Create role(创建角色)。

  4. 选择 Amazon 服务

  5. 对于其他 Amazon 服务的使用案例:,选择 RDS,然后选择 RDS – 向数据库添加角色。然后选择下一步

  6. 对于权限策略下面的搜索,请输入您在步骤 1:为 Amazon RDS 角色创建 IAM 策略中创建的 IAM policy 的名称,然后当策略在列表中显示时选择该策略。然后选择下一步

  7. 对于角色名称,输入 IAM 角色的名称,例如 rds-s3-integration-role。您也可以添加可选的描述值。

  8. 选择 Create role(创建角色)。

创建一个角色并向该角色附加策略
  1. 创建一个让 Amazon RDS 可代表您访问 Amazon S3 存储桶的 IAM 角色。

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

    您可以使用这两个全局条件上下文键并让 aws:SourceArn 值包含账户 ID。在这种情况下,当 aws:SourceAccount 值和 aws:SourceArn 值中的账户使用相同策略语句时,确保二者使用相同的账户 ID。

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

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

    在信任关系中,请务必使用 aws:SourceArn 全局条件上下文键和访问角色资源的完整 Amazon Resource Name (ARN)。

    以下 Amazon CLI 命令会创建名为 rds-s3-integration-role 的角色来实现此目的。

    对于 Linux、macOS 或 Unix:

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

    对于 Windows:

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

    有关更多信息,请参阅 IAM 用户指南 中的创建向 IAM 用户委派权限的角色

  2. 创建角色之后,记下该角色的 ARN。后续步骤需要该 ARN。

  3. 将您创建的策略附在您创建的角色上。

    以下 Amazon CLI 命令将策略附加到名为 rds-s3-integration-role 的角色。

    对于 Linux、macOS 或 Unix:

    aws iam attach-role-policy \ --policy-arn your-policy-arn \ --role-name rds-s3-integration-role

    对于 Windows:

    aws iam attach-role-policy ^ --policy-arn your-policy-arn ^ --role-name rds-s3-integration-role

    your-policy-arn 替换为您在上一步中记下的策略 ARN。

步骤 4:将您的 IAM 角色与 RDS for Oracle 数据库实例关联

配置进行 Amazon S3 集成的权限的最后一步是将您的 IAM 角色与数据库实例相关联。请注意以下要求:

  • 您必须具有访问 IAM 角色的权限,并向此角色附加所需的 Amazon S3 权限策略。

  • 您一次只能将一个 IAM 角色与 RDS for Oracle 数据库实例关联。

  • 数据库实例必须处于可用状态。

将您的 IAM 角色与 RDS for Oracle 数据库实例关联
  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 从导航窗格中选择 Databases (数据库)

  3. 选择 RDS for Oracle 数据库实例名称以显示其详细信息。

  4. Connectivity & security(连接性和安全性)选项卡上,向下滚动到页面底部的 Manage IAM roles(管理 IAM 角色)部分。

  5. 对于向此实例添加 IAM 角色,选择您在步骤 3:为您的数据库实例创建 IAM 角色并附加策略中创建的角色。

  6. 对于 Feature (功能),选择 S3_INTEGRATION

    添加 S3_INTEGRATION 角色
  7. 选择 Add role (添加角色)

以下 Amazon CLI 命令将角色添加到名为 mydbinstance 的 Oracle 数据库实例。

对于 Linux、macOS 或 Unix:

aws rds add-role-to-db-instance \ --db-instance-identifier mydbinstance \ --feature-name S3_INTEGRATION \ --role-arn your-role-arn

对于 Windows:

aws rds add-role-to-db-instance ^ --db-instance-identifier mydbinstance ^ --feature-name S3_INTEGRATION ^ --role-arn your-role-arn

your-role-arn 替换为您在上一步中记下的角色 ARN。必须为 S3_INTEGRATION 选项指定 --feature-name