AWS IAM (Identity and Access Management)
AWS 자원은 안전하게 보호해야 하기 때문에 적절한 접근제어가 필요하다. 접근제어가 너무 엄격할 경우 Admin이나 고객이 접근해야 하는 자원에 접근하지 못하는 문제가 발생할 수 있다. 안전성과 접근성의 균형을 맞추는 일은 생각보다 어려운 일이고 접근제어를 위해 사용자를 등록하거나 접근 권한을 허용 또는 불허하는 시스템을 갖추기 위해서는 많은 노력이 필요하다. 이러한 어려운 부분을 해결하기 위해 AWS는 IAM(Identity and Access Management)을 제공한다. AWS 사용자는 IAM을 통해 자원 관리에 필요한 신분확인 및 권한 부여 업무를 처리할 수 있다. AWS에서 자원에 접근하기 위한 신분은 User 또는 Role로 나타낼 수 있고 그중 Role은 서비스, 다른 유저, 그룹에 할당할 수 있는 임시 신분이라 할 수 있다. AWS에서는 사용자의 ID에 간단하게 정의한 정책을 부착하는 방식으로 특정 리소스와 상호작용을 할 수 있다. 이때 정책은 ID 기반 정책을 사용하거나 자원 기반 정책을 이용해서 사용할 수 있다.
AWS 계정을 최초로 생성하면 Root User라는 권한이 부여된다. Root User는 여러분의 계정 내에서 모든 서비스와 자원에 접근할 수 있는 권한을 지니고 있고 다른 계정이나 권한으로 할 수 없는 작업들에 대해서도 Root User 권한에서는 작업이 가능하다. 그리고 이 통제되지 않는 권한 때문에 Root User의 ID와 패스워드는 해킹 공격의 목표가 되기도 한다. 앞서 말했듯이 Root User는 AWS내에서 모든 접근과 작업이 가능하기 때문에 이를 해킹 당하거나 유출되면 사용자가 사용하는 AWS내에서 어떤 일이든 강제로 수행될 수 있다. 그만큼 Root User는 엄격하게 관리되어야 하고 특정 필요한 경우에만 사용하길 권장한다. Root User가 필요한 특수한 경우를 제외하고는 일반적인 서비스나 작업을 할 때는 사용자 계정을 생성하여 제어하는 것이 좋다. 그래서 AWS 계정 생성 시 자동으로 활성화되는 IAM Root User는 바로 봉인하고, 일상적인 업무에는 사용하지 않는 것이 좋다. 루트 계정을 안전하게 봉인한 후 여러분의 작업에 필요한 권한만 허용한 새로운 유저 계정을 추가해서 사용하도록 한다. 그리고 모든 유저 계정은 강력한 패스워드를 유지하고 MFA(Multi-Factor Authentication)를 이용해 보호하고, 각종 보안인증 및 리소스 접근에 필요한 액세스 키를 암호화한다.
AWS 자원과 관련된 허용 또는 불가에 관한 내용을 정의한 문서를 IAM 정책이라고 한다. IAM 정책에는 효과라는 속성으로 허용 또는 불가를 정의하며 각각 Allow, Deny라는 속성 값을 사용한다. IAM 정책에 의해 정의된 내용대로 특정 사용자는 해당 자원에 접근하여 원하는 작업을 할 수 있다. 예시로 S3라는 자원에 버킷 생성하는 액션을 허용하는 효과를 추가할 수 있다. 여기서 액션이란 IAM 정책 문서에 정의된 내용으로 사용자의 목적에 부합하는 서비스를 IAM 정책 문서에서 찾아 활용할 수 있다. 그리고 더 나아가 Dashboard 정책 생성 페이지에서 정책을 생성하거나 JSON 포맷 테스트로 직접 정책을 정의할 수 있다. 이때 정책 문서에 의해 명시적으로 정의되지 않은 모든 동작은 불허된다. 기본적으로 모든 동작이 불허되는데 기본적으로 접근 제약이 없는 자원에서 하지 말아야 할 단 하나의 액션을 정의할 때 Deny를 사용하면 유용하다. IAM을 이용해 소스에 정책을 연계하면 해당 신분은 정책의 권한 및 제약 조건에 영향을 받게 된다. 하나의 IAM 정책을 다수의 신분에 연계할 수 있고 하나의 신분에는 최대 10개의 정책을 연계할 수 있다 하나의 신분에 연결된 두 개의 정책이 서로 상반된 내용을 담고 있다면 AWS는 불허 기준을 따르도록 하는 특징이 있다. 그리고 특정 자원의 액션에 대해 명시적인 불허가 정의되어 있다면 다른 곳에서 허용을 했더라도 결과적으로 불허가 적용되는 AWS 정책의 특징이 존재한다.
AWS에서 사용자가 많아지면 일일이 IAM 접근 권한을 제어하는 것은 많은 작업량과 공수를 필요로 한다. 그래서 IAM은 사용자 개인이 아닌 IAM 그룹 별로 접근권한을 제어할 수 있는 기능을 제공한다. 예를 들어 IAM 그룹을 관리자, 개발자, 디자이너 형태로 나누고 3개의 그룹에만 적합한 권한을 부여하는 것이다. IAM 그룹을 사용하면 그룹별로 권한을 사용하다가 수정이 필요하면 개인별이 아닌 해당 그룹의 권한만 변경해주면 된다. 사용자가 많을수록 유용한 기능이니 AWS 사용 시 필수적인 기능이라고도 볼 수 있다. IAM Role은 유저나 서비스가 자원에 대한 접근 요청을 할 때 이용할 수 있는 임시 신분이라 할 수 있다. Role을 이용해 서비스와 관련된 다양한 논리 문제를 해결할 수 있다. 예시로 사용자가 ECS(Elastic Container Service) 서비스를 통해 다른 자원과 연계된 AWS 서비스를 시작하는 경우 ECS를 사용하려면 ECR(Elastic Container Registry에 대한 접근 권한을 갖고 있어야 한다. ECR이란 컨테이너 이미지를 가져올 수 있는 권한을 뜻한다. AWS는 이 작업에 맞는 AmazonECSTaskExecutionRolePolicy라는 관리형 롤이 미리 정의돼 있는데 이를 활용하면 된다.
'AWS 공부' 카테고리의 다른 글
Amazon CloudFront (0) | 2022.06.05 |
---|---|
AWS DNS Route53 (0) | 2022.06.03 |
AWS 데이터베이스_3 (0) | 2022.06.01 |
AWS 데이터베이스_2 (0) | 2022.05.31 |
AWS 데이터베이스 (0) | 2022.05.30 |
댓글