手动为 SQL Server Audit 创建 IAM 角色 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

手动为 SQL Server Audit 创建 IAM 角色

通常,当您创建新选项时,Amazon Web Services Management Console会为您创建 IAM 角色和 IAM 信任策略。但是,您可以手动创建与 SQL Server Audit 一起使用的新 IAM 角色,以便您可以根据自己的任何附加需求对其进行定制。为此,创建一个 IAM 角色并委托权限,以便 Amazon RDS 服务可使用您的 Amazon S3 存储桶。创建这个 IAM 角色时,附加信任和权限策略。信任策略允许 Amazon RDS 担任此角色。权限策略定义此角色可以执行的操作。有关更多信息,请参阅 Amazon Identity and Access Management 用户指南中的创建角色以向 Amazon 服务委托权限

您可以使用本节中的示例来创建所需的信任关系和权限策略。

以下示例显示了 SQL Server Audit 的信任关系。该关系使用服务主体 rds.amazonaws.com 来允许 RDS 写入到 S3 存储桶。服务委托人是一个标识符,用于向服务授予权限。任何时候您通过这种方式允许访问 rds.amazonaws.com,即表示您允许 RDS 代表您执行操作。有关服务委托人的更多信息,请参阅 Amazon JSON 策略元素:Principal

例 SQL Server Audit 的信任关系
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

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

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

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

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

在信任关系中,请务必使用 aws:SourceArn 全局条件上下文键和访问角色资源的完整 Amazon Resource Name (ARN)。对于 SQL Server Audit,请确保同时包含数据库选项组和数据库实例,如以下示例所示。

例 与 SQL Server Audit 的全局条件上下文键的信任关系
{ "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", "arn:aws:rds:Region:my_account_ID:og:option_group_name" ] } } } ] }

在以下 SQL Server Audit 权限策略示例中,我们为 Amazon S3 存储桶指定 ARN。您可以使用 ARN 来识别您想要为其授予访问权的特定账户、用户或角色。有关使用 ARN 的更多信息,请参阅 Amazon Resource Name (ARN)

例 SQL Server Audit 的权限策略
{ "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:PutObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*" } ] }
注意

要验证同一 s3:ListAllMyBuckets 账户是否同时拥有 S3 存储桶和 SQL Server 数据库实例,需要执行 Amazon 操作。该操作会列出该账户中的存储桶的名称。

S3 存储桶命名空间是全局的。如果您意外删除了您的存储桶,则另一用户可以在其他账户中创建具有相同名称的存储桶。然后将 SQL Server Audit 数据写入新的存储桶。