为与 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 桶
-
打开 IAM 管理控制台
。 -
在 Access management (访问管理) 下,选择 Policies (策略)。
-
选择创建策略。
-
在 Visual editor (可视化编辑器) 选项卡上,选择 Choose a service (选择服务),然后选择 S3。
-
对于 Actions (操作),选择 Expand all (全部展开),然后选择将文件从 Amazon S3 存储桶传输到 Amazon RDS 所需的存储桶权限和对象权限。例如,执行以下操作:
-
展开 List (列表),然后选择 ListBucket。
-
展开 Read (读取),然后选择 GetObject。
-
展开 Write(写入),然后选择PutObject 和 DeleteObject。
-
展开 Permissions management(权限管理),然后选择PutObjectAcl。如果您计划将文件上传到其他账户拥有的存储桶,并且此账户需要完全控制存储桶内容,则需要此权限。
对象权限是 Amazon S3 中的对象操作的权限。您必须为存储桶中的对象而不是存储桶本身授予这些权限。有关更多信息,请参阅对象操作权限。
-
-
选择资源,然后执行以下操作:
-
选择特定。
-
对于桶,选择添加 ARN。输入桶 ARN。桶名称会自动填入。然后,选择 Add (添加)。
-
如果显示了对象资源,请选择添加 ARN 以手动添加资源,或者选择任意。
注意
您可以将 Amazon 资源名称 (ARN) 设置为更具体的 ARN 值,以允许 Amazon RDS 仅访问 Amazon S3 存储桶中的特定文件或文件夹。有关如何为 Amazon S3 定义访问策略的更多信息,请参阅管理您的 Amazon S3 资源的访问权限。
-
-
(可选)选择 Add additional permissions (添加其他权限),向策略中添加资源。例如,执行以下操作:
-
如果您的存储桶使用自定义 KMS 密钥加密,请为该服务选择 KMS。
-
对于手动操作,请选择以下选项:
-
Encrypt
-
重新加密起点和重新加密终点
-
Decrypt
-
DescribeKey
-
GenerateDataKey
-
-
对于资源,选择特定。
-
对于密钥,选择添加 ARN。输入自定义密钥的 ARN 作为资源,然后选择添加。
有关更多信息,请参阅 Amazon Simple Storage Service 用户指南中的使用在 Amazon Key Management Service (SSE-KMS) 中存储 KMS 密钥的服务器端加密保护数据。
-
如果想要 Amazon RDS 访问其他存储桶,请为这些存储桶添加 ARN。您也可以根据需要授予访问 Amazon S3 中所有存储桶和对象的权限。
-
-
选择 Next: Tags (下一步: 标签),然后选择 Next: Review (下一步: 审核)。
-
对于 Name (名称),请为您的 IAM 策略输入名称,例如
rds-s3-integration-policy
。在创建 IAM 角色与您的数据库实例关联时,需要使用此名称。您也可以添加可选的 Description (描述) 值。 -
选择创建策略。
创建向 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 命令使用这些选项创建一个名为
的 IAM 策略。该策略授予对名为 rds-s3-integration-policy
的存储桶的访问权限。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 值
创建或编辑存储桶策略
登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在 Buckets (存储桶) 列表中,请选择要为其创建或编辑存储桶策略的存储桶的名称。
-
选择权限。
-
在 Bucket policy (存储桶策略) 下,请选择 Edit (编辑)。这将打开编辑存储桶策略页面。
-
在 Edit bucket policy(编辑存储桶策略)页面上,探索《Amazon S3 用户指南》中的 Policy examples(策略示例),选择 Policy generator(策略生成器)自动生成策略,或者在 Policy(策略)部分编辑 JSON。
如果选择 Policy generator(策略生成器)则 Amazon 策略生成器将在新的窗口中打开。
-
在 Amazon 策略生成器页面,在 Select Type of Policy(选择策略类型)中,请选择 S3 存储桶Policy(S3 存储桶策略)。
-
通过在提供的字段中输入信息来添加语句,然后选择 Add Statement(添加语句)。对所有您想添加的语句重复执行此操作。有关这些字段的更多信息,请参阅 IAM 用户指南中的 IAM JSON 策略元素参考。
注意
为方便起见,Edit bucket policy(编辑存储桶策略)页面会在 Policy(策略)文本字段上方显示当前存储桶的 Bucket ARN (Amazon 资源名称)。您可以复制此 ARN,以便在 Amazon 策略生成器页面上的语句中使用。
-
添加完语句后,请选择生成策略。
-
复制生成的策略文本,请选择 Close(关闭),然后返回到 Amazon S3 控制台中的 Edit bucket policy(编辑存储桶策略)页面。
-
-
在 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
/*" ] } ] } -
请选择 Save changes(保存更改),此操作将让您返回到存储桶权限页面。
步骤 3:为您的数据库实例创建 IAM 角色并附加策略
此步骤假定您已在步骤 1:为 Amazon RDS 角色创建 IAM 策略中创建了 IAM 策略。在此步骤中,您将为 RDS for Oracle 数据库实例创建一个角色,然后将策略附加到该角色。
创建 IAM 角色以允许 Amazon RDS 访问 Amazon S3 桶
-
打开 IAM 管理控制台
。 -
在导航窗格中,选择角色。
-
选择 Create role(创建角色)。
-
选择 Amazon 服务。
-
对于其他 Amazon 服务的使用案例:,选择 RDS,然后选择 RDS – 向数据库添加角色。然后选择下一步。
-
对于权限策略下面的搜索,请输入您在步骤 1:为 Amazon RDS 角色创建 IAM 策略中创建的 IAM policy 的名称,然后当策略在列表中显示时选择该策略。然后选择下一步。
-
对于角色名称,输入 IAM 角色的名称,例如
rds-s3-integration-role
。您也可以添加可选的描述值。 -
选择 Create role(创建角色)。
创建一个角色并向该角色附加策略
-
创建一个让 Amazon RDS 可代表您访问 Amazon S3 存储桶的 IAM 角色。
我们建议在基于资源的信任关系中使用
aws:SourceArn
和aws: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 用户委派权限的角色。
-
-
创建角色之后,记下该角色的 ARN。后续步骤需要该 ARN。
-
将您创建的策略附在您创建的角色上。
以下 Amazon CLI 命令将策略附加到名为
的角色。rds-s3-integration-role
例
对于 Linux、macOS 或 Unix:
aws iam attach-role-policy \ --policy-arn
your-policy-arn
\ --role-namerds-s3-integration-role
对于 Windows:
aws iam attach-role-policy ^ --policy-arn
your-policy-arn
^ --role-namerds-s3-integration-role
将
替换为您在上一步中记下的策略 ARN。your-policy-arn
步骤 4:将您的 IAM 角色与 RDS for Oracle 数据库实例关联
配置进行 Amazon S3 集成的权限的最后一步是将您的 IAM 角色与数据库实例相关联。请注意以下要求:
-
您必须具有访问 IAM 角色的权限,并向此角色附加所需的 Amazon S3 权限策略。
-
您一次只能将一个 IAM 角色与 RDS for Oracle 数据库实例关联。
-
数据库实例必须处于可用状态。
将您的 IAM 角色与 RDS for Oracle 数据库实例关联
登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
从导航窗格中选择 Databases (数据库)。
-
选择 RDS for Oracle 数据库实例名称以显示其详细信息。
-
在 Connectivity & security(连接性和安全性)选项卡上,向下滚动到页面底部的 Manage IAM roles(管理 IAM 角色)部分。
-
对于向此实例添加 IAM 角色,选择您在步骤 3:为您的数据库实例创建 IAM 角色并附加策略中创建的角色。
-
对于 Feature (功能),选择 S3_INTEGRATION。
-
选择 Add role (添加角色)。
以下 Amazon CLI 命令将角色添加到名为
的 Oracle 数据库实例。mydbinstance
例
对于 Linux、macOS 或 Unix:
aws rds add-role-to-db-instance \ --db-instance-identifier
mydbinstance
\ --feature-name S3_INTEGRATION \ --role-arnyour-role-arn
对于 Windows:
aws rds add-role-to-db-instance ^ --db-instance-identifier
mydbinstance
^ --feature-name S3_INTEGRATION ^ --role-arnyour-role-arn
将
替换为您在上一步中记下的角色 ARN。必须为 your-role-arn
S3_INTEGRATION
选项指定 --feature-name
。