将 Amazon S3 表类数据存储服务与 Amazon 分析服务结合使用
要使 Amazon 分析服务可以访问您账户中的表,您可以将 Amazon S3 表存储桶与 Amazon SageMaker 智能湖仓集成。这种集成支持 Amazon 分析服务自动发现和访问您的表数据。您可以使用此集成在以下服务中处理表:
注意
此集成使用 Amazon Glue 和 Amazon Lake Formation 服务,可能会产生 Amazon Glue 请求和存储成本。有关更多信息,请参阅 Amazon Glue 定价
在 S3 表上运行查询需支付额外费用。有关更多信息,请参阅您使用的查询引擎的定价信息。
集成的工作原理
当您在控制台中创建表存储桶时,Amazon S3 会启动以下操作,来将您选择的区域中的表存储桶与 Amazon 分析服务集成:
-
创建一个新的 Amazon Identity and Access Management(IAM)服务角色,该角色授予 Lake Formation 访问所有表存储桶的权限。
-
使用服务角色,Lake Formation 在当前区域中注册表存储桶。这可让 Lake Formation 管理该区域中所有当前和将来的表存储桶的访问、权限和治理。
-
将
s3tablescatalog
目录添加到当前区域中的 Amazon Glue Data Catalog。添加s3tablescatalog
目录后,就可以在数据目录中填充所有表存储桶、命名空间和表。
注意
这些操作通过 Amazon S3 控制台自动完成。如果您以编程方式执行此集成,则必须手动执行所有这些操作。
您可以为每个 Amazon 区域集成一次表存储桶。完成集成后,所有当前和将来的表存储桶、命名空间和表都将添加到该区域中的 Amazon Glue Data Catalog。
下图显示了 s3tablescatalog
目录如何自动将当前区域中的表存储桶、命名空间和表填充为数据目录中的相应对象。表存储桶以子目录的形式填充。表存储桶中的命名空间以数据库的形式填充到其各自的子目录中。表以表的形式填充到各自的数据库中。

