DEVELOP/AWS

AWS | [실습] IAM을 사용하여 AWS 계정 액세스 제어하기

Hanee_ 2023. 2. 23. 11:44

모듈 8 - 챌린지 랩: IAM을 사용하여 AWS 계정 액세스 제어

 

시나리오

 

카페의 AWS 인프라에 대해 Mateo와 이야기를 나눈 후, Sofía는 카페 직원이 AWS 계정을 사용하는 방식과 관련한 몇 가지 기본적인 보안 문제를 해결해야 한다는 사실을 깨달았습니다.

이제 카페는 AWS에서 애플리케이션을 구축, 유지 관리 또는 액세스하는 팀원이 역할(예: 개발자 또는 데이터베이스 관리자)을 전문적으로 수행할 수 있을 만큼 충분히 성장했습니다. 지금까지는 역할과 책임에 따라 각 사용자에게 어떤 수준의 액세스 권한을 부여해야 할지 명확하게 정의하려는 노력을 기울이지 않았습니다.

Sofia는 특히 AWS Cloud9, Amazon Elastic Compute Cloud(Amazon EC2) 및 Amazon Relational Database Service(Amazon RDS)를 통해 각 사용자의 계정에서 수행하도록 허용할 작업에 대해 고민하는 시간을 보냈습니다. 몇 가지 결정을 내리고 AWS 계정에서 액세스 권한을 어떻게 정의할지 설명하는 차트를 만들었습니다.

 

 

IAM 그룹IAM 사용자AWS 서비스 액세스이유

AppDevelopers Nikhil AWS Cloud9를 통해 Amazon EC2 개발 환경에 액세스합니다.
또한 Amazon EC2에 대한 읽기 전용 액세스도 가능합니다.
Nikhil은 종종 애플리케이션 개발자 역할을 수행합니다. 따라서 카페 웹 애플리케이션의 개발 환경에 접근하기 위해 AWS Cloud9 환경에 액세스할 수 있어야 합니다. 하지만 프로덕션 환경에 접근해서는 안 됩니다. 또한 모든 Amazon EC2 리소스 및 구성 세부 정보를 볼 수 있어야 하지만 수정하지는 못해야 합니다.
DBAdministrators Olivia Amazon RDS에대한 전체 액세스 권한을 갖습니다.
또한 AWS Systems Manager에 대한 전체 액세스 권한도 있습니다.
Olivia는 카페 웹 애플리케이션이 사용하는 데이터베이스를 관리할 계약직 데이터베이스 관리자로 고용되었습니다. 따라서 전체 Amazon RDS 액세스 권한이 있어야 합니다. 또한 데이터베이스 연결 정보가 저장되는 AWS Systems Manager에 액세스해야 합니다. 하지만 Sofía는 Olivia가 이 두 서비스를 제외한 AWS 리소스에 액세스할 필요는 없을 것으로 판단합니다.

Sofía는 사용자에게 직접 권한을 할당하는 대신 IAM 그룹을 정의하기로 결정했습니다. 그런 다음 해당 그룹에 대한 액세스 권한을 부여하는 IAM 정책을 연결합니다. 그리고 사용자를 적절한 그룹에 할당할 계획입니다. 카페에서 개발자 또는 데이터베이스 관리자를 더 많이 채용할 경우 그룹에 새 사용자로 추가할 수 있습니다. 새 사용자는 AWS 계정 인프라를 개발하고 유지 관리하는 데 있어 자신의 역할에 맞는 권한을 상속받습니다. 이 접근 방식은 카페가 성장함에 따라 확장됩니다.

이제 Sofia가 어떤 사용자에게 어떤 액세스 권한을 할당하고자 하는지 알았으므로 시작할 준비가 되었습니다.

 

실습 개요 및 목표

이 실습에서는 AWS Identity and Access Management(IAM)를 사용하여 사용자마다 서로 다른 액세스 권한을 정의합니다. 액세스 권한을 테스트하고 조정합니다. 또한 부여한 액세스 권한이 IAM 사용자가 AWS 계정 리소스에서 수행할 수 있는 작업에 어떻게 영향을 미치는지 살펴봅니다.

 

 

