사용자에게 Amazon S3 버킷의 특정한 폴더에 대한 액세스 권한을 부여하려면 어떻게 해야 하나요?

3분 분량
0

AWS Identity and Access Management(IAM) 사용자가 Amazon Simple Storage Service(S3)의 특정 폴더에만 액세스하도록 제한하고 싶습니다.

해결 방법

사용자와 버킷이 동일한 AWS 계정에 속하는 경우 IAM 정책을 사용하여 사용자에게 버킷 폴더에 대한 액세스 권한을 부여합니다. IAM 정책이 액세스 권한을 부여하는 경우 버킷 정책을 업데이트할 필요가 없습니다.

참고: Amazon S3 버킷 정책에 폴더에 대한 IAM 사용자 액세스를 명시적으로 거부된 경우 버킷 정책을 업데이트해야 합니다.

IAM 사용자와 S3 버킷이 서로 다른 AWS 계정에 속하는 경우 IAM 정책과 버킷 정책 모두에 액세스 권한을 부여합니다. 자세한 내용은 다른 AWS 계정의 사용자에게 Amazon S3 버킷에 개체를 업로드할 수 있는 액세스 권한을 부여하려면 어떻게 해야 하나요?를 참조하세요.

단일 사용자 정책

다음 예제에서 IAM 정책이 David라는 사용자에게 자신의 폴더(/home/David)에 대한 전체 액세스 권한만을 부여합니다.

{
 "Version":"2012-10-17",
 "Statement": [
   {
     "Sid": "AllowStatement1",
     "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::*"]
   },
  {
     "Sid": "AllowStatement2A",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"],
     "Condition":{"StringEquals":{"s3:prefix":["","home/", "home/David"],"s3:delimiter":["/"]}}
    },
  {
     "Sid": "AllowStatement3",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"],
     "Condition":{"StringLike":{"s3:prefix":["home/David/*"]}}
    },    
   {
     "Sid": "AllowStatement4A",
     "Effect": "Allow",
     "Action": ["s3:*"],
     "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/David/*"]
   }
 ]
}

이 정책에는 다음 명령문이 포함됩니다.

  • AllowStatement1: 사용자가 자신의 AWS 계정에 속한 버킷을 나열할 수 있도록 허용합니다. 이 권한은 사용자가 콘솔에서 버킷을 탐색할 수 있게 합니다.
  • AllowStatement2A: 사용자가 DOC-EXAMPLE-BUCKET 내의 폴더를 나열할 수 있도록 허용합니다. 이 권한은 사용자가 콘솔에서 폴더를 탐색할 수 있게 합니다.
  • AllowStatement3: 사용자가 DOC-EXAMPLE-BUCKET/home/David 폴더에 있는 콘텐츠를 나열할 수 있도록 허용합니다.
  • AllowStatement4A: DOC-EXAMPLE-BUCKET/home/David 폴더 내에서만 읽기, 쓰기 및 삭제 권한과 같은 모든 작업을 허용합니다.

다중 사용자 정책

정책을 작성할 때 리소스의 정확한 이름을 모르는 경우가 있습니다. 예를 들어 모든 사용자가 Amazon S3 버킷에 자신만의 개체를 가질 수 있도록 허용하고 싶다고 가정해 보겠습니다. 각 사용자에 대한 개별 정책을 만들지 말고, 대신 정책 변수를 사용하여 여러 사용자에게 적용되는 그룹 정책을 만드세요. 정책 변수를 사용하면 정책에 플레이스홀더를 지정할 수 있습니다. AWS에 요청을 할 때, 정책이 평가되는 시점에서 요청의 값이 플레이스홀더를 대체합니다.

다음 예는 정책 변수 **${aws:username}**을 사용하는 Amazon S3 버킷에 대한 정책입니다.

참고: 이 문서에서는 aws:username 키를 사용하며 사용자의 친숙한 이름(예: "Adele" 또는 "David")을 반환합니다. 이 값은 IAM 사용자를 만들 때 제공하는 사용자 이름에서 얻어집니다. 전체적으로 고유한 각각의 값을 사용하는 것이 좋을 때가 있습니다. 예를 들어 IAM 역할을 사용하는 경우 aws:username 값이 해당 IAM 엔터티에 유효하지 않을 수 있습니다. 자세한 내용은 주요 키 값을 참조하세요.

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

앞 예시의 정책에서는 사용자가 AWS에 요청을 할 때 요청자의 이름이 변수를 대체합니다. 예를 들어, David가 요청을 하면 **${aws:username}**는 David가 됩니다.

참고: IAM 사용자는 **DOC-EXAMPLE-BUCKET/**과 같이 상위 수준의 모든 접두사를 나열할 수 있습니다. 사용자는 모든 GUI(그래픽 사용자 인터페이스) 클라이언트에서 홈 디렉터리로 이동할 수 있습니다. 상위 수준에서 목록 작업을 제공하지 않은 경우 명령줄 인터페이스를 사용하여 특정 폴더에 직접 액세스해야 합니다.

관련 정보

AWS 정책 생성기

사용자 정책으로 버킷에 대한 액세스 제어

Amazon S3 조건 키 예제

AWS 공식
AWS 공식업데이트됨 9달 전
댓글 없음