我想使用 AWS Glue Data Catalog 和 AWS Lake Formation 共享资源解决 Amazon Athena 跨账户查询问题。
对 Data Catalog 或 Lake Formation 跨账户共享资源执行以下故障排除步骤。
如果您使用 Athena 跨账户 Data Catalog 功能访问另一个账户的目录,则可能会收到“access denied(访问被拒绝)”错误。例如,使用 GetDatabases 或 GetTable 等 Data Catalog API 操作可能会收到“access denied(访问被拒绝)”错误。如果您向其他账户的用户授予对 Amazon Simple Storage Service (Amazon S3) 存储桶的访问权限,也可能会收到“access denied(访问被拒绝)”错误。
这是因为跨账户查询需要从您自己的账户以外的账户访问 Data Catalog 和 Amazon S3 存储桶。
按照以下步骤检查您的 Data Catalog 和 Amazon S3 权限。
Data Catalog 权限
按照步骤将 Data Catalog 访问权限从所有者账户授予借用者账户。然后,授予 AWS Identity and Access Management (IAM) 策略权限,以授予借用者角色访问所有者账户的 Data Catalog 资源的权限。
有关详细信息,请参阅如何提供对 AWS Glue Data Catalog 资源的跨账户访问权限?
Amazon S3 权限
按照步骤使用 S3 存储桶策略向用户授予运行查询的跨账户访问权限。有关详细信息,请参阅如何提供对 Amazon S3 存储桶中的对象的跨账户访问权限?
对于使用自定义 AWS Key Management Service (AWS KMS) 密钥加密的 S3 存储桶,可能需要额外的权限。按照步骤授予对使用自定义 AWS KMS 密钥加密的存储桶的跨账户访问权限。有关详细信息,请参阅为什么跨账户用户在尝试访问由自定义 AWS KMS 密钥加密的 S3 对象时会收到“Access Denied(访问被拒绝)”错误?
按照以下步骤对您收到的 Lake Formation 跨账户错误消息进行故障排除。
“Insufficient Lake Formation permissions: Illegal combination(Lake Formation 权限不足:非法组合)”
出现此错误是因为在向 IAMAllowedPrincipals 组授予 Data Catalog 资源的 Lake Formation 权限时,用户共享了该资源。要解决此错误,用户必须在共享该资源之前撤消 IAMAllowedPrincipals 的所有 Lake Formation 权限。
“HIVE_METASTORE_ERROR: Table is missing storage descriptor(HIVE_METASTORE_ERROR:表缺少存储描述符)”
之所以出现此错误,是因为尚未授予目标表的权限。在资源链接上授予的权限不会授予关联数据库或目标表的权限。按照以下步骤明确授予目标表的权限。
有关详细信息,请参阅 Lake Formation 中资源链接的工作原理。
“Permission denied on S3 path(S3 路径上的权限被拒绝)”
当 IAM 角色没有权限从 S3 存储桶读取对象时,可能会出现此错误。例如,使用 AWS KMS 密钥查询属于所有者账户的加密数据时。在这种情况下,如果 IAM 角色无权解密另一个账户中的数据,则会出现此错误。
如果您使用默认 AWSServiceRoleForLakeFormationDataAccess 服务关联角色,请创建自定义 IAM 角色。确保 IAM 角色与其他账户共享所需的 AWS KMS 密钥权限。将密钥策略添加到所有者账户。然后使用新的 IAM 角色在 Lake Formation 中重新注册存储桶。
有关详细信息,请参阅 Lake Formation 问题故障排除。
为什么我的 MSCK REPAIR TABLE 查询无法向 AWS Glue Data Catalog 添加分区?
如何对 Athena 中的 Lake Formation 权限问题进行故障排除?
使用 Amazon Athena 查询跨账户 AWS Glue Data Catalog
rePost Polyglot
已提问 3 年前
Tyler
已发布 2 年前