본 실습 과정은 AWS Training and Certification을 바탕으로 작성되었습니다.
먼저 보안 정책의 종류부터 간단하게 집고 가자.
AWS에서 제공하는 보안 정책은 어떤 것들이 있을까?
엔터티
에게 허용할지 지정.🧐 엔터티란?
엔터티
는 특정 사용자, 그룹, 또는 역할을 의미한다.
자세한 내용은 AWS Security Essentials 참고.
EC2의 생성 권한이 없는 IAM 사용자로 로그인해보자.
현재의 계정에서는 해당 AMI를 사용할 수 없다고 출력된다.
또한 Network Settings의 VPC 사용설정에서 다음과 같이 Vpc를 볼 권한이 없다고 나오는 것을 확인할 수 있다.
Access
열에서 모든 버킷에 대해 Insufficient permissions
(충분한 권한이 없습니다)가 출력되는 것을 확인할 수 있다.
4
번에서 확인할 내용이지만, 현재 s3:ListAllMyBuckets
권한이 부여되어 있으므로 계정 내에서 모든 S3의 버킷을 볼 수 있지만, 객체를 업로드하거나 다운로드할 수는 없다.
이제 user-1
IAM 사용자에 대해서 어떤 권한이 열려있는지 확인해보도록 하자.
IAM의 Access management
에서 User groups
를 에서 생성되어 있는 DevelopersGroup를 확인해보자.
S3에 대한 IAM 권한은 다음과 같이 부여되어있는 것을 확인할수 있다.
JSON 정책을 확인해보면 s3:ListAllMyBuckets
역할은 부여 되어있는 것을 확인할 수 있다.
즉, S3 버킷 목록은 볼 수 있지만 Access 열 세부 정보는 볼 수 없다.
그 이유는 S3 버킷 페이지의 Access 열에서 세부 정보를 보기위한 권한인 s3:GetAccountPublicAccessBlock
, s3:GetBucketPublicAccessBlock
, s3:GetBucketPolicyStatus
, s3:GetBucketAcl
및 s3:ListAccessPoints
권한들이 없기 때문이다.
👌가능은 하다.
버킷을 생성하는 권한은 사용자에게 S3 버킷생성 권한 s3:CreateBucket
이 있으므로 버킷을 생성할 수 있다.
하지만, 정책에는 버킷에 파일을 업로드 작업 권한 s3:PutObject
은 포함되어 있지 않으므로 버킷에 파일을 올리지는 못한다.
그럼 EC2의 경우는 왜 생성을 하지 못했을까?
S3는 s3:ListAllMyBuckets
로 리스트를 보는 것 까지는 권한이 있어 어떤 S3가 있는지 볼 수 있었다.
하지만, EC2의 경우 EC2 권한이 전혀 없으므로 EC2 작업에 액세스할 수도, 볼 수도 없다.
모든 권한이 없으므로
ec2:DescribeInstances
권한을 부여하라는 창이 표시될 뿐. 어떤 인스턴스가 있는지 볼 수도 없다.
전체 권한은 다음과 같다.
권한이 현재 없으므로 Image1.jpeg
를 받을 수 없다. (해보면 오류가 난다)
계정이름과, BucketRole을 등록하여 이를 통해 역할은 변경하고 다시 다운로드를 시도해보자.
다음과 사용자의 이름 앞에 역할 명이 나오며 색이 변경된 것을 확인할 수 있다.
이제 다운로드를 시도하면 정상적으로 이미지 파일이 다운로드 되는 것을 확인할 수 있다.
어떤 권한이 변경되었길래, 다운로드가 가능해졌을까?
IAM을 접속하여 User groups를 확인해보자.
IAM 역할을 변경했으므로, 현재 다른 역할을 수행중인 상황에서 확인이 불가능하다.
현재 역할인 BucketsRole
은 IAM 그룹 페이지를 보는 권한인 iam:ListGroups
작업을 허용하지 않기 때문이다.
페이지 오른쪽 상단에서 BucketsRole
드롭다운을 선택한 다음 Switch back
을 선택하여 기존 역할로 돌아가자.
이제 다시 사용자 그룹을 확인 할 수 있게 되었다.
버킷에서 파일을 다운 받기위해 사용했던, 역할인 BucketsRole
을 살펴 보도록 하자.
Access Management의 Roles(역할)에서 사용했던 역할인 BucketsRole
을 찾아 접근한다.
총 3가지의 권한이 있는 것을 확인할 수 있다.
그럼 다운로드가 가능했던 이유는 무엇일까?
해당 역할의 정책 중 BucketsRole
을 보면 이 정책에서는 s3:GetObject
및 s3:ListBucket
작업이 alpha-bucket
버킷에 대해서 허용되는 것을 확인할 수 있다.
"Resource": [
"arn:aws:s3:::alpha-bucket-us-west-2-111222333",
"arn:aws:s3:::alpha-bucket-us-west-2-111222333/*"
],
첫 번째는 버킷 자체와 관련된 작업을 수행하기 위한 권한이고, 두 번째는 버킷 내의 모든 객체에 대한 작업을 수행하기 위한 권한을 의미한다.
이제 Trust relationships
탭을 눌러 누가 이 IAM 역할을 맡을 수 있는지 확인해보자.
IAM 사용자 중 user-1
이 이 역할을 맡을 수 있도록 Trusted entities
에 포함되어 있는 것을 확인할 수 있다.
다시 BucketsRole
을 가지도록 IAM 역할을 변경해보자.
Role history
메뉴에서 생성하였던 역할을 다시 클릭하여 해당 역할로 전환한다.
기존에는 두 버킷 alpha
, bravo
둘 다 image
를 다운로드 할 때 오류가 났다.
하지만 BucketsRole
을 가진 IAM 사용자가 된 이후부터는 두 버킷 alpha
, bravo
둘 다 image
를 다운로드 할 수 있게 되었다.
alpha
버킷부터 다시한번 떠올려보자.
방금 8. IAM Role 확인 단계에서 확인 했던 내용이다.
BucketsRole
을 보면 이 정책에서는 s3:GetObject
및 s3:ListBucket
작업이 alpha-bucket
버킷에 대해서 허용해 주었기 때문이다.
그렇다. bravo
버킷에 허용된 Role은 없다.
하지만, bravo
버킷 또한 정상적으로 image
를 다운로드 할 수 있게 되었다.
정답은 bravo 버킷에 대해, BucketsRole
리소스 기반 정책이 걸려있기 때문이다.
이를 가능하게 하는 버킷의 정책을 확인해보자.
"Sid": "S3Write"
BucketsRole
을 가진 IAM 사용자가 bravo-bucket S3
에 대한 s3:GetObject
및 s3:PutObject
의 권한
을 허용한다.
"Sid": "ListBucket"
BucketsRole
을 가진 IAM 사용자가 bravo-bucket S3
에서 s3:ListBucket
을 허용한다.
즉, 버킷의 리스트를 확인할 수 있는 권한을 준다.
이를 통해서 S3 버킷의 Objects에 접근하고, 또 이러한 S3 버킷의 리스트를 확인할 수 있는 것이다.