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

使用Terraform部署LakeFormation权限时遇AccessDeniedException问题求助

解决Terraform部署LakeFormation时非管理员调用者的AccessDeniedException问题

问题背景

用Terraform给Lambda角色配置Lake Formation的DATA_LOCATION_ACCESS权限时,碰到了AccessDeniedException:

  • 执行部署的是跨部门共享的服务用户,不是Lake Formation管理员
  • 已经确认目标S3桶无异常,试过把Lambda角色设为Lake Formation管理员也无法解决问题
  • 仅当给该服务用户本身添加对应权限时,部署才能正常运行,但希望避免提升它的权限等级

解决方案

1. 给调用者配置最小必要IAM策略

给该服务用户附加以下细粒度IAM策略,仅允许它针对特定资源调用Lake Formation的GrantPermissions API:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lakeformation:GrantPermissions",
            "Resource": [
                "arn:aws:lakeformation:*:<你的AWS账号ID>:data-location/s3://<目标S3桶名>/*",
                "arn:aws:lakeformation:*:<你的AWS账号ID>:principal/IAM_ROLE_ARN=<Lambda角色ARN>"
            ],
            "Condition": {
                "StringEquals": {
                    "lakeformation:Permissions": "DATA_LOCATION_ACCESS",
                    "lakeformation:PrincipalType": "IAM"
                }
            }
        }
    ]
}

将占位符替换为实际的AWS账号ID、目标S3桶名和Lambda角色ARN。

2. 在Lake Formation中给调用者授予数据位置的Grant权限

仅配置IAM策略还不够,需在Lake Formation控制台给该服务用户开通目标数据位置的Grant权限:

  • 打开Lake Formation控制台,进入「数据位置」页面
  • 找到目标S3桶,点击「编辑权限」
  • 添加该服务用户作为主体,勾选Grant权限后保存

3. 长期方案:使用权限委托角色(可选)

如果该服务用户需要管理多个Lake Formation权限,可创建专门的权限管理角色,让服务用户通过sts:AssumeRole切换至该角色执行部署操作。这种方式无需直接给服务用户加权限,能更好地隔离部署权限范围。

问题根源

出现AccessDeniedException的核心原因是:执行GrantPermissions操作的调用者必须同时满足两个条件:

  1. IAM层面允许调用该API
  2. Lake Formation层面拥有对目标资源的Grant权限(即允许将该资源的权限授予其他主体)
    仅将Lambda角色设为管理员无效,因为权限检查针对的是执行部署的调用者,而非被授权的Lambda角色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:50:23