본문 바로가기
[AWS]/AWS SAP EXAMTOPICS

[AWS][SAP] Question 27

by METAVERSE STORY 2022. 9. 19.
반응형
728x170

 

The following policy can be attached to an IAM group. It lets an IAM user in that group access a "home directory" in AWS S3 that matches their user name using the console.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["s3:*"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::bucket-name"],
"Condition":{"StringLike":{"s3:prefix":["home/${aws:username}/*"]}}
},
{
"Action":["s3:*"],
"Effect":"Allow",
"Resource": ["arn:aws:s3:::bucket-name/home/${aws:username}/*"]
}
]
}

  • A. True
  • B. False

 

한글 번역

다음 정책을 IAM 그룹에 연결할 수 있습니다. 이를 통해 해당 그룹의 IAM 사용자는 콘솔을 사용하여 사용자 이름과 일치하는 AWS S3의 "홈 디렉토리"에 액세스할 수 있습니다.

{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["s3:*"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::bucket-name"],
"Condition":{"StringLike":{"s3:prefix":["home/${aws:username}/*"]}}
},
{
"Action":["s3:*"],
"Effect":"Allow",
"Resource": ["arn:aws:s3:::bucket-name/home/${aws:username}/*"]
}
]
}

  • A. True
  • B. False

 

 

 

 

 

정답

  • B. False

 

해설

IAM 정책 작성: Amazon S3 버킷의 사용자별 폴더에 대한 액세스 권한 부여

 

많은 분들이 Amazon S3 버킷에 대한 폴더 수준 권한을 사용하여 AWS Identity and Access Management(IAM) 정책을 구성하는 방법을 질문하셨습니다. 이번 주 게스트 블로거 엘리엇 야마구치 (Elliot Yamaguchi) IAM 팀의 기술 작가는 이러한 유형의 정책을 작성하는 기본 사항을 설명합니다.


폴더 수준 권한으로 정책을 만드는 방법을 보여 드리기 위해 모든 사용자가 자신의 홈 폴더에만 액세스 할 수있는 기존 파일 공유에서 많은 사람들이 수행 한 것과 유사한 시나리오를 살펴 보겠습니다. 폴더 수준 권한을 사용하면 특정 버킷의 객체에 액세스할 수 있는 사용자를 세부적으로 제어할 수 있습니다.

IAM 사용자가 AWS Management 콘솔을 사용하여 정보를 저장할 수 있도록 동일한 Amazon S3 버킷에 대한 액세스 권한을 부여하는 정책을 보여 드리겠습니다. 모든 사용자는 자신의 폴더에서 파일을 업로드하거나 다운로드할 수 있지만 버킷에 있는 다른 사람의 폴더에는 액세스할 수 없습니다.

정책을 설명한 후 각 IAM 사용자에 대해 개별 정책을 생성하는 대신 IAM 그룹에 대해 단일 정책을 사용할 수 있도록 정책 변수를 사용하는 방법을 보여 드리겠습니다.

이 게시물의 나머지 부분에서는 . 또한 이미 다음 구조로 명명 된 버킷을 만들었습니다.Davidmy-company

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

Amazon S3 객체에 대한 간단한 레슨

정책을 보여주고 설명하기 전에 Amazon S3 객체의 이름이 어떻게 지정되는지 검토해야 합니다. 이 간단한 설명은 포괄적이지는 않지만 정책의 작동 방식을 이해하는 데 도움이 됩니다. Amazon S3 객체 및 접두사에 대해 이미 알고 있는 경우 아래의 David의 정책으로 건너뜁니다.

Amazon S3는 데이터를 플랫 구조로 저장합니다. 버킷을 생성하면 버킷이 객체를 저장합니다. Amazon S3에는 하위 버킷 또는 폴더의 계층 구조가 없습니다. 그러나 AWS Management Console과 같은 도구는 객체 이름(키라고도 함)을 사용하여 버킷에 폴더를 표시하도록 폴더 계층 구조를 에뮬레이트할 수 있습니다. 단순화를 위해 객체의 이름을 기존 파일 시스템에서 파일의 전체 경로로 생각할 수 있습니다. 예를 들어, 이름이 지정된 객체의 경우 콘솔에 폴더에 있는 파일의 파일이 표시됩니다. 이러한 폴더 (예 : 또는 )의 이름을 접두사라고하며, 이와 같은 접두사는 정책에서 David의 홈 폴더를 지정하는 데 사용하는 것입니다.home/common/shared.txtshared.txtcommonhomehome/home/common/

