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

如何合并两个AWS IAM策略以限制特定操作仅访问指定目录?

问题分析与解决方案

你的问题出在两个策略的设计冲突和ARN格式错误上:

核心问题

  1. 第一个策略的过度授权:
    第一个策略中Resource设为arn:aws:s3:::*/*,这意味着允许对所有S3存储桶下的所有对象执行指定操作。IAM权限是累加生效的,只要有一个策略允许了某范围的访问,其他策略的限制就会被绕过——这直接导致你资源组的权限限制完全失效。

  2. S3 ARN格式错误:
    第二个策略里的资源ARN写法不对。S3的ARN规则是:

    • 存储桶ARN:arn:aws:s3:::bucket-name
    • 桶内对象/目录ARN:arn:aws:s3:::bucket-name/path/to/object-or-directory/*
      你写的arn:aws:s3:::path/to/my/bucket/directory不符合格式,正确的应该是把桶名放在最前面,比如arn:aws:s3:::my-bucket/path/to/directory/*。

修正后的策略设计

按照你“操作权限组+资源权限组”的思路,正确的策略拆分应该是:

操作权限组策略(仅授予允许执行的操作,不限制资源范围)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:AbortMultipartUpload",
                "s3:ListMultipartUploadParts",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

资源权限组策略(仅授予指定资源的访问权限,操作可匹配操作组的范围)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::your-bucket-name/path/to/directory",
                "arn:aws:s3:::your-bucket-name/path/to/directory/*"
            ],
            "Effect": "Allow"
        },
        // 如果需要列出目录内的对象,补充以下规则
        {
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::your-bucket-name",
            "Effect": "Allow",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "path/to/directory/*"
                }
            }
        }
    ]
}

权限生效逻辑

IAM的权限判定逻辑是:用户必须同时拥有允许该操作的策略,以及允许该资源的策略,才能完成访问。通过这种拆分,操作组定义用户能做什么,资源组定义用户能访问什么,两者结合就能精准控制用户的S3访问范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:33:11