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

通过CDK授予LakeFormation数据湖位置权限出错的排查问询

AWS CDK部署LakeFormation数据湖权限时出现AccessDenied错误排查

我用AWS CDK注册S3数据湖位置的代码执行正常,代码如下:

lakeformation.CfnResource(scope, "S3BucketRegistrationResource",
  resource_arn="arn:aws:s3:::my-s3-bucket-here/my_db_folder_here/",
  use_service_linked_role=True
)

但执行授予主体权限的代码时失败,授权代码:

data_location = lakeformation.CfnPrincipalPermissions.DataLocationResourceProperty(
    catalog_id=Aws.ACCOUNT_ID,
    resource_arn="arn:aws:s3:::my-s3-bucket-here/my_db_folder_here/"
)
cfn_principal_permissions = lakeformation.CfnPrincipalPermissions(scope, "DatalakePrincipalPermissions",
    permissions=["DATA_LOCATION_ACCESS"],
    permissions_with_grant_option=["DATA_LOCATION_ACCESS"],
    principal=lakeformation.CfnPrincipalPermissions.DataLakePrincipalProperty(
        data_lake_principal_identifier=f"arn:aws:iam::my_acct_id_here:user/my_user_here"
    ),
    resource=lakeformation.CfnPrincipalPermissions.ResourceProperty(
        data_location=data_location
    ),
    catalog=Aws.ACCOUNT_ID
)

部署时数据湖位置注册成功,但授权环节报错:

CREATE_FAILED | AWS::LakeFormation::PrincipalPermissions | DatalakePrincipalPermissions
6:27:34 PM | CREATE_FAILED | AWS::LakeFormation::PrincipalPermissions | DatalakePrincipalPermissions
Resource handler returned message: "Resource does not exist or requester is not authorized to access requested permissions. (Service: LakeFormation, Status Code: 400, Request ID: b29f926b-5ab2-49ec-8bee-42bc8fbc12d8)" (RequestToken: 6cc21ec7-c67a-d4c1-c3f0-3af6b0a7451d, HandlerErrorCode: AccessDenied)
at FullCloudFormationDeployment.monitorDeployment (/usr/lib/node_modules/aws-cdk/lib/index.js:380:10236)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async deployStack2 (/usr/lib/node_modules/aws-cdk/lib/index.js:383:145775)
at async /usr/lib/node_modules/aws-cdk/lib/index.js:383:128776
at async run (/usr/lib/node_modules/aws-cdk/lib/index.js:383:126782)

我用同一IAM用户在AWS控制台手动执行相同授权操作无权限问题,请问为何CDK操作时出现权限问题,该如何排查?


排查步骤与解决方案

  • 检查CDK部署执行角色的权限
    控制台操作用的是你的IAM用户,但CDK部署默认依赖CloudFormation执行角色(比如cdk-hnb659fds-deploy-role-<账号>-<区域>),这个角色可能缺少LakeFormation相关权限。需要给该角色添加:

    • lakeformation:GrantPermissions权限
    • 对目标S3位置的lakeformation:DescribeResource权限
      另外可补充iam:ListRoles权限,辅助验证服务关联角色的存在。
  • 强制资源创建顺序
    CloudFormation可能在数据湖位置注册完成前就尝试创建权限资源,导致识别不到目标对象。给权限资源添加依赖,确保它在注册资源之后执行:

    # 方法1:通过add_dependency绑定
    cfn_principal_permissions.add_dependency(scope.node.find_child("S3BucketRegistrationResource"))
    
    # 方法2:定义时指定depends_on参数
    cfn_principal_permissions = lakeformation.CfnPrincipalPermissions(scope, "DatalakePrincipalPermissions",
        # 保留原有参数
        depends_on=["S3BucketRegistrationResource"]
    )
    
  • 校验资源ARN的一致性
    检查注册和授权代码中的S3 ARN是否完全一致,包括末尾的斜杠。LakeFormation对ARN的匹配是严格的,格式差异会导致资源找不到。

  • 确认LakeFormation数据湖管理员身份
    检查CDK执行角色是否被列为LakeFormation的数据湖管理员。如果没有,即使IAM权限齐全,LakeFormation也会拒绝授权操作。可在LakeFormation控制台的「Administrators」页面添加该角色。

  • 检查服务关联角色的权限
    注册时启用了use_service_linked_role=True,需确保对应的服务关联角色(AWSServiceRoleForLakeFormationDataAccess)拥有目标S3桶的读写权限,否则LakeFormation无法确认资源有效性,间接导致授权失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:22:03