그건 그렇고, home/과 같은 접두사의 슬래시 (/)는 예약 된 문자가 아닙니다. 또는 와 같은 접두사가있는 객체 (Amazon S3 API 사용)의 이름을 지정할 수 있습니다. 그러나 규칙은 슬래시를 구분 기호로 사용하는 것이며, Amazon S3 콘솔(Amazon S3 자체는 아님)은 슬래시를 폴더에 객체를 표시하기 위한 특수 문자로 처리합니다.home:common:shared.txthome-common-shared.txt

데이비드의 정책

먼저 IAM 콘솔을 사용하여 명명된 IAM 사용자와 연결한 David의 전체 정책을 보여 드리겠습니다. 그런 다음 정책을 세분화하고 어떻게 작동하는지 설명 할 것입니다.David

{
 "Version":"2012-10-17",
 "Statement": [
   {
     "Sid": "AllowUserToSeeBucketListInTheConsole",
     "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::*"]
   },
  {
     "Sid": "AllowRootAndHomeListingOfCompanyBucket",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::my-company"],
     "Condition":{"StringEquals":{"s3:prefix":["","home/", "home/David"],"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/*"]
   }
 ]
}

이 정책은 David에게 자신의 폴더()에만 전체 콘솔 액세스 권한을 부여하고 다른 사람의 폴더는 허용하지 않습니다. 각 사용자에게 자신의 버킷에 대한 액세스 권한을 부여할 수도 있지만, AWS 계정에는 기본적으로 최대 100개의 버킷이 있을 수 있습니다. 홈 폴더를 만들고 적절한 권한을 부여하면 수백 명의 사용자가 단일 버킷을 공유하도록 할 수 있습니다./home/David

다윗의 정책은 네 개의 블록으로 구성되어 있습니다. 각각을 개별적으로 살펴 보겠습니다.

블록 1: 필요한 Amazon S3 콘솔 권한 허용

David가 액세스 할 수있는 특정 폴더를 식별하기 전에 Amazon S3 콘솔 액세스에 필요한 두 가지 권한을 부여해야합니다.ListAllMyBucketsGetBucketLocation

   {
      "Sid": "AllowUserToSeeBucketListInTheConsole",
      "Action": ["s3:GetBucketLocation", "s3:ListAllMyBuckets"],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::*"]
   }

이 작업은 David에게 Amazon S3 콘솔의 버킷으로 이동하는 데 필요한 AWS 계정의 모든 버킷을 나열할 수 있는 권한을 부여합니다(그리고 제쳐두고, 현재 특정 버킷을 선택적으로 필터링할 수 없으므로 사용자는 콘솔 액세스를 위해 모든 버킷을 나열할 수 있는 권한이 있어야 합니다). 콘솔은 사용자가 처음에 Amazon S3 콘솔로 이동할 때도 호출을 수행하므로 David는 해당 작업에 대한 권한도 필요합니다. 이 두 가지 작업이 없으면 David는 콘솔에서 액세스 거부 오류가 발생합니다.ListAllMyBucketsGetBucketLocation

블록 2: 루트 및 홈 폴더에 객체 나열 허용

David는 홈 폴더에만 액세스할 수 있어야 하지만 Amazon S3 콘솔에서 자신의 폴더로 이동할 수 있도록 추가 권한이 필요합니다. David는 버킷의 루트 수준과 폴더에 객체를 나열 할 수있는 권한이 필요합니다. 다음 정책은 David에게 이러한 권한을 부여합니다.my-companyhome/

   {
      "Sid": "AllowRootAndHomeListingOfCompanyBucket",
      "Action": ["s3:ListBucket"],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::my-company"],
      "Condition":{"StringEquals":{"s3:prefix":["","home/", "home/David"],"s3:delimiter":["/"]}}
   }