이 실습을 마치면 다음을 수행할 수 있습니다.

  • IAM 사용자 및 IAM 그룹을 생성하고 IAM 정책을 IAM 그룹에 연결
  • 제한된 액세스 권한이 IAM 사용자가 액세스할 수 있는 리소스와 수행할 수 있는 작업에 미치는 영향 설명
  • AWS 관리형 IAM 정책을 사용하여 사용자 액세스 권한을 수정하고 결과 관찰
  • IAM 정책 시뮬레이터를 사용하여 다양한 정책에서 허용하는 액세스 범위 관찰
  • IAM Access Advisor에 액세스하여 다양한 사용자가 어떤 액세스 권한을 사용하고 있는지 관찰
  • 시각적 편집기를 사용하여 사용자 지정 IAM 정책 생성

 

 

 

 


태스크 1: 정책 및 IAM 사용자를 사용하여 IAM 그룹 구성

실습의 첫 번째 태스크에서는 AWS 계정 관리자 Sofia로서 작업을 수행합니다.

Sofía로서 IAM 그룹을 생성하고 AWS 관리형 정책을 해당 그룹에 할당합니다. 그런 다음 새 IAM 사용자를 생성하고 해당 사용자를 그룹의 구성원으로 추가합니다. 다음으로, 카페 웹 애플리케이션의 개발 버전이 실행되는 기존 EC2 인스턴스에 AWS Cloud9 환경을 생성합니다. 마지막으로, 개발 환경을 새 사용자와 공유합니다.

참고: 로그인하는 데 사용한 사용자가 웹 페이지의 오른쪽 상단에 표시됩니다. 현재 voclabs 사용자로 로그인되어 있음을 알 수 있습니다. 이 실습에서는 voclabs 사용자가 Sofia라고 할 수 있습니다.

 

 

 

AppDevelopers라는 IAM 그룹을 생성하고 여기에 다음 IAM 정책을 연결한다.

  • AmazonEC2ReadOnlyAccess
  • AWSCloud9EnvironmentMember

 

IAM 사용자를 생성하고 AppDevelopers 그룹에 이 사용자를 추가합니다.

  • User name: Nikhil
  • Access type: AWS Management Console access
  • Custom password: @ppD3veloper2020!
  • Require password reset: 이 확인란 선택 취소
  • Nikhil을 AppDevelopers 그룹에 추가
  • 참고: 태그는 추가하지 않아도 됩니다.
  • Success 화면에서 원하는 경우 Download.csv를 선택하고 파일을 컴퓨터에 저장할 수 있습니다.

 

 

voclabs 사용자(Sofía)로 로그인한 상태로, AWS Cloud9 IDE에 연결하고 카페 웹 애플리케이션을 설정해야한다.

AWS Cloud9 서비스 페이지를 열고 DEVCafeServer에서 Open IDE를 선택하면, EC2 인스턴스에서 실행되는 AWS Cloud9 IDE가 표시된다.

 

 

화면 하단의 Bash 터미널 창에서 다음 세 개의 명령을 붙여 넣고 실행한다.

wget https://aws-tc-largeobjects.s3-us-west-2.amazonaws.com/ILT-TF-200-ACACAD-20-EN/mod8-challenge/install-cafe-app.sh
chmod +x install-cafe-app.sh
./install-cafe-app.sh

 

 

Nikhil 사용자와 AWS Cloud9 환경을 공유하기 위해 오른쪽 상단 share 선택 후 Invite MembersNikhil을 입력하고 Invite를 선택한다.

 

 


태스크 2: Nikhil로 로그인하여 액세스 테스트

 

Nikhil로 AWS Management Console에 로그인한다.

 

Amazon EC2 콘솔을 열고 브라우저 탭에서 카페 웹 애플리케이션을 로드하고, 새 브라우저 탭에서 http://<dev-public-ip-address>/cafe에 접속해 카페 웹사이트가 표시되는지 확인한다.

 

aws-cloud9-DEVCafeServer 인스턴스를 재부팅 해본다.

 

 

-> 권한이 없다고 뜸

 

 

sofia로 접속한 뒤, AWS Cloud9 콘솔로 이동하여 DEVCafeServer EC2 인스턴스의 AWS Cloud9 IDE에 연결한다. 카페 웹 사이트의 개발 인스턴스에서 웹 페이지의 기본 제목을 수정하고, DEVCafeServer/www/html/cafe 의 index.php 13행을 수정한다. 

 

 

 

Nikhil로서 Systems Manager Parameter Store를 열면 오류가 뜬다. 

더불어 새 브라우저 창에서 http://prod-public-ip-address/cafe/menu.php를 로드할 수 없다.

 


