Study/Cloud

[AWS] IAM 따라해보자!

AC 2019. 2. 18. 19:23



먼저 IAM User, IAM Group, IAM Role 객체를 만들어 보고, 각 객체가 사용할 IAM Policy를 지정하여 권한을 제어하는 법을 살펴보자.



4-1 IAM User 생성

먼저 AWS 계정 내에 IAM User 생성한다. 각각의 IAM User는 IAM Policy를 통해 제한된 권한을 갖고 이 권한을 통해 AWS의 각종 리소스에 접근할 수 있다.

IAM User 생성


두 번째로 단계로 IAM User에 권한을 부여한다. 생성한 IAM User를 IAM Group에 포함시킬 수도 있고, 다른 IAM User의 권한을 복사할 수도 있다. 또한 사전에 AWS에서 정의해 놓은 IAM Policy를 선택하여 바로 권한을 부여할 수도 있다.



IAM User 권한 지정



"AdministratorAccess"로 명명된 IAM Policy를 선택하여 해당 IAM User에게 관리자 권한을 부여하겠다.

Review를 끝내고 확인을 누르면 생성한 IAM User, Access&SecretKey, Password 정보를 확인할 수 있다.


IAM User 생성 확인



Access&SecretKey는 AWS Management Console이 아닌 원시 API, AWS SDK, AWS CLI 사용시 필요한 인증키이다. 만일 관리자 권한이 있는 IAM User의 Access&SecretKey가 외부에 노출된다면 허가되지 않은 사용자가 AWS CLI나 AWS SDK를 사용하여 내 계정 내의 AWS 인프라를 마음대로 구성하거나 삭제할 수 있는 것이다. 따라서 해당 인증키값은 절대 외부로 노출되지 않도록 관리에 특별한 주의가 필요하다.(Github 등 소스코드에 AWS 인증키가 노출되는 경우가 있으므로 주의하자.)

이후 WordPress 플러그인을 통해 S3에 접근할 때 사용하는 Access&SecretKey가 추가로 필요하다. 따라서 신규 IAM User를 추가로 생성하고 AmazonS3FullAccess 권한의 IAM Policy를 지정한다. 생성한 IAM User의 Access&SecretKey를 저장하여 이후 WordPress에서 사용한다.

4-2 IAM Group 생성

각 IAM User의 권한을 통합 관리할 수 있는 IAM Group 객체를 생성한다. IAM Group에 IAM Policy를 붙여 권한을 정의하고, IAM Group 내에 IAM User를 산입시켜 IAM Group 단위로 편리하게 관련 권한을 관리/변경할 수 있다.

[AWS Management Console] > [IAM] > [Groups] > [Create New Group]

IAM Group 생성


Manager라는 IAM Group 객체를 생성했다. 그리고 이 Manager 그룹 내에 존재하는 IAM User에게는 AWS Resource 현황만 확인(읽기권한)할 수 있도록 제어하고 싶다.


다음 단계 Attach Policy를 통해 ReadOnlyAccess 권한을 부여한다.


IAM Group에 IAM Policy 붙이기




ReadOnlyAccess는 AWS 리소스 현황을 확인할 수만 있는 읽기 전용 권한이다. 예를 들어, EC2 인스턴스 정보를 삭제, 정지하거나 신규로 생성할 수는 없다. 다른 서비스도 마찬가지로 리소스 정보는 확인 가능하나 변경과 관련된 액션은 할 수 없도록 하는 읽기 전용 권한이다.

이번에는 생성한 IAM Group 객체에 IAM User를 산입하겠다.


[AWS Management Console] > [IAM] > [Groups] > [생성한 Group 선택] > [Users] > [Add Users to Group] > [생성한 User 선택] > [Add Users]

IAM Group에 IAM User 추가


admin 이름의 IAM User는 IAM User에 붙은 IAM Policy와, 속한 IAM Group에 붙은 IAM Policy에서 정의한 권한을 모두 갖는다.

앞에서 IAM User에 관리자 권한을 이미 부여하였으므로 IAM Group에서 상속받는 ReadOnly 권한(관리자 권한의 일부)은 결론적으로 의미는 없다.




여기서 잠깐 Q&A


Q. IAM User 메뉴 탭에 보면 Access Advisor라고 있는데, 이건 무어싱며 언제 사용되나요?



A. Access Advisor는 해당 IAM User의 인증 정보를 사용하여 수행한 API Call의 최근 히스토리 내역을 AWS 서비스별로 표시해주는 기능이다. 실제 각각의 IAM User에게 최소한의 권한을 부여할 것을 권장하지만, IAM User에게 필요한 최소 권한이 무엇인지 사전에 식별하고 정의하는 것이 쉬운 일이 아니다. 현재 IAM User가 사용 중인 권한이 무엇인지 확인하여 차후 권한을 세부적으로 조정하기 위한 백데이터를 제공하는 기능이 바로 Access Advisor이다. 각 IAM User의 Access Advisor 정보로 최근 히스토리를 확인하고 "최근 1개월간 API Call 내역이 없을 경우 관련 권한을 주기적으로 삭제한다"는 식으로 계정 권한관리 규칙을 만드는 데 활용할 수 있다.

 