권한이 없으면 David는 루트 및 홈 폴더의 내용을 볼 수있는 권한이 없기 때문에 자신의 폴더로 이동할 수 없습니다. David가 콘솔을 사용하여 버킷의 내용을 보려고 하면 콘솔이 액세스 거부 오류를 반환합니다. 이 정책은 David에게 루트 및 홈 폴더의 모든 객체를 나열 할 수있는 권한을 부여하지만 자신의 파일 또는 폴더를 제외한 파일이나 폴더의 내용을 볼 수는 없습니다 (다음 블록에서 이러한 권한을 지정합니다).ListBucketmy-company

이 블록에는 AWS에 대한 요청이 유효한 시기를 제한할 수 있는 조건이 포함되어 있습니다. 이 경우 David는 접두사가 없는 객체(루트 수준의 객체)와 접두사가 있는 객체(홈 폴더의 객체)를 요청하는 경우에만 버킷의 객체를 나열할 수 있습니다. David가 와 같은 다른 폴더로 이동하려고 시도하면 David는 액세스가 거부됩니다. 또한 David는 사용자 폴더 목록을 아래로 스크롤하는 대신 콘솔의 검색 기능을 사용할 수 있도록 접두사를 나열할 수 있는 권한이 필요합니다.my-companyhome/restricted/home/David

이러한 루트 및 홈 폴더 권한을 설정하려면 두 가지 조건을 사용했습니다. 이 조건은 David에 대한 사용 권한이 있는 폴더를 지정합니다. 예를 들어 David는 버킷에 다음 파일 및 폴더를 모두 나열할 수 있습니다.s3:prefixs3:delimiters3:prefixListBucketmy-company

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

그러나 David는 , 또는 폴더에 파일이나 하위 폴더를 나열 할 수 없습니다.restricted/home/Adelehome/Bob

콘솔 액세스에 필요한 조건은 아니지만 David가 API 또는 CLI(명령줄 인터페이스)를 사용하여 요청하는 경우 조건을 포함하는 것이 좋습니다. 앞에서 언급했듯이 구분 기호는 슬래시()와 같이 개체가 있는 폴더를 식별하는 문자입니다. 구분 기호는 객체를 파일 시스템에 있는 것처럼 나열하려는 경우에 유용합니다. 예를 들어 버킷에 수천 개의 객체가 저장되었다고 가정해 보겠습니다. David가 요청에 구분 기호를 포함하면 반환된 개체의 수를 지정한 폴더의 파일 및 하위 폴더 이름만으로 제한할 수 있습니다. 구분 기호가 없으면 David는 지정한 폴더의 모든 파일 외에도 하위 폴더의 모든 파일, 하위 하위 폴더의 모든 파일 등을 가져옵니다.s3:delimiter/my-company

블록 3 : David의 폴더에 객체를 나열 할 수 있도록 허용

루트 및 홈 폴더 외에도 David는 폴더의 모든 객체와 자신이 만들 수있는 하위 폴더에 액세스해야합니다. 이를 허용하는 정책은 다음과 같습니다.home/David/

    {
      "Sid": "AllowListingOfUserFolder",
      "Action": ["s3:ListBucket"],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::my-company"],
      "Condition":{"StringLike":{"s3:prefix":["home/David/*"]}}
    }

이 조건에서는 별표 ()와 함께 표현식을 사용하여 별표가 와일드 카드처럼 작동하는 David의 폴더에있는 모든 객체를 나타냅니다. 그렇게하면 David는 폴더 ()에있는 모든 파일과 폴더를 나열 할 수 있습니다. 이전 블록이 문자 그대로 별표 ()를 별표 (와일드 카드가 아닌)로 해석하는 표현식을 사용했기 때문에이 조건을 이전 블록 ()에 포함 할 수 없었습니다.StringLike*home/David/AllowRootAndHomeListingOfCompanyBucketStringEquals*

