6장 인증과 권한 부여: AWS IAM

GonnabeAlright·2022년 3월 21일
0
post-thumbnail
AWS Certified Solutions Architect STUDY GUIDE 도서를 읽고 정리한 내용입니다.

여러분의 AWS 리소스는 비즈니스를 위해 매우 소중한 자원이므로 안전하게 보호해야 한다. 하지만 너무 엄격하게 접근을 제한할 경우 어드민 또는 고객이 접근해야 하는 리소스에 접근하지 못하는 문제가 발생할 수 있다.

안전성과 접근성의 균형을 맞추는 일은 결코 쉽지 않으며, 접근이 필요한 사용자를 등록하거나 특정인의 접근 권한을 허용 또는 불허하는 시스템을 갖추기 위해서는 많은 노력이 필요하다. 하지만 AWS 사용자는 Identity and Access Management (이하 IAM)을 통해 리소스 관리에 필요한 신분확인 및 권한부여 업무를 처리할 수 있다.

AWS에서는 Kerberos, Microsoft Active Directory, 또는 Lightweight Directory Access Protocol(LDAP) 등 다양한 외부 신분 확인 및 권한 부여 서비스와 연계한 연합 신분 체계(federated identities)를 이용해 유저 또는 애플리케이션의 접근권한을 증명할 수 있다.

IAM 정책은 하나 이상의 AWS 리소스와 관련된 일련의 허용 동작 및 불허 동작을 정리한 문서라고 할 수 있다. 이 때 정책에서는 효과(effect)라는 속성으로 허용 또는 불허를 나타내며, 각각 Allow 또는 Deny라는 속성 값을 사용한다.

사용자는 IAM Dashboard를 통해 수백 여 개의 사전 정의된 정책을 확인하고, 키워드를 이용해 자신의 목적에 맞는 정책을 찾아서 활용할 수 있다. 또는 Dashboard의 정책 생성(Create policy)페이지에서 정책을 생성하거나 JSON 포맷 텍스트로 직접 정책을 작성할 수 있다.

정책 문서에 의해 명시적으로 정의되지 않은 모든 동작은 불허된다. 하나의 IAM 정책을 다수의 신분에 연계할 수 있으며, 하나의 신분에는 최대 10개의 정책(6,144자 미만의 정책 문서)를 연계할 수 있다.

만일 하나의 신분에 연결된 두 개의 정책이 서로 상반된 내용을 담고 있으면 어떻게 될까? 예를 들어, 하나의 정책은 S3 버킷 생성을 허용하고, 다른 정책은 S3 버킷 생성을 불허하는 경우는 어떻게 될까 ? AWS는 이와 같은 상충이 발생하는 경우, '불허' 기준을 따르도록 한다.

루트 계정을 봉인하면서 그에 준하는 AdministratorAccess 권한의 계정을 생성하는 데는 어떤 실익이 있을까 ? 즉, 루트 계정이든, 어드민 권한의 계정이든, 리소스에 대한 모든 접근 권한을 가졌다는 사실은 동일하지 않은가 하는 의문이 들 것이다. 사실 루트 계정과 모든 권한을 부여받은 어드민 계정에서는 매우 큰 차이점이 존재한다. 특히 전계정에 대한 예산 관리 권한과 특정 S3 버킷에 대한 MFA Delete 권한은 오직 루트 계정만이 지닌다.

개별 유저를 생성할 때는 AWS 작업을 안전하고 효율적으로 수행할 수 있는 만큼만 접근권한을 부여해야 한다. 하지만 계정 관리가 복잡해지고 바빠질수록 개별 유저를 일일이 관리하는 것은 불가능해진다.

이럴 경우 팀 단위로 접근권한을 부여하면 변경 사항이 생겼을 때도 일괄적으로 적용할 수 있어 편리하다. 이러한 필요를 충족시키기 위한 것이 바로 IAM 그룹이다.

IAM 롤은 유저 또는 서비스가 리소스에 대한 접근 요청을 할 때 이용할 수 있는 임시 신분이라 할 수 있으며, 롤을 이용해 서비스와 관련된 다양한 논리 문제를 해결할 수 있다.

접근권한 관리 도구

사용자의 접근권한 관리를 위한 주요 도구로는 Amazon Cognito, AWS Managed Microsoft AD, AWS Single Sign-On 등이 있고, 키 암호화 및 보안 자격증명 도구로는 AWS Key Management Service(KMS), AWS Secrets Manager, AWS CloudHSM등이 있다.

Amazon Cognito

Cognito는 모바일 앱 및 웹 앱 개발자를 위한 회원가입 및 로그인 기능을 제공한다.

  • Cognito 유저 풀(user pool): 애플리케이션에 회원가입 및 로그인 기능을 추가할 수 있다.
  • Cognito 아이덴티티 풀(identity pool): 애플리케이션 사용자에게 여러분 계정에 있는 다른 서비스에 대한 임시 접근권한을 부여할 수 있다.

AWS Managed Microsoft AD

Managed Microsoft AD는 AWS Directory Service를 통한 AD 접근, 즉 액티브 디렉토리 접근 서비스이며, Amazon Cloud Directory와 Cognito 등 다른 디렉토리 관리 서비스와 유사한 기능을 제공한다.

AWS Single Sign-ON

AWS Single Sign-On(이하 SSO)은 기존의 AWS Directory Service로 관리되는 Microsoft Active Directory의 신분확인 및 권한부여 작업을 일관되게 수행하며, AWS Organizations에 포함된 다수의 AWS 계정에서도 사용할 수 있다.

AWS Key Management Service

AWS KMS는 AWS 서비스를 이용하기 위한 암호화 키 생성 및 관리 서비스다. 모든 종류의 키와 관련된 이벤트를 추적하는 AWS CloudTrailKMS를 통합해 기업의 감사 업무 및 준법 감시 업무에 사용할 수 있다.

AWS Secrets Manager

패스워드와 서드파티 API 키 등 애플리케이션에서 필요로 하는 시크릿 리소스를 전문적으로 다룰 수 있는 도구가 바로 AWS Secrets Manager이다. 실행 코드에 민감한 시크릿 코드를 입력하는 방법 대신, Secrets Manager를 이용해 변경 사항을 정기적으로 업데이트하는 방식으로 인증 자격을 확인받을 수 있다.

AWS CloudHSM

CloudHSM은 웹 서버 인프라의 암호화 작업을 위해 전용의 가상 연산 기기 클러스터를 시작한다. HSM은 Hardware Security Module의 약자로서, 웹 서버의 암호화 키 생성, 정렬, 관리 부담을 덜어주는 것이 주요 목적이다.

0개의 댓글