IAM 정책을 사용하여 특정 S3 폴더에 대한 사용자별 액세스 권한을 부여하려면 어떻게 해야 합니까?

2분 분량
0

IAM 사용자 정책을 사용하여 Amazon Simple Storage Service(Amazon S3) 버킷 내 특정 폴더에 대한 액세스를 제한하려고 합니다.

간략한 설명

AWS Identity and Access Management(IAM) 사용자 정책을 사용하여 Amazon S3 버킷의 특정 폴더에 대한 액세스 권한을 가진 사용자를 제어할 수 있습니다.

​해결 방법

단일 사용자 정책 - 이 예제 정책을 사용하면 특정 IAM 사용자가 버킷의 첫 번째 수준에서 특정 폴더를 확인한 다음, 원하는 폴더 및 하위 폴더의 객체에 대해 작업을 수행할 수 있습니다. 이 예제에서는 David라는 IAM 사용자와 다음의 구조를 지닌 my-company라는 버킷을 사용합니다.

/home/Adele/ /home/Bob/ /home/David/ /restricted/ /root-file.txt

{
 "Version":"2012-10-17",
 "Statement": [
   {
     "Sid": "AllowUserToSeeBucketListInTheConsole",
     "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
     "Effect": "Allow",
     "Resource": "*"
   },
  {
     "Sid": "AllowRootAndHomeListingOfCompanyBucket",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::my-company"],
     "Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}}
    },
   {
     "Sid": "AllowListingOfUserFolder",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::my-company"],
     "Condition":{"StringLike":{"s3:prefix":["home/David/*"]}}
   },
   {
     "Sid": "AllowAllS3ActionsInUserFolder",
     "Effect": "Allow",
     "Action": ["s3:*"],
     "Resource": ["arn:aws:s3:::my-company/home/David/*"]
   }
 ]
}

Amazon S3 콘솔은 특수 문자로 슬래시(/)를 사용하여 폴더의 객체를 나타냅니다. 접두사(s3:prefix)와 구분 기호 (s3:delimiter)는 폴더의 객체를 구성하고 찾아볼 때 유용합니다.

다중 사용자 정책 - 일부 경우, 정책을 작성할 때 리소스의 정확한 이름을 알지 못할 수도 있습니다. 예를 들어, 이전 예제처럼 모든 사용자가 Amazon S3 버킷에 자체 객체를 가지도록 할 수 있습니다. 그러나 각 사용자에 대해 리소스의 일부로 사용자 이름을 지정하는 별도의 정책을 만드는 대신, 해당 그룹의 모든 사용자에 대해 작동하는 단일 그룹 정책을 만들 수 있습니다.

정책 변수를 사용하여 이 작업을 수행하면, 정책에서 자리 표시자를 지정할 수 있습니다. 정책이 평가될 때 정책 변수는 요청 자체에서 발생하는 값으로 대체됩니다.

이 예제는 정책 변수 **${aws:username}**을 사용하는 Amazon S3 버킷에 대한 정책을 보여줍니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowUserToSeeBucketListInTheConsole",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Effect": "Allow",
      "Resource": "*"
    },
    {
      "Sid": "AllowRootAndHomeListingOfCompanyBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::my-company"
      ],
      "Condition": {
        "StringEquals": {
          "s3:prefix": [
            "",
            "home/"
          ],
          "s3:delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Sid": "AllowListingOfUserFolder",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::my-company"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "home/${aws:username}/*"
          ]
        }
      }
    },
    {
      "Sid": "AllowAllS3ActionsInUserFolder",
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::my-company/home/${aws:username}/*"
      ]
    }
  ]
}

참고: StringLike만 별표(*)를 와일드카드로 인식합니다. StringEquals는 해당되지 않습니다. 자세한 내용은 문자열 조건 연산자를 참조하십시오.


관련 정보

사용자 정책을 사용하여 버킷에 대한 액세스 제어

Amazon S3 조건 키 예

버킷 정책 예