如何阻止使用AmazonSageMakerFullAccess的IAM用户访问全部S3存储桶?
我明白你的困扰——给IAM用户附加AmazonSageMakerFullAccess策略后,本意是让它仅操作SageMaker相关资源,结果却能访问所有S3桶。这是因为AmazonSageMakerFullAccess这个托管策略里包含了广泛的S3权限(毕竟SageMaker经常需要和S3交互,比如存储数据集、模型输出等),所以默认允许用户访问所有S3资源。
要解决这个问题,核心是遵循最小权限原则,限制该用户的S3访问权限,下面是两种可行的方案:
方案一:创建自定义SageMaker权限策略(推荐)
放弃直接使用AmazonSageMakerFullAccess,而是创建一个自定义策略,只授予用户SageMaker所需的核心权限,同时仅允许访问特定的S3资源(比如命名包含sagemaker的桶,或者你指定的专属桶)。
举个例子,自定义策略可以这样写:
{ "Version": "2012-10-17", "Statement": [ // 授予SageMaker核心操作权限 { "Effect": "Allow", "Action": [ "sagemaker:*" ], "Resource": "*" }, // 仅允许访问命名包含sagemaker的S3桶及内容 { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::*sagemaker*", "arn:aws:s3:::*sagemaker*/*" ] } ] }
把这个自定义策略附加到你的IAM用户上,就能确保用户只能操作SageMaker资源,且仅能访问符合命名规则的S3桶。
方案二:添加拒绝所有S3访问的策略(快速临时方案)
如果你想快速阻止用户访问所有S3桶,同时保留AmazonSageMakerFullAccess的其他权限,可以创建一个拒绝所有S3操作的策略,附加到该用户身上(IAM中拒绝权限会覆盖允许权限)。
拒绝策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:*", "Resource": [ "arn:aws:s3:::*", "arn:aws:s3:::*/*" ] } ] }
不过要注意:如果你的SageMaker任务需要访问特定S3桶,你需要在这个拒绝策略之后,再添加一个允许策略,明确授予对那些必要S3桶的访问权限(比如命名包含sagemaker的桶),否则SageMaker的相关操作会失败。
额外提醒
不管用哪种方案,都要确保你测试一下用户的权限:切换到该用户账号,尝试访问非SageMaker相关的S3桶,确认无法访问;同时验证SageMaker的核心操作(比如创建笔记本实例、运行训练任务)是否正常工作。
内容的提问来源于stack exchange,提问作者Harry Moreno

