本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
对 Lake Formation 问题进行故障排除
如果您在使用 AWS Lake Formation 时遇到问题,请查阅本节中的主题。
一般故障排除
使用此处的信息可帮助您诊断和修复各种 Lake Formation 问题。
错误:对 <Amazon S3 位置> 的 Lake Formation 权限不足
试图创建或更改数据目录资源,但不具有对该资源指向的 Amazon S3 位置的数据位置权限。
如果数据目录数据库或表指向 Amazon S3 位置,则在授予 Lake Formation 权限 CREATE_TABLE
或 ALTER
时,您还必须授予对该位置的 DATA_LOCATION_ACCESS
权限。如果要向外部账户或组织授予这些权限,您必须包含授予选项。
向外部账户授予这些权限后,该账户中的数据湖管理员必须向该账户中的主体(用户或角色)授予这些权限。在授予从其他账户获得的DATA_LOCATION_ACCESS
权限时,必须指定所有者AWS 账户的目录 ID(账户 ID)。拥有者账户是注册了该位置的账户。
错误:“Glue 的加密密钥权限不足API”
有人试图授予 Lake Formation 权限,但对加密数据目录的 AWS KMS 加密密钥不具有 AWS Identity and Access Management (IAM) 权限。
我 Amazon Athena 或使用清单的 Amazon Redshift 查询失败了
Lake Formation 不支持使用清单的查询。
错误:“Lake Formation 权限不足:需要在目录上创建标签”
用户/角色必须是数据湖管理员。
删除无效的数据湖管理员时出错
您应同时删除所有无效的数据湖管理员(已删除的定义为数据湖管理员的IAM角色)。如果尝试单独删除无效的数据湖管理员,Lake Formation 会引发无效主体错误。
对跨账户访问问题进行故障排除
使用此处的信息可帮助您诊断和修复跨账户访问问题。
主题
我授予了跨账户 Lake Formation 权限,但接收者看不到资源。
-
接收者账户中的用户是否为数据湖管理员? 只有数据湖管理员才能在共享时看到资源。
-
您是否在使用命名资源方法与组织外部的账户共享? 如果是,则接收方账户的数据湖管理员必须接受 AWS Resource Access Manager (AWS RAM) 中的资源共享邀请。
有关更多信息,请参阅 接受来自的资源共享邀请 AWS RAM。
-
您是否在中使用账户级(数据目录)资源策略 AWS Glue? 如果是,则如果您使用命名资源方法,则必须在策略中包含授权 AWS RAM 代表您共享策略的特殊声明。
有关更多信息,请参阅 同时使用两者管理跨账户权限 AWS Glue 和 Lake Formation。
-
您是否拥有授予跨账户访问权限所需的 AWS Identity and Access Management (IAM) 权限?
有关更多信息,请参阅 先决条件。
-
您已对其授予权限的资源不得具有向
IAMAllowedPrincipals
组授予的任何 Lake Formation 权限。 -
账户级策略中是否有关于资源的
deny
语句?
接收者账户中的主体可以看到数据目录资源,但无法访问基础数据
收款人账户中的委托人必须具有必需的 AWS Identity and Access Management (IAM) 权限。有关详细信息,请参阅访问共享表的基础数据。
接受 AWS RAM 资源共享邀请时出现错误:“由于调用方未获得授权,关联失败”
在向其他账户授予对资源的访问权限后,当接收账户尝试接受资源共享邀请时,操作将失败。
$ aws ram get-resource-share-associations --association-type PRINCIPAL --resource-share-arns arn:aws:ram:
aws-region
:444444444444:resource-share/e1d1f4ba-xxxx-xxxx-xxxx-xxxxxxxx5d8d { "resourceShareAssociations": [ { "resourceShareArn": "arn:aws:ram:aws-region
:444444444444:resource-share/e1d1f4ba-xxxx-xxxx-xxxx-xxxxxxxx5d8d ", "resourceShareName": "LakeFormation-MMCC0XQBH3Y", "associatedEntity": "5815803XXXXX", "associationType": "PRINCIPAL", "status": "FAILED", "statusMessage": "Association failed because the caller was not authorized.", "creationTime": "2021-07-12T02:20:10.267000+00:00", "lastUpdatedTime": "2021-07-12T02:20:51.830000+00:00", "external": true } ] }
之所以出现错误,是因为glue:PutResourcePolicy
由调用的 AWS Glue 当接收账户接受资源共享邀请时。要解决此问题,请允许生产者/授予者账户使用的代入角色执行 glue:PutResourcePolicy
操作。
错误:“无权授予对资源的权限”
试图授予对另一个账户拥有的数据库或表的跨账户权限。当与您的账户共享数据库或表时,作为数据湖管理员,您只能向账户中的用户授予对数据库或表的权限。
错误:“检索 AWS 组织信息的访问权限被拒绝”
您的账户是 Or AWS ganizations 管理账户,并且您没有检索组织信息(例如账户中的组织单位)所需的权限。
有关更多信息,请参阅 Required permissions for cross-account grants。
错误:“未找到组织 <organization-ID>”
尝试与组织共享资源,但未启用与 Organizations 的共享。启用与 Organizations 的资源共享。
有关更多信息,请参阅《AWS RAM 用户指南》中的 “启用与 Org AWS anizations 共享”。
错误:“Lake Formation 权限不足:非法组合”
用户共享了数据目录资源,同时向 IAMAllowedPrincipals
组授予了该资源的 Lake Formation 权限。在共享资源之前,用户必须撤销 IAMAllowedPrincipals
的所有 Lake Formation 权限。
ConcurrentModificationException 关于向外部账户发出的批准/撤销请求
当用户根据 LF-Tag 策略向委托人提出多个并发授予和/或撤销权限请求时,Lake Formation 就会抛出。 ConcurrentModificationException用户需要捕获异常,然后重试失败的授予/撤销请求。使用GrantPermissions
/RevokePermissions
API操作的批处理版本—— BatchGrantPermissions并通过减少并发的授予/撤销请求的数量在一定程度上BatchRevokePermissions缓解了这个问题。
使用 Amazon EMR 访问通过跨账户共享的数据时出错
当您使用 Amazon EMR 从另一个账户访问与您共享的数据时,某些 Spark 库会尝试调用Glue:GetUserDefinedFunctions
API操作。由于 AWS RAM 托管权限的版本 1 和 2 不支持此操作,因此您会收到以下错误消息:
"ERROR: User: arn:aws:sts::012345678901:assumed-role/my-spark-role/i-06ab8c2b59299508a is not authorized to perform: glue:GetUserDefinedFunctions on resource: arn:exampleCatalogResource because no resource-based policy allows the glue:GetUserDefinedFunctions action"
要解决此错误,创建资源共享的数据湖管理员必须更新附加到资源共享的 AWS RAM 托管权限。托管权限的版本 3 AWS RAM
允许主体执行 glue:GetUserDefinedFunctions
操作。
如果您创建新的资源共享,Lake Formation 会默认应用最新版本的 AWS RAM 托管权限,您无需执行任何操作。要为现有资源共享启用跨账户数据访问权限,您需要将 AWS RAM 托管权限更新为版本 3。
您可以在中查看分配给与您共享的资源的 AWS RAM 权限 AWS RAM。版本 3 中包含以下权限:
Databases AWSRAMPermissionGlueDatabaseReadWriteForCatalog AWSRAMPermissionGlueDatabaseReadWrite Tables AWSRAMPermissionGlueTableReadWriteForCatalog AWSRAMPermissionGlueTableReadWriteForDatabase AllTables AWSRAMPermissionGlueAllTablesReadWriteForCatalog AWSRAMPermissionGlueAllTablesReadWriteForDatabase
更新现有资源共享的 AWS RAM 托管权限版本
您(数据湖管理员)可以按照AWS RAM 用户指南中的说明将AWS RAM 托管权限更新到新版本,也可以撤消资源类型的所有现有权限并重新授予这些权限。如果您撤消权限,则 AWS RAM 会删除与该 AWS RAM 资源类型关联的资源共享。重新授予权限时, AWS RAM 会创建新的资源共享,并附上最新版本的 AWS RAM 托管权限。
对蓝图和工作流问题进行故障排除
使用此处的信息可帮助您诊断和修复蓝图和工作流问题。
主题
我的蓝图失败了,出现 “用户:<us ARN er-> 无权PassRole 在资源上执行:iam:<role-ARN >”
用户尝试创建蓝图,但该用户没有足够的权限来传递所选角色。
更新用户的IAM策略以使其能够传递角色,或者要求用户选择具有所需的 passrole 权限的其他角色。
有关更多信息,请参阅 Lake Formation 角色和IAM权限参考。
我的工作流程失败,原因是 “用户:<us ARN er-> 无权PassRole 在资源上执行:iam:<role-ARN >”
您为工作流指定的角色没有允许角色自行传递的内联策略。
有关更多信息,请参阅(可选)为工作流程创建IAM角色。
我的工作流中的爬网程序失败,并显示“资源不存在或请求者无权访问请求的权限”
一个可能的原因是传递的角色没有足够的权限在目标数据库中创建表。向该角色授予对数据库 CREATE_TABLE
权限。
我的工作流程中的爬虫失败,显示 “调用 CreateTable 操作时出现错误 (AccessDeniedException)...”
一个可能的原因是工作流角色对目标存储位置没有数据位置权限。向该角色授予数据位置权限。
有关更多信息,请参阅 DATA_LOCATION_ACCESS。