权限的工作原理
我们建议将表存储桶与 Amazon 分析服务集成,以便您可以跨使用 Amazon Glue Data Catalog 作为元数据存储的服务处理表数据。该集成通过 Amazon Lake Formation 支持精细的访问控制。这种安全方法意味着,除了 Amazon Identity and Access Management(IAM)权限外,您还必须向 IAM 主体授予对表的 Lake Formation 权限,然后才能使用这些表。
Amazon Lake Formation 中有两种主要类型的权限:
-
元数据访问权限控制着在数据目录中创建、读取、更新和删除元数据数据库和表的能力。
-
基础数据访问权限控制着对数据目录资源指向的基础 Amazon S3 位置读取和写入数据的能力。
Lake Formation 结合使用自己的权限模型和 IAM 权限模型,来控制对数据目录资源和基础数据的访问权限:
-
为了使访问数据目录资源或基础数据的请求取得成功,请求必须通过由 IAM 和 Lake Formation 进行的权限检查。
-
IAM 权限控制对 Lake Formation 和 Amazon Glue API 以及资源的访问权限,而 Lake Formation 权限控制对数据目录资源、Amazon S3 位置和基础数据的访问权限。
Lake Formation 权限仅适用于授予这些权限的区域,并且主体必须由数据湖管理员或其它具有必要权限的主体授权,才能获得 Lake Formation 权限。
有关更多信息,请参阅《Amazon Lake Formation 开发人员指南》中的 Lake Formation 权限概览。
请确保按照集成的先决条件和将表存储桶与 Amazon 分析服务集成中的步骤进行操作,以便您拥有访问 Amazon Glue Data Catalog 和表资源以及使用 Amazon 分析服务的相应权限。
重要
如果您不是为您的账户执行表存储桶与 Amazon 分析服务集成的用户,则必须向您授予对表的必要 Lake Formation 权限。有关更多信息,请参阅 授予对表或数据库的权限。
集成的先决条件
要将表存储桶与 Amazon 分析服务集成,需要满足以下先决条件:
将 AWSLakeFormationDataAdmin Amazon 托管式策略附加到 Amazon Identity and Access Management(IAM)主体,以使该用户成为数据湖管理员。有关如何创建数据湖管理员的更多信息,请参阅《Amazon Lake Formation Developer Guide》中的 Create a data lake administrator。
-
向 IAM 主体添加
glue:PassConnection
操作的权限。 -
向 IAM 主体添加
lakeformation:RegisterResource
和lakeformation:RegisterResourceWithPrivilegedAccess
操作的权限。
重要
创建表时,请确保在表名称和表定义中全部使用小写字母。例如,请确保列名称全部为小写。如果表名称或表定义包含大写字母,则 Amazon Lake Formation 或 Amazon Glue Data Catalog 不支持该表。在这种情况下,Amazon Athena 等 Amazon 分析服务将无法看到您的表,即使表存储桶与 Amazon 分析服务集成,也不例外。
如果表定义包含大写字母,则在 Athena 中运行 SELECT
查询时会收到以下错误消息:“GENERIC_INTERNAL_ERROR: Get table request failed: com.amazonaws.services.glue.model.ValidationException: Unsupported Federation Resource - Invalid table or column names.”
将表存储桶与 Amazon 分析服务集成
每个 Amazon 区域必须完成一次此集成。
重要
Amazon 分析服务集成现在可在 registerResource
Lake Formation API 操作中使用 WithPrivilegedAccess
选项来注册 S3 表存储桶。现在,集成还会通过在 CreateCatalog
Amazon Glue API 操作中使用 AllowFullTableExternalDataAccess
选项来在 Amazon Glue Data Catalog 中创建 s3tablescatalog
目录。
如果您使用预览版设置集成,则可以继续使用当前的集成。但是,更新的集成流程提供了性能改进,因此我们建议进行迁移。要迁移到更新的集成,请参阅迁移到更新的集成流程。
通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 在左侧导航窗格中,选择表存储桶。
选择创建表存储桶。
此时将打开创建表存储桶页面。
输入表存储桶名称,并确保选中启用集成复选框。
选择创建表存储桶。Amazon S3 将尝试自动在该区域中集成您的表存储桶。
首次在任何区域中集成表存储桶时,Amazon S3 都会代表您创建一个新的 IAM 服务角色。此角色可让 Lake Formation 访问您账户中的所有表存储桶,并以联合身份验证方式访问 Amazon Glue Data Catalog 中的表。
使用 Amazon CLI 集成表存储桶
以下步骤展示了如何使用 Amazon CLI 来集成表存储桶。要使用这些步骤,请将
替换为您自己的信息。user input placeholders
创建表存储桶。
aws s3tables create-table-bucket \ --region
us-east-1
\ --nameamzn-s3-demo-table-bucket
-
创建可让 Lake Formation 访问表资源的 IAM 服务角色。
-
创建一个名为
Role-Trust-Policy.json
的文件,其中包含以下信任策略:{ "Version": "2012-10-17", "Statement": [ { "Sid": "LakeFormationDataAccessPolicy", "Effect": "Allow", "Principal": { "Service": "lakeformation.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:SetContext", "sts:SetSourceIdentity" ], "Condition": { "StringEquals": { "aws:SourceAccount": "
111122223333
" } } } ] }使用以下命令创建 IAM 服务角色:
aws iam create-role \ --role-name
S3TablesRoleForLakeFormation
\ --assume-role-policy-document file://Role-Trust-Policy.json
-
创建一个名为
LF-GluePolicy.json
的文件,其中包含以下策略:{ "Version": "2012-10-17", "Statement": [ { "Sid": "LakeFormationPermissionsForS3ListTableBucket", "Effect": "Allow", "Action": [ "s3tables:ListTableBuckets" ], "Resource": [ "*" ] }, { "Sid": "LakeFormationDataAccessPermissionsForS3TableBucket", "Effect": "Allow", "Action": [ "s3tables:CreateTableBucket", "s3tables:GetTableBucket", "s3tables:CreateNamespace", "s3tables:GetNamespace", "s3tables:ListNamespaces", "s3tables:DeleteNamespace", "s3tables:DeleteTableBucket", "s3tables:CreateTable", "s3tables:DeleteTable", "s3tables:GetTable", "s3tables:ListTables", "s3tables:RenameTable", "s3tables:UpdateTableMetadataLocation", "s3tables:GetTableMetadataLocation", "s3tables:GetTableData", "s3tables:PutTableData" ], "Resource": [ "arn:aws:s3tables:
us-east-1
:111122223333
:bucket/*" ] } ] }使用以下命令将策略附加到角色:
aws iam put-role-policy \ --role-name
S3TablesRoleForLakeFormation
\ --policy-name LakeFormationDataAccessPermissionsForS3TableBucket \ --policy-document file://LF-GluePolicy.json
-
-
创建一个名为
input.json
的文件,其中包含以下内容:{ "ResourceArn": "arn:aws:s3tables:
us-east-1
:111122223333
:bucket/*", "WithFederation": true, "RoleArn": "arn:aws:iam::111122223333
:role/S3TablesRoleForLakeFormation
" }使用以下命令在 Lake Formation 中注册表存储桶:
aws lakeformation register-resource \ --region
us-east-1
\ --with-privileged-access \ --cli-input-json file://input.json
-
创建一个名为
catalog.json
的文件,其中包含以下目录:{ "Name": "s3tablescatalog", "CatalogInput": { "FederatedCatalog": { "Identifier": "arn:aws:s3tables:
us-east-1
:111122223333
:bucket/*", "ConnectionName": "aws:s3tables" }, "CreateDatabaseDefaultPermissions":[], "CreateTableDefaultPermissions":[] } }使用以下命令创建
s3tablescatalog
目录。创建此目录后,将使用与表存储桶、命名空间和表对应的对象填充 Amazon Glue Data Catalog。aws glue create-catalog \ --cli-input-json file://
catalog.json
使用以下命令验证是否在 Amazon Glue 中添加了
s3tablescatalog
目录:aws glue get-catalog --catalog-id s3tablescatalog
Amazon 分析服务集成流程已更新。如果您已使用预览版设置了集成,则可以继续使用当前的集成。但是,更新的集成流程提供了性能改进,因此我们建议使用以下步骤进行迁移。有关迁移或集成流程的更多信息,请参阅《Amazon Lake Formation Developer Guide》中的 Creating an Amazon S3 Tables catalog in the Amazon Glue Data Catalog。
-
打开 Amazon Lake Formation 控制台(网址为 https://console.amazonaws.cn/lakeformation/
),并以数据湖管理员身份登录。有关如何创建数据湖管理员的更多信息,请参阅《Amazon Lake Formation Developer Guide》中的 Create a data lake administrator。 -
通过执行以下操作删除
s3tablescatalog
目录:-
在左侧导航窗格中,选择目录。
-
在目录列表中,选择
s3tablescatalog
目录旁边的选项按钮。在操作 菜单上,选择删除。
-
-
通过执行以下操作注销
s3tablescatalog
目录的数据位置:-
在左侧导航窗格中,转到管理部分,然后选择数据湖位置。
-
例如,选择
s3tablescatalog
数据湖位置(例如s3://tables:
)旁边的选项按钮。region
:account-id
:bucket/* -
在操作菜单上,选择移除。
-
在出现的确认对话框中,选择移除。
-
-
现在,您已经删除了
s3tablescatalog
目录和数据湖位置,可以按照以下步骤,使用更新的集成流程将表存储桶与 Amazon 分析服务集成。
注意
如果您想在集成的 Amazon 分析服务中使用通过 SSE-KMS 加密的表,则您使用的角色需要拥有使用您的 Amazon KMS 密钥进行加密操作的权限。有关更多信息,请参阅 向 IAM 主体授予在集成的 Amazon 分析服务中使用加密表的权限。
创建指向表的命名空间的资源链接(Amazon Data Firehose)
要访问表,Amazon Data Firehose 需要一个以表的命名空间为目标的资源链接。资源链接是一个数据目录对象,它充当指向另一个数据目录资源(如数据库或表)的别名或指针。该链接存储在创建该链接的账户或区域的数据目录中。有关更多信息,请参阅《Amazon Lake Formation Developer Guide》中的 How resource links work。
将表存储桶与 Amazon 分析服务集成后,可以创建资源链接,以便在 Amazon Data Firehose 中使用表。有关创建这些链接的更多信息,请参阅使用 Amazon Data Firehose 将数据流式传输到表。
授予对表资源的 Lake Formation 权限
在表存储桶与 Amazon 分析服务集成后,Lake Formation 将管理对表资源的访问权限。Lake Formation 使用其自己的权限模型(Lake Formation 权限),该模型可以对数据目录资源进行精细的访问控制。Lake Formation 要求向每个 IAM 主体(用户或角色)授权对 Lake Formation 管理的资源执行操作。有关更多信息,请参阅《Amazon Lake Formation 开发人员指南》中的 Lake Formation 权限概览。有关跨账户数据共享的信息,请参阅《Amazon Lake Formation Developer Guide》中的 Cross-account data sharing in Lake Formation。
在 IAM 主体可以访问 Amazon 分析服务中的表之前,您必须向这些主体授予对这些资源的 Lake Formation 权限。
注意
如果您是执行表存储桶集成的用户,则您已经拥有对表的 Lake Formation 权限。如果您是唯一将访问表的主体,则可以跳过此步骤。您只需向其它 IAM 主体授予对表的 Lake Formation 权限即可。这可让其它主体在运行查询时访问该表。有关更多信息,请参阅 授予对表或数据库的权限。
您必须向其它 IAM 主体授予对表资源的 Lake Formation 权限,才能在以下服务中使用这些资源:
-
Amazon Redshift
-
Amazon Data Firehose
-
Amazon QuickSight
-
Amazon Athena
注意
对于 Amazon Data Firehose(它使用资源链接访问表),必须分别授予对资源链接和目标(链接)命名空间的权限。有关更多信息,请参阅 授予对资源链接的权限。
授予对表或数据库的权限
您可以通过 Lake Formation 控制台或 Amazon CLI,向主体授予对表存储桶中表或数据库的 Lake Formation 权限。
注意
当您将对数据目录资源的 Lake Formation 权限授予外部账户或直接授予其他账户中的 IAM 主体时,Lake Formation 会使用 Amazon Resource Access Manager (Amazon RAM) 服务共享该资源。如果被授权者账户与授予者账户在同一个组织中,则被授权者立即可以使用共享资源。如果被授权者账户不在同一个组织中,则 Amazon RAM 会向被授权者账户发送邀请,以便其接受或拒绝资源授权。然后,要使共享资源可用,被授权者账户中的数据湖管理员必须使用 Amazon RAM 控制台或 Amazon CLI 接受邀请。有关跨账户数据共享的更多信息,请参阅《Amazon Lake Formation Developer Guide》中的 Cross-account data sharing in Lake Formation。