将 RDS for SQL Server 与 S3 集成的先决条件
在开始之前,请找到或创建要使用的 S3 存储桶。另外,添加权限,以便 RDS 数据库实例可以访问 S3 存储桶。要配置此访问权限,请同时创建 IAM 策略和 IAM 角色。
创建用于访问 Amazon S3 的 IAM 策略
-
在 IAM 管理控制台
中,选择导航窗格中的策略。 -
创建新策略,并使用 Visual editor (可视化编辑器) 选项卡执行以下步骤。
-
对于 Service (服务),输入
S3
,然后选择 S3 服务。 -
对于操作,选择以下各项以授予数据库实例所需的访问权限:
-
ListAllMyBuckets
– 必需 -
ListBucket
– 必需 -
GetBucketACL
– 必需 -
GetBucketLocation
– 必需 -
GetObject
– 将文件从 S3 下载到 所必需D:\S3\
-
PutObject
– 将文件从D:\S3\
上传到 S3 所必需 -
ListMultipartUploadParts
– 将文件从D:\S3\
上传到 S3 所必需 -
AbortMultipartUpload
– 将文件从D:\S3\
上传到 S3 所必需
-
-
对于 Resources (资源),显示的选项取决于您在上一步中选择的操作。您可能会看到针对 bucket (存储桶) 和/或 object (对象) 的选项。对于其中的每一个,添加适当的 Amazon Resource Name (ARN)。
对于 bucket (存储桶),为要使用的存储桶添加 ARN。例如,如果存储桶名为
amzn-s3-demo-bucket
,请将 ARN 设置为arn:aws:s3:::
。amzn-s3-demo-bucket
对于 object (对象),为存储桶输入 ARN,然后选择以下各项之一:
-
要授予对指定存储桶中所有文件的访问权限,请为 Bucket name (存储桶名称) 和 Object name (对象名称) 选择 Any (任何)。
-
要授予对存储桶中特定文件或文件夹的访问权限,请提供您希望 SQL Server 访问的特定存储桶和对象的 ARN。
-
-
按照控制台中的说明进行操作,直到您完成策略创建。
前面是设置策略的简要指南。有关创建 IAM 策略的更多详细说明,请参阅 IAM 用户指南中的 创建 IAM 策略。
创建使用上一过程中的 IAM 策略的 IAM 角色
要授予 Amazon RDS 对 Amazon S3 存储桶的访问权限,请使用以下过程:
-
创建向 Amazon RDS 授予对 S3 存储桶的访问权限的 IAM 策略。
-
创建一个让 Amazon RDS 可代表您访问 S3 存储桶的 IAM 角色。
有关更多信息,请参阅《IAM 用户指南》中的创建向 IAM 用户委派权限的角色。
-
将您创建的 IAM 策略附加到您创建的 IAM 角色。
创建 IAM policy
包括适当的操作以授予数据库实例所需的访问权限:
-
ListAllMyBuckets
– 必需 -
ListBucket
– 必需 -
GetBucketACL
– 必需 -
GetBucketLocation
– 必需 -
GetObject
– 将文件从 S3 下载到 所必需D:\S3\
-
PutObject
– 将文件从D:\S3\
上传到 S3 所必需 -
ListMultipartUploadParts
– 将文件从D:\S3\
上传到 S3 所必需 -
AbortMultipartUpload
– 将文件从D:\S3\
上传到 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": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketACL", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket
" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket
/key_prefix
/*" } ] }'对于 Windows:
确保将行尾更改为您的界面支持的行尾(
^
而不是\
)。另外,在 Windows 中,您必须使用\
来转义所有双引号。为了避免需要转义 JSON 中的引号,您可以将其保存到文件中并将该文件作为参数传入。首先,创建包含以下权限策略的
policy.json
文件:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketACL", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket
/key_prefix
/*" } ] }然后使用以下命令创建策略:
aws iam create-policy ^ --policy-name
rds-s3-integration-policy
^ --policy-document file://file_path
/assume_role_policy.json -
创建策略之后,请记下策略的 Amazon Resource Name (ARN)。后续步骤需要该 ARN。
创建 IAM 角色
-
以下 Amazon CLI 命令创建
rds-s3-integration-role
IAM 角色来实现此目的。对于 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" } ] }'对于 Windows:
确保将行尾更改为您的界面支持的行尾(
^
而不是\
)。另外,在 Windows 中,您必须使用\
来转义所有双引号。为了避免需要转义 JSON 中的引号,您可以将其保存到文件中并将该文件作为参数传入。首先,创建包含以下策略的
assume_role_policy.json
文件:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "rds.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
然后使用以下命令创建 IAM 角色:
aws iam create-role ^ --role-name
rds-s3-integration-role
^ --assume-role-policy-document file://file_path
/assume_role_policy.json例 使用全局条件上下文键创建 IAM 角色
我们建议在基于资源的策略中使用
aws:SourceArn
和aws:SourceAccount
全局条件上下文键,以此限制服务对特定资源的权限。这是防范混淆代理问题最有效的方法。您可以使用这两个全局条件上下文键并让
aws:SourceArn
值包含账户 ID。在这种情况下,当aws:SourceAccount
值和aws:SourceArn
值中的账户使用相同策略语句时,确保二者使用相同的账户 ID。-
如果您想对单个资源进行跨服务访问,请使用
aws:SourceArn
。 -
如果您想允许该账户中的任何资源与跨服务使用操作相关联,请使用
aws:SourceAccount
。
在此策略中,请务必使用
aws:SourceArn
全局条件上下文键和访问角色资源的完整 Amazon Resource Name (ARN)。对于 S3 集成,请确保包含数据库实例 ARN,如以下示例所示。对于 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:SourceArn":"arn:aws:rds:Region
:my_account_ID
:db:db_instance_identifier
" } } } ] }'对于 Windows:
将全局条件上下文键添加至
assume_role_policy.json
。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "rds.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceArn":"arn:aws:rds:
Region
:my_account_ID
:db:db_instance_identifier
" } } } ] } -
将 IAM 策略附加到 IAM 角色
-
以下 Amazon CLI 命令将策略附加到名为
rds-s3-integration-role
的角色。将
替换为您在上一步中记下的策略 ARN。your-policy-arn
对于 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