
S3의권한 관리방법
。IAM 정책/버킷 정책
▶S3 권한을IAM 주체에인가하는지,S3 버킷에인가하는지의 차이
IAM 정책
。주체(IAM USER,IAM GROUP,IAM ROLE) 등에S3에 대한권한을부여 / 삭제하는정책
▶S3 버킷을 사용하는주체가 부여받는AWS 권한
。주로계정에 소속된IAM 주체의S3 권한을 관리하는 경우 사용
버킷 정책
。S3 버킷자체에주체가 행사할 수 있는권한을부여 / 삭제하는 정책
▶ 해당S3 버킷으로 접근한주체가S3 버킷이 가진버킷 정책 권한 범위내작업을 수행
。버킷 단위로 부여되는자원 기반 정책
▶주체를 설정하여 해당버킷에 대한액세스를 부여
。모든버킷은default : Private로서 외부에서접근이 불가능
▶ 해당S3 버킷에 접근하는사용자를 지정하여허용 / 비허용설정
IAM 정책이 아닌,버킷 정책을 사용하는 이유?
。IAM User 수가 매우 많은 경우IAM 정책을 통해S3 버킷에 대한S3 권한을일일이 부여하는것은 어렵다.
。IAM 주체의 경우 할당된권한( ex.AmazonS3FullAccess등 )이 없는 경우S3 버킷자체에접근 권한이 없는 단점이 존재.
▶버킷 정책을 통해S3 버킷자체에권한을 부여함으로써 접근할IAM User를 설정 시 지정된IAM User가S3 권한이 없더라도 접근하여버킷의 권한을 활용 가능
객체의계층 구조에 따라서권한 조정이 가능
ex )resource : "arn:aws:s3:::my-bucket/images/*"
▶my-bucket 버킷의images/로 시작하는 모든객체에 대해서권한부여
- 다른
계정 Entity에 대해서권한 설정이 가능
익명 사용자( Anonymous )에 대한권한 설정이 가능
。S3 버킷을Public으로 공개하면서권한을 설정하고,S3 Static Host를 사용하는 경우익명의사용자가S3 버킷에 접속할 수 있으며, 해당익명에 대한권한 설정이 가능기본적으로
S3 버킷은Public에서 조회할 수 없는Private 상태
。정적 컨텐츠등을서비스하는 경우외부 익명사용자에게조회될 수 있어야하므로, 해당버킷의퍼블릭 액세스 차단을 해제 후버킷 정책에 다음정책을 정의하여외부 익명사용자에게 조회될 수 있도록 설정{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::[버킷명]/*" } ] }▶
모든 사용자에게 해당버킷에 접근 시 내부객체 조회를 허용
S3 버킷관련정책AWS 정책
▶Resource 자원의 모든주체( =IAM User / Group / IAM Role)에 대해서s3:GetObject를 허용
Action
"Acition" : [s3:"ListBucket"]:
。s3 서비스에서Bucket들을 나열할 수 있는행동
"Action" : [s3:"GetObject"]:
。s3 서비스에서객체를 조회하여 반환하는행동
AWS에서 기본 제공하는S3 정책
。IAM USER / GROUP / ...등의주체에 해당정책을 부여해서 활용
AmazonS3FullAccess
。S3의 모든권한을 행사할 수 있는정책
AmazonS3ReadOnlyAccess
。S3에서읽기만 수행할 수 있는권한을 제공하는정책
▶업로드/삭제/수정등은 수행이 불가능.
IAM 정책:
。IAM 주체에 대해S3 버킷에접근 권한부여
AWS 콘솔 -> IAM -> IAM 사용자 그룹에서IAM Group생성 및정책생성
。IAM Group생성 후인라인 정책 생성을 통해정책생성
。나열:ListAllMyBuckets
。읽기:GetBucketLocation
。리소스:모두
▶IAM Group생성 및권한에정책이 등록됨을 확인 가능
IAM User생성 IAM User 생성
。AWS Management Console에 대한 사용자 액세스 권한 제공설정
。생성된IAM Group에IAM User를 등록
S3 Bucket생성 버킷 생성
。버킷명은 고유하게 지정
▶버킷명-계정ID로 지정
- 생성한
IAM User 계정에서S3 버킷으로 접근
。IAM User는IAM Group을 통해AWS S3의Bucket 위치를 알 수 있는권한이 존재
。IAM User 계정 -> 보안 자격 증명 -> 콘솔 로그인을 통해 생성한IAM User 계정으로콘솔 로그인
▶IAM User접속 시 다양한AWS 기능에 대해서권한이 없음을 확인 가능.
▶ 해당IAM User에서는S3 버킷 목록만 조회 가능.
IAM Group의권한 -> 정책 연결을 통해AWS에서 기본 제공하는S3 정책설정
。 이후 해당IAM Group에 소속된IAM User는S3에 대한 모든 기능을 사용 가능
。S3에 관련된 강력한권한을 가지므로,최소권한에 위배되어AmazonS3FullAccess는 자제하는게 좋다.
▶업로드/삭제/수정등 의권한이 다양함
버킷 정책:IAM 주체에게접근을 허가하는버킷 정책을 생성하여S3 버킷에 설정
。IAM 주체의 경우 할당된권한( ex.AmazonS3FullAccess등 )이 없는 경우S3 버킷자체에접근 권한이 없는 단점이 존재.
▶버킷 정책을 통해S3 버킷자체에권한을 부여함으로써권한이 없는IAM User가 접근하여 활용 가능
버킷생성
。버킷생성 시퍼블릭 액세스 차단 설정해제
。 해당버킷이Public Access를 부여할 수 있는모드로 진입
▶ 이후익명 사용자으로부터 접근이 가능
버킷 -> 생성한 버킷 -> 권한 -> 버킷 정책에서버킷 정책지정
。해당버킷으로 접근한 지정된IAM 주체가 수행할 수 있는권한을 정의
▶편집을 통해정책을 지정
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ListSpecificBucket", "Effect": "Allow", "Principal": "*", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::demo-home-bucket-904583676849", "Condition": { "StringLike": { "s3:prefix": [ "", "home/", "home/${aws:username}/*" ] } } }, { "Sid": "FullAccessToUserHome", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::demo-home-bucket-904583676849/home/${aws:username}", "arn:aws:s3:::demo-home-bucket-904583676849/home/${aws:username}/*" ] } ] }。
${aws:username}:로그인한IAM 주체의username이동적으로 입력되는placeholder
▶ 해당S3 버킷에 접근한IAM 주체에 할당된권한이 없어도 해당권한을 행사할 수 있음.
。ListSpecificBucket의Statement
▶ 모든사용자에 대해 해당버킷에 대해ListBucket기능을 사용하도록허용
▶/,/home,/home/{유저명}에 해당하는디렉토리내버킷을 모두List
。FullAccessToUserHome의Statement
▶ 모든사용자에 대해 해당버킷의/home/{유저명} 디렉토리이하 에 대해서S3의 모든권한을허용
- 해당
IAM User만 접근 가능한버킷내디렉토리생성
。s3://버킷명/home/유저명에 해당하는디렉토리를 생성
。버킷 정책에 지정한ListSpecificBucket의Statement에 따라서 해당유저명으로 접속한유저만s3://버킷명/home/유저명내객체에 접근하여 모든S3 작업을 수행가능.
ex )s3://demo-home-bucket-904583676849/home/demo-practice-user 디렉토리는demo-practice-user만 접근하여 내부객체에 대해서 모든S3 작업을 수행 가능
▶ 다른유저명으로 접속한유저는 해당디렉토리에 대한접근 권한이 없으므로,자원으로 접근이 불가능