You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过IAM角色策略限制仅访问单个Glue Catalog数据库?

问题分析与解决方案

第一次尝试失败原因

你第一次的策略只拒绝了glue:GetDatabase操作,但AWS Glue控制台列出所有数据库时会调用glue:GetDatabases(复数)接口,这个操作未被你的拒绝语句覆盖,所以角色依然能看到所有数据库。另外,在存在全权限托管策略的前提下,NotResource的拒绝逻辑仅能阻止非指定资源的单个操作,无法拦截控制台调用的其他未限制接口,导致权限控制失效。

第二次尝试加载失败原因

使用NotResource的拒绝语句会拦截白名单表访问时的关联操作——比如控制台获取数据库元信息、Glue目录信息等,这些操作的资源不在NotResource的豁免范围内,被拒绝策略阻断后就会出现无限加载的情况。

正确的IAM策略写法

遵循最小权限原则,移除AWSGlueConsoleFullAccess托管策略,改用自定义策略实现精准控制:只允许访问白名单数据库及其下属表,同时拒绝所有其他Glue资源的访问。示例策略如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowAccessToWhitelistDatabase",
            "Effect": "Allow",
            "Action": [
                "glue:GetDatabase",
                "glue:GetTables",
                "glue:GetTable",
                "glue:GetPartitions",
                "glue:GetPartition",
                "glue:BatchGetTables",
                "glue:BatchGetPartition"
            ],
            "Resource": [
                "arn:aws:glue:${region}:${account_number}:database/${whitelist_db_name}",
                "arn:aws:glue:${region}:${account_number}:table/${whitelist_db_name}/*"
            ]
        },
        {
            "Sid": "DenyAllOtherGlueAccess",
            "Effect": "Deny",
            "Action": "glue:*",
            "NotResource": [
                "arn:aws:glue:${region}:${account_number}:database/${whitelist_db_name}",
                "arn:aws:glue:${region}:${account_number}:table/${whitelist_db_name}/*"
            ]
        }
    ]
}

策略说明

  1. 允许语句:明确授权针对白名单数据库及其所有表的核心操作,覆盖控制台和API访问所需的关键接口。
  2. 拒绝语句:拦截所有非白名单资源的Glue操作,彻底杜绝权限漏洞。
  3. 替换占位符:将${region}、${account_number}、${whitelist_db_name}替换为你的实际信息。

额外注意事项

  • 必须移除AWSGlueConsoleFullAccess托管策略:该策略的全权限会覆盖自定义策略的控制逻辑,导致权限规则失效。
  • 验证权限:使用IAM Access Analyzer或策略模拟工具验证权限效果,确保没有遗漏必要操作。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:32:45