새로운 비즈니스 요구 사항: 데이터베이스 관리자를 위한 AWS 계정 액세스 구성(챌린지 2)

Nikhil은 Sofía에게 테스트 결과를 보고했습니다. Sofía는 프로덕션 환경이 잘 작동한다는 것을 알고 기뻐합니다. 하지만 Sofia는 개발 사이트에서 문제를 해결하기를 원합니다.

Sofía는 Olivia에게 이 문제를 해결해 달라고 부탁하기로 결심합니다. 하지만 Sofia는 먼저 데이터베이스 관리자를 위한 AWS 계정 액세스 권한을 정의해야 합니다. 그런 다음 IAM 사용자 리소스를 생성하여 Olivia가 계정에 로그인할 수 있도록 해야 합니다.

 

 

 

태스크 3: 데이터베이스 관리자 사용자 액세스를 위한 IAM 구성

이 태스크에서는 Sofía의 역할을 맡아 Olivia의 AWS 액세스를 허용해야 합니다.

 

 

 

  1. voclabs 사용자(Sofia)로 로그인한 브라우저로 돌아가 다음 권한을 가진 DBAdministrators라는 IAM 그룹을 생성합니다.
  • AmazonRDSReadOnlyAccess
  • AmazonSSMFullAccess

 

 

AWS Management Console 액세스 권한이 있는 Olivia라는 IAM 사용자를 생성한다. 이후, DBAdministrators 그룹에 Olivia를 추가한다.

 

 


태스크 4: 데이터베이스 관리자로 로그인하여 데이터베이스 연결 문제 해결

이 태스크에서는 Nikhil이 발견한 데이터베이스 문제를 해결하기 위해 Olivia의 역할을 수행합니다. 또한 Olivia가 몇 가지 문제를 해결하는 데 도움을 주기 위해 Sofía로서도 작업을 수행하게 됩니다.

 

 

 

Olivia로 로그인한 뒤, RDS 데이터베이스가 실행 중인지 확인한다.

 

 

EC2 콘솔을 열고 Running Instances를 선택한다. 하지만 ec2 인스턴스 세부 정보에 액세스할 수 없다. 

Sofia로 작업하면서 AWS 리소스에 대한 Olivia의 액세스 권한을 검토하고 업데이트해야한다.

 

 

 

voclabs 사용자(Sofia)로 로그인한 탭에서 DBAdministrators 그룹을 열고 다음 정책을 연결한다. 

  • AmazonEC2ReadOnlyAcce

권한 추가 후 보이는 ec2

인스턴스의 카페 웹 애플리케이션이 Parameter Store의 데이터베이스 자격 증명에 액세스할 수 있도록 하는 정책의 두 가지 특정 작업 -> ssm:GetParameter, GetParameters

 

 

 

 

 


이제 Olivia는 개발 EC2 인스턴스의 웹 애플리케이션이 파라미터 스토어에 액세스할 수 있다고 확신합니다. 문제는 다른 곳에 있는 것 같습니다. Olivia는 Sofía와 이 문제를 논의합니다.

대화가 끝난 후, Sofía는 개발 환경이 이전에 로컬 데이터베이스를 사용했지만 지금은 Amazon RDS를 사용한다는 사실을 떠올립니다. 로컬 데이터베이스의 사용자 이름이 달라 웹 애플리케이션이 데이터베이스에 연결할 수 없습니다. Amazon RDS에서 데이터베이스에 연결하려면 다른 데이터베이스 사용자 이름이 필요합니다. 이것이 문제의 원인일 수 있습니다.

Sofia는 Olivia에게 데이터베이스 사용자 이름이 문제의 원인인지 확인하고 업데이트할 것을 요청합니다.

 

 

 

Olivia로 Systems Manager Parameter Store에서 dbUser 값을 업데이트한다.

 


새로운 비즈니스 요구 사항: IAM 사용자 액세스 개선(챌린지 3)

Frank와 Martha는 Sofia와 팀이 AWS 계정의 보안을 개선한 것에 만족하고 있습니다. 한편, Sofia는 애플리케이션 개발자와 데이터베이스 관리자에게 각기 다른 권한을 구성할 수 있게 되어 기쁩니다. 그녀는 각 역할마다 별도의 권한을 할당하여 팀원들이 각자의 핵심 역량과 배정된 책임 영역 내에서 함께 일하면서 개발 작업을 수행하고 문제를 해결하기를 바랍니다.

