[AWS] IAM 보안 정책 실습 (IAM Policy, IAM Role, 리소스 기반 정책)

vinca·2023년 11월 9일
0

Introduction

본 실습 과정은 AWS Training and Certification을 바탕으로 작성되었습니다.


보안 정책의 종류

먼저 보안 정책의 종류부터 간단하게 집고 가자.
AWS에서 제공하는 보안 정책은 어떤 것들이 있을까?

IAM 정책 (IAM Policy)

  • AWS에서 사용자나 역할에 권한을 부여하는 규칙.
  • 이러한 정책은 사용자, 그룹, 또는 역할에 연결 가능하다.
  • 이를 통해 사용자가 어떤 작업을 수행 가능 하도록 할 지 지정할 수 있다.
  • 자격 증명 기반 정책(Credential-based Policy)이라고도 한다.

리소스 기반 정책

  • 특정 AWS 리소스(예: S3 버킷, EC2 인스턴스 등)에 연결되는 정책.
  • 이러한 정책은 해당 리소스에 대한 액세스를 어떤 엔터티에게 허용할지 지정.

🧐 엔터티란?
엔터티는 특정 사용자, 그룹, 또는 역할을 의미한다.

IAM 역할(IAM Role)

  • IAM 역할은 AWS 리소스 또는 다른 AWS 계정의 엔터티에 권한을 부여하기 위해 사용된다.
  • 역할은 특정 작업을 수행할 수 있는 권한을 가진 AWS 자격 증명이다.
  • 역할은 일반적으로 여러 사용자 또는 서비스가 필요할 때 공유되며, 이 역할을 맡은 엔터티에게는 해당 역할을 사용하는 동안 임시 보안 자격 증명이 부여된다.
    역할에는 장기 자격 증명(예: 암호 또는 액세스 키)이 아닌 임시 보안 자격 증명이 부여된다는 것을 주의하자.

자세한 내용은 AWS Security Essentials 참고.


실습

1. IAM 사용자로 로그인

EC2의 생성 권한이 없는 IAM 사용자로 로그인해보자.

2. EC2 인스턴스의 생성 확인

현재의 계정에서는 해당 AMI를 사용할 수 없다고 출력된다.

또한 Network Settings의 VPC 사용설정에서 다음과 같이 Vpc를 볼 권한이 없다고 나오는 것을 확인할 수 있다.

3. S3 버킷 확인

Access 열에서 모든 버킷에 대해 Insufficient permissions (충분한 권한이 없습니다)가 출력되는 것을 확인할 수 있다.

4번에서 확인할 내용이지만, 현재 s3:ListAllMyBuckets권한이 부여되어 있으므로 계정 내에서 모든 S3의 버킷을 볼 수 있지만, 객체를 업로드하거나 다운로드할 수는 없다.

4. 사용자에 할당된 IAM 권한 확인

이제 user-1 IAM 사용자에 대해서 어떤 권한이 열려있는지 확인해보도록 하자.

IAM의 Access management에서 User groups를 에서 생성되어 있는 DevelopersGroup를 확인해보자.

S3 대한 IAM 권한 확인

S3에 대한 IAM 권한은 다음과 같이 부여되어있는 것을 확인할수 있다.

JSON 정책을 확인해보면 s3:ListAllMyBuckets 역할은 부여 되어있는 것을 확인할 수 있다.

즉, S3 버킷 목록은 볼 수 있지만 Access 열 세부 정보는 볼 수 없다.

그 이유는 S3 버킷 페이지의 Access 열에서 세부 정보를 보기위한 권한인 s3:GetAccountPublicAccessBlock, s3:GetBucketPublicAccessBlock, s3:GetBucketPolicyStatus, s3:GetBucketAcls3:ListAccessPoints 권한들이 없기 때문이다.

그럼 S3에서 버킷 생성은 가능할까?

👌가능은 하다.

버킷을 생성하는 권한은 사용자에게 S3 버킷생성 권한 s3:CreateBucket이 있으므로 버킷을 생성할 수 있다.

하지만, 정책에는 버킷에 파일을 업로드 작업 권한 s3:PutObject 은 포함되어 있지 않으므로 버킷에 파일을 올리지는 못한다.

EC2에 대한 권한 확인

그럼 EC2의 경우는 왜 생성을 하지 못했을까?

S3는 s3:ListAllMyBuckets 로 리스트를 보는 것 까지는 권한이 있어 어떤 S3가 있는지 볼 수 있었다.
하지만, EC2의 경우 EC2 권한이 전혀 없으므로 EC2 작업에 액세스할 수도, 볼 수도 없다.

모든 권한이 없으므로 ec2:DescribeInstances 권한을 부여하라는 창이 표시될 뿐. 어떤 인스턴스가 있는지 볼 수도 없다.

전체 권한 확인

전체 권한은 다음과 같다.

5. 버킷에서 이미지 다운로드

권한이 현재 없으므로 Image1.jpeg를 받을 수 없다. (해보면 오류가 난다)