IAM User가 AWS Management Console을 통해 로그인할 수 있는 주소는 기본적으로 "[계정 ID].signin.aws.amazon.con/console"이다. 12자리의 숫자로 구성된 계정ID를 사용하는 방식은 아무래도 직관성이 떨어지기 때문에 해당 부분을 Alias를 통해 원하는 문자열로 변경하여 사용할 수도 있다.



[AWS Management Console] > [IAM] > [Customize] > [Custom Login URL 설정]

IAM User 로그인을 위한 Sign-in link 수정




웹 브라우저를 통해 기존 혹은 수정한 sign-in link 주소로 접속하면 다음과 같은 화면을 볼 수 있다.

Sign-in link를 통해 IAM User 로그인



Sign-in link를 통해 접속하면 계정, 사용자 이름, 암호 세 가지 입력창이 나온다. 계정은 Sign-in link URL의 이름이며, 사용자 이름은 IAM User의 이름이다. 암호는 IAM User에 설정한 암호를 입력하면 된다.

4-3 IAM Role 생성

IAM Role을 이용하여 IAM User의 Access&secretKey를 사용하지 않고도 AWS API를 사용할 수 있또록 구성할 수 있다. EC2 인스턴스에서 IAM User의 인증키쌍(Access&SecretKey)없이 S3와 CloudWatch 서비스를 사용할 수 이;ㅆ도록 하는 IAM Role 객체를 생성해보자.

[AWS Management Console] > [IAM] > [Roles] > [Create New Role] > [Role 이름 지정]


IAM Role 객체 생성



Select Role Type은 해당 IAM Role을 사용하는 주체가 누구인지 설정하는 부분이다. 보기와 같이 IAM Role을 사용하는 주체는 특정 AWS 서비스, 다른 계정의 객체, 다른 인증체계의 객체가 될 수 있다.


[AWS Service Roles] > [Amazon EC2 선택]

IAM Role의 Role Type 설정



여기서 사용할 IAM Role은 EC2 인스턴스에서 사용할 예정이므로 Select Role Type에서 Amazon EC2를 선택한다.
해당 IAM Role이 사용할 IAM Policy를 설정한다. S3와 CloudWatch와 관련된 API를 사용할 계획이므로 S3FullAccess와 CloudWatchFullAccess를 검색/선택한 후 다음 단계를 진행한다.

IAM Role에서 사용할 IAM Policy 선택



마지막으로 Review 화면을 통해 생성할 IAM Role의 설정이 정확한지 확인한 후(IAM Policy가 두 개 지정되어 있어야 한다.) 객체를 생성한다. 여기서 생성한 IAM Role은 이후 EC2 단원에서 활용할 예정이다.

4-4 IAM Policy 생성

IAM Policy는 기존에 AWS에서 만들어 놓은 권한(AWS Managed Policy) 또는 사용자가 직접 만들어 정의하는 권한(Customer Managed Policy)을 사용할 수 있다(기타 Inline Policy도 있다). AWS에서는 IAM Policy 문법이 익숙하지 않은 사용자를 위해 Policy Generator라는 정책 편집기를 제공하고 있다. 이번에는 IAM Policy 정책 편집기를 이용해서 특정 IP 대역의 사용자만 S3에 접근 가능한 IAM Policy를 만들어 보자.

[AWS Management Console] > [IAM] > [Create New Policy] > [Policy Generator] > [Policy Generator]


IAM Policy 객체 생성



Policy Generator를 선택하면 웹 브라우저에서 AWS Policy 편집기 화면을 확인할 수 있다.

Policy Generator를 이용하여 IAM Policy 생성



Service는 "S3"를 선택하고, Action에서는 S3에서 객체를 다운받는 권한인 "GetObject"를 선택한다.
ARN은 *를 입력하여 모든 사용자 및 AWS 리소스에서 S3의 GetObject를 사용할 수 있도록 한다. Condition 항목을 사용하여 자신의 Local IP에서만 해당 권한을 사용할 수 있도록 마지막 항목을 추가한다. Resource의 경우 모든 Bucket에서 다운 가능하도록 *을 입력한다.


정의한 IAM Policy 확인



정책 입력이 끝나면 생성한 정책의 Policy Document를 확인한다.
참고로 ARN은 AWS Resource Name의 약자로 AWS 내의 모든 리소스는 다음의 형식에 따라 각기 고유의 주소값을 갖고 있다.

ARN 주소체계



AWS에서는 주어진 권한을 사전에 테스트해볼 수 있는 수단도 제공한다. 이를 IAM Policy Simulator라고 부르며 AWS Management Console에서 사전에 로그인 한 후 다음 URL로 접속하면 정의한 권한을 사전에 시뮬레이션해볼 수 있다.

[https://policysim.aws.amazon.com/home/index.jsp 접속] > [테스트가 필요한 Group/User/Role 선택] > [Resource 선택] > [Action 선택] > [Run Simulation]

AWS Policy Simulator를 사용한 정책 검증



이전에 생성한 IAM Role(blog-ec2)을 테스트해보자. S3 서비스와 모든 액션을 선택하고 테스트 해보면 S3와 관련된 모든 액션이 허용되는 것을 확인할 수 있다.



LIST