다음 섹션인 블록에서는 요소가 지정하는 것을 볼 수 있습니다.이 요소는 이 섹션에서 지정한 조건과 유사하게 보입니다. 이 블록에서 David의 폴더를 지정하는 데 요소를 유사하게 사용할 수 있다고 생각할 수 있습니다. 그러나 작업은 버킷 수준 작업이므로 작업의 요소는 버킷 이름에만 적용되며 폴더 이름은 고려하지 않습니다. 따라서 개체 수준(파일 및 폴더)에서 작업을 제한하려면 조건을 사용해야 합니다.AllowAllS3ActionsInUserFolderResourcemy-company/home/David/*ResourceListBucketResourceListBucket

블록 4: David의 폴더에 있는 모든 Amazon S3 작업 허용

마지막으로 David의 작업 (예 : 읽기, 쓰기 및 삭제 권한)을 지정하고 다음 정책에 표시된 것처럼 홈 폴더로만 제한합니다.

    {
      "Sid": "AllowAllS3ActionsInUserFolder",
      "Effect": "Allow",
      "Action": ["s3:*"],
      "Resource": ["arn:aws:s3:::my-company/home/David/*"]
    }

요소에 대해 David가 모든 Amazon S3 작업을 수행 할 수있는 권한이 있음을 의미합니다. 요소에서 David의 폴더를 별표 () (와일드 카드)로 지정하여 David가 폴더와 폴더 내부에서 작업을 수행 할 수 있도록했습니다. 예를 들어 David는 폴더의 저장소 클래스를 변경하거나, 암호화를 사용하도록 설정하거나, 폴더를 공용으로 설정(폴더 자체에 대한 작업 수행)할 수 있는 권한이 있습니다. David는 또한 파일을 업로드하고, 파일을 삭제하고, 자신의 폴더에 하위 폴더를 만들 수있는 권한을 가지고 있습니다 (폴더에서 작업 수행).Actions3:*Resource*

정책 변수를 사용하여 정책을 보다 쉽게 관리할 수 있는 방법

David의 폴더 수준 정책에서 David의 홈 폴더를 지정했습니다. Bob 및 Adele과 같은 사용자에 대해 유사한 정책을 원하는 경우 홈 폴더를 지정하는 별도의 정책을 만들어야 합니다. 각 사용자에 대해 개별 정책을 만드는 대신 정책 변수를 사용하고 여러 사용자에게 적용되는 단일 정책(그룹 정책)을 만들 수 있습니다. 정책 변수는 자리 표시자 역할을 합니다. AWS에 요청하면 정책이 평가될 때 자리 표시자가 요청의 값으로 대체됩니다.

예를 들어 이전 정책을 사용하고 David의 사용자 이름을 다음 정책에 표시된 것처럼 요청자의 사용자 이름()을 사용하는 변수로 바꿀 수 있습니다. 또한 두 정책의 버전 번호를 선언했습니다. 버전은 이전 정책에 대해 선택 사항이지만 정책 변수를 사용할 때마다 필요합니다.aws:username

{
  "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:::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}/*",
                       "home/${aws:username}"
                  ]
               }
        }
    },
    {
       "Sid": "AllowAllS3ActionsInUserFolder",
       "Action":["s3:*"],
       "Effect":"Allow",
       "Resource": ["arn:aws:s3:::my-company/home/${aws:username}/*"]
    }
  ]
}

사용자가 AWS에 요청할 때마다 변수는 요청을 한 사람의 "친숙한" 사용자 이름으로 대체됩니다. 그래서 다윗이 요청하면, 결심한다. Adele이 요청을하면 , 로 결심합니다.${aws:username}David${aws:username}Adele

다음은 Amazon S3 폴더 및 IAM 정책에 대해 학습하기 위한 몇 가지 추가 리소스입니다.

 

 

David가 액세스 할 수있는 특정 폴더를 식별하기 전에 Amazon S3 콘솔 액세스에 필요한 두 가지 권한을 부여해야합니다.

ListAllMyBuckets, GetBucketLocation

하지만 위 문제에서는 이 두가지 옵션을 주지 않았으므로 콘솔에서 사용할 수 없다. 

 

참조 문서

IAM 정책 작성: Amazon S3 버킷 |의 사용자별 폴더에 대한 액세스 권한 부여 AWS 보안 블로그

 

반응형
그리드형

'[AWS] > AWS SAP EXAMTOPICS' 카테고리의 다른 글

[AWS][SAP] Question 31  (0) 2022.09.21
[AWS][SAP] Question 30  (0) 2022.09.20
[AWS][SAP] Question 29  (0) 2022.09.20
[AWS][SAP] Question 28  (1) 2022.09.19
[AWS][SAP] Question 26  (0) 2022.09.16
[AWS][SAP] Question 24  (0) 2022.09.15
[AWS][SAP] Question 23  (0) 2022.09.14
[AWS][SAP] Question 20  (1) 2022.09.13

댓글