6. IAM 역할 할당 (Switch Role)

계정이름과, BucketRole을 등록하여 이를 통해 역할은 변경하고 다시 다운로드를 시도해보자.

다음과 사용자의 이름 앞에 역할 명이 나오며 색이 변경된 것을 확인할 수 있다.

이제 다운로드를 시도하면 정상적으로 이미지 파일이 다운로드 되는 것을 확인할 수 있다.

7. IAM 권한 확인

어떤 권한이 변경되었길래, 다운로드가 가능해졌을까?
IAM을 접속하여 User groups를 확인해보자.

IAM 역할을 변경했으므로, 현재 다른 역할을 수행중인 상황에서 확인이 불가능하다.

현재 역할인 BucketsRole은 IAM 그룹 페이지를 보는 권한인 iam:ListGroups 작업을 허용하지 않기 때문이다.

페이지 오른쪽 상단에서 BucketsRole 드롭다운을 선택한 다음 Switch back을 선택하여 기존 역할로 돌아가자.

이제 다시 사용자 그룹을 확인 할 수 있게 되었다.

8. IAM Role 확인

버킷에서 파일을 다운 받기위해 사용했던, 역할인 BucketsRole을 살펴 보도록 하자.

Access Management의 Roles(역할)에서 사용했던 역할인 BucketsRole을 찾아 접근한다.

총 3가지의 권한이 있는 것을 확인할 수 있다.

다운로드가 가능했던 이유?

그럼 다운로드가 가능했던 이유는 무엇일까?

해당 역할의 정책 중 BucketsRole을 보면 이 정책에서는 s3:GetObjects3:ListBucket 작업이 alpha-bucket 버킷에 대해서 허용되는 것을 확인할 수 있다.

🧐 왜 Resource의 내용이 2개일까?

"Resource": [
                "arn:aws:s3:::alpha-bucket-us-west-2-111222333",
                "arn:aws:s3:::alpha-bucket-us-west-2-111222333/*"
],

첫 번째는 버킷 자체와 관련된 작업을 수행하기 위한 권한이고, 두 번째는 버킷 내의 모든 객체에 대한 작업을 수행하기 위한 권한을 의미한다.

9. Trust relationships 확인

이제 Trust relationships 탭을 눌러 누가 이 IAM 역할을 맡을 수 있는지 확인해보자.

IAM 사용자 중 user-1이 이 역할을 맡을 수 있도록 Trusted entities에 포함되어 있는 것을 확인할 수 있다.

10. Bucket policy 확인

다시 BucketsRole을 가지도록 IAM 역할을 변경해보자.

Role history 메뉴에서 생성하였던 역할을 다시 클릭하여 해당 역할로 전환한다.

기존에는 두 버킷 alpha, bravo 둘 다 image를 다운로드 할 때 오류가 났다.

하지만 BucketsRole을 가진 IAM 사용자가 된 이후부터는 두 버킷 alpha, bravo 둘 다 image다운로드 할 수 있게 되었다.

가능한 이유는?

alpha 버킷부터 다시한번 떠올려보자.

방금 8. IAM Role 확인 단계에서 확인 했던 내용이다.

BucketsRole을 보면 이 정책에서는 s3:GetObjects3:ListBucket 작업이 alpha-bucket 버킷에 대해서 허용해 주었기 때문이다.

bravo 버킷에 대해서는 허용된 Role이 없는데?!

그렇다. bravo 버킷에 허용된 Role은 없다.

하지만, bravo 버킷 또한 정상적으로 image다운로드 할 수 있게 되었다.

왜 가능할까?

정답은 bravo 버킷에 대해, BucketsRole 리소스 기반 정책이 걸려있기 때문이다.

이를 가능하게 하는 버킷의 정책을 확인해보자.

정책 확인

  • "Sid": "S3Write"

    BucketsRole을 가진 IAM 사용자가 bravo-bucket S3에 대한 s3:GetObjects3:PutObject의 권한
    을 허용한다.

    • "Resource": "arn:aws:s3:::bravo-bucket-us-east-2-953355420/*"
      현재 /* 를 보면 버킷의 데이터 내에 읽고 쓰기를 허용하는 것을 확인할 수 있다.
  • "Sid": "ListBucket"

    BucketsRole을 가진 IAM 사용자가 bravo-bucket S3 에서 s3:ListBucket을 허용한다.
    즉, 버킷의 리스트를 확인할 수 있는 권한을 준다.

    이를 통해서 S3 버킷의 Objects에 접근하고, 또 이러한 S3 버킷의 리스트를 확인할 수 있는 것이다.

    • "Resource": "arn:aws:s3:::bravo-bucket-us-east-2-953355420"
      현재 맨 뒤를 보면 /*가 없는 것을 확인할 수 있다. 따라서, 버킷 자체를 기준으로 접근할 수 있다는 것이다.
profile
붉은 배 오색 딱다구리 개발자 🦃Cloud & DevOps

0개의 댓글