본 실습 과정은 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 버킷의 리스트를 확인할 수 있는 것이다.