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

运行Amazon SageMaker K-Means示例时遭遇Access Denied错误求助

解决Amazon SageMaker K-Means训练时的Access Denied错误

你在运行K-Means训练时遇到的Access Denied ClientError,大概率是SageMaker无法访问指定的S3资源导致的,我给你列几个最关键的排查和解决步骤:

  • 检查IAM角色的权限配置
    你初始化KMeans时传入的role必须拥有访问S3数据桶和输出桶的权限。确保这个角色的IAM策略包含以下权限:

    • 针对data_location对应的S3路径:需要s3:GetObject权限(读取训练数据),如果需要遍历桶内文件,还要加上s3:ListBucket
    • 针对output_location对应的S3路径:需要s3:PutObject权限(写入训练输出)
      这里给你一个参考的策略模板:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": ["s3:GetObject", "s3:ListBucket"],
                "Resource": [
                    "arn:aws:s3:::你的桶名",
                    "arn:aws:s3:::你的桶名/kmeans_highlevel_example/data/*"
                ]
            },
            {
                "Effect": "Allow",
                "Action": "s3:PutObject",
                "Resource": "arn:aws:s3:::你的桶名/kmeans_example/output/*"
            },
            {
                "Effect": "Allow",
                "Action": "sagemaker:*",
                "Resource": "*"
            }
        ]
    }
    

    另外别忘了给这个角色设置信任关系,允许sagemaker.amazonaws.com服务来扮演它。

  • 验证S3桶的权限设置
    有时候即使IAM角色权限足够,S3桶本身的配置也会阻止访问:

    • 检查Bucket Policy里有没有拒绝该角色访问的规则
    • 确认桶的Block Public Access设置没有过度限制(比如不要开启阻止所有内部访问的选项,你的角色属于AWS内部合法访问,不需要公开权限)
    • 检查S3数据对象的ACL,确保它们允许该IAM角色读取
  • 确认S3路径的准确性
    仔细核对data_location和output_location里的桶名和路径:

    • S3桶名是全小写的,有没有大小写拼写错误?
    • 数据路径下是否真的存在训练数据?如果路径不存在,AWS有时候会返回权限错误(虽然逻辑上是资源不存在,但提示容易混淆)
  • 测试基础S3访问
    你可以在Notebook里用boto3直接测试对这些S3路径的访问,快速定位问题:

    import boto3
    s3_client = boto3.client('s3')
    
    # 测试读取训练数据路径
    try:
        s3_client.get_object(Bucket=bucket, Key='kmeans_highlevel_example/data/你的数据文件名')
        print("读取数据成功")
    except Exception as e:
        print(f"读取失败: {str(e)}")
    
    # 测试写入输出路径
    try:
        s3_client.put_object(Bucket=bucket, Key='kmeans_example/output/test.txt', Body='test_content')
        print("写入输出成功")
    except Exception as e:
        print(f"写入失败: {str(e)}")
    

    如果这个测试也失败,说明是权限或路径问题;如果测试成功,那可能是SageMaker角色传递的问题,再回去检查角色的信任关系是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:13:31