如何允许IAM用户完全访问存储桶中的特定路径?

时间:2014-03-09 17:20:47

标签: security amazon-web-services amazon-s3 policy amazon-iam

背景

  • 我有几个桶,每个桶里面都有一个“开发”和“生产”文件夹。
  • 我有两个帐户,accountname-devaccountname-prod

目标

  • 我希望account-dev能够在BucketName / DEVELOPMENT
  • 上拥有完全访问权限(所有操作)
  • 我希望account-prod能够在BucketName / PRODUCTION
  • 上拥有完全访问权限(所有操作)

问题

每当我使用策略生成器时,看起来我在某种程度上做错了。添加标准管理策略可以很好地访问文档,但我的自定义策略不能。

我使用亚马逊的IAM策略创建屏幕为特定帐户添加了策略。

我正在尝试使用的政策是:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "[Redacted]",
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": "DEVELOPMENT/*"
        }
      },
      "Resource": [
        "arn:aws:s3:::RedactedBucketName"
      ]
    }
  ]
}

问题

  • 上述政策有什么问题吗?
  • 这是我需要添加的唯一政策吗?或者我是否需要首先在桶级别添加某种访问功能?
  • 尽管亚马逊的政策生成屏幕没有包含校长的完整ARN,但最好还是将其包括在内吗?

1 个答案:

答案 0 :(得分:1)

我可以这样做:

仅为单个用户分配IAM用户策略(不需要S3存储桶策略)。

检查以下用户政策。我是为用户account-dev创建的,这意味着您必须将此IAM政策应用于account-dev用户。

{
  "Statement": [
    {
      "Sid": "AllowGroupToSeeBucketListInTheConsole",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Sid": "AllowRootLevelListingOfDevelopmentBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::development-bucket-name"
      ],
      "Condition": {
        "StringEquals": {
          "s3:prefix": [
            ""
          ],
          "s3:delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::development-bucket-name"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "DEVELOPMENT/*"
          ]
        }
      }
    },
    {
      "Sid": "AllowUserToReadWriteObjectData",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::development-bucket-name/DEVELOPMENT/*"
      ]
    }
  ]
}
用户可以从S3控制台使用

AllowGroupToSeeBucketListInTheConsoleAllowRootLevelListingOfDevelopmentBucket。如果您不希望用户在S3控制台上工作并希望他只使用API​​,那么您可以省略这两个节。

同样,您已为account-prod创建了另一个用户策略,并将其分配给该用户。