使用CloudFormation创建Glue/Athena表时遇跨账号权限错误求助
我在使用子AWS账号通过CloudFormation创建Glue/Athena表时,收到错误提示:
Cross account access is not supported for account that hasn't imported Athena catalog to Glue. Please refer to documentation: https://docs.aws.amazon.com/athena/latest/ug/glue-upgrade.html (Service: AWSGlue; Status Code: 400; Error Code: AccessDeniedException; Request ID:
; Proxy: null)
已确认账号已完成Athena到Glue数据目录的升级(控制台无Upgrade选项),子账号配置了glue:*、athena:*、s3:*全权限,通过CLI能正常执行列表Glue目录、查询表、创建表等操作,但CloudFormation始终报错。以下是可行的排查和解决步骤:
检查CloudFormation执行角色权限
若CloudFormation使用了自定义执行角色,需确保该角色拥有glue:CreateTable、glue:GetDatabase等必要权限,同时角色的信任策略允许当前子账号扮演该角色。确认模板资源归属
检查CloudFormation模板中是否误引用了其他账号的资源(如S3桶、数据库),即使是同账号资源,也要核对ARN或名称拼写,避免系统误判为跨账号访问。显式指定Glue数据目录ID
在模板的Glue表资源中添加CatalogId属性,明确指定当前账号ID,避免系统默认识别错误:Resources: TargetGlueTable: Type: AWS::Glue::Table Properties: CatalogId: !Ref AWS::AccountId DatabaseName: your-target-db TableInput: Name: your-table-name # 其他表结构、存储配置验证Athena数据目录配置
通过CLI确认当前账号的Athena数据目录类型:aws athena get-data-catalog --name AwsDataCatalog确保返回结果中
Type字段为GLUE,且Parameters内的catalogId与当前账号ID一致。排查S3资源权限(若涉及)
如果表数据存储在S3桶中,需确保CloudFormation执行角色拥有该桶的访问权限,避免因S3权限问题间接触发跨账号错误提示。
内容的提问来源于stack exchange,提问作者Michael Barrowman