Sofía는 친구들과 함께 잠시 휴식을 취합니다. 하지만 그러면서도 이미 다른 사용자에게 할당한 보안 설정을 보다 세부적으로 사용자 지정할 것을 고려하고 있습니다. 일부 사용 권한은 여전히 너무 높게 설정되어 있으며 최소 권한 원칙을 완벽하게 따르지 않습니다. 실습의 마지막 챌린지에서는 Sofía의 역할을 맡아, 데이터베이스 관리자 그룹의 구성원에게 허용된 IAM 작업 수를 줄이는 사용자 지정 IAM 정책을 정의합니다. 하지만 동시에 직무를 완수할 수 있도록 충분한 IAM 액세스 권한을 부여해야 합니다.

 

 

 

태스크 5: IAM 정책 시뮬레이터를 사용하고 시각적 편집기에서 사용자 지정 IAM 정책 생성

 

 

voclabs 사용자(Sofia)로 로그인한 브라우저 창으로 돌아가 새 브라우저 탭에 https://policysim.aws.amazon.com/ URL을 로드한다. Olivia 사용자를 선택하고, IAM Policies 목록에서 IAMReadOnlyAccess 정책이 선택되어 있는지 확인한다. 다른 정책의 확인란은 선택 취소한다. Policy Simulator 섹션에서 Select service를 선택한다. Filter 검색 상자에 Ident를 입력하고 Identity and Access Management를 선택한다. Select actions 메뉴의 오른쪽에서 Select All 옵션을 선택한 다음 Run Simulation을 선택한다. Action Settings and Results 패널에 작업 목록이 표시되는 것을 확인할 수 있다.

 

 

 

 

Sofía는 Olivia에게 IAMReadOnlyAccess 정책 권한을 부여한 단 한 가지 이유를 떠올립니다. Olivia에게 특정 정책의 세부 사항을 관찰할 수 있는 권한을 부여하고자 했습니다. 해당 정책은 두 카페 서버 인스턴스에 연결된 IAM 역할에 연결됩니다. Sofía DBAdministrators 그룹의 구성원에게 적용할 좀 더 제한적인 새 IAM 정책을 생성하기로 결정했습니다.

다음 단계에서는 Sofia로 작업하면서 이 새 정책을 작성합니다.

 

 

 

voclabs 사용자(Sofia)로 로그인한 브라우저 탭으로 돌아간 뒤 IAM 콘솔에서 Policies를 선택한 다음 Create Policy를 선택한다. 

  • Choose a service를 클릭합니다. EC2를 검색하여 선택한다.
    • Actions 검색 상자에서 IAM을 검색한 다음 DescribeIamInstanceProfileAssociations를 선택합니다.
  • Choose a service을 클릭합니다. IAM을 검색하여 선택한다.
    • Actions 검색 상자에서 Get을 검색하고 다음 작업을 선택
      • GetPolicyVersion, GetRole, GetRolePolicy
    • 검색 상자로 돌아가 List를 검색하고 다음 작업을 선택
      • ListAttachedRolePolicies, ListInstanceProfiles, ListInstanceProfilesForRole, ListPolicies, ListRolePolicies, ListRoles

 

하지만 이 실습 환경에서는 IAM 정책을 생성하는 권한을 부여할 수 없다. Review policy를 선택하고 정책에 이름을 지정한 다음 Create policy를 선택하면 권한 오류가 발생한다. 아쉽게도 취소,,누르고 다음 실습을 진행한다.

 

 

DBAdministrators IAM 그룹을 편집한다. 

  • LimitedIamPolicy 정책 Attach / IAMReadOnlyAccess 정책 Detach

Sofía는 Olivia에게 제한된 IAM 액세스 권한을 부여하더라도 CafeRole IAM 역할의 세부 정보에 액세스할 수 있는지 확인하도록 요청한다.

 

 

 

Olivia로 로그인해 있는 브라우저 탭에서 CafeRole의 세부 정보에 계속 액세스할 수 있는지 확인한다.

  • EC2 콘솔에서 aws-cloud9-DEVCafeServer 인스턴스 선택.
  • Description 탭에서 IAM role > CafeRole을 선택
  • AmazonSSMManagedInstanceCore 정책을 펼치고, JSON 문서 세부 정보를 볼 수 있는지 확인

 

 

 

 

answer 2는 답안이 잘못 기재된듯..?