모노산달로스의 행보

[AWS] IAM(Identify and Access Management)의 대하여 본문

Infrastructure/AWS

[AWS] IAM(Identify and Access Management)의 대하여

모노산달로스 2024. 10. 11. 19:49

aws - IAM

 

AWS(Amazon Web Services)

 

AWS(Amazon Web Services)는 아마존이 제공하는 클라우드 컴퓨팅 서비스로, 서버, 스토리지, 네트워크 등을 클라우드를 통해 이용할 수 있습니다. 높은 안정성과 확장성을 갖춘 AWS는 클라우드 분야에서 높은 점유율을 차지하고 있습니다. 스파게티처럼 많은 기술이 존재하여 올바른 사용을 위해서는 꼭 학습이 필요합니다. 반대로 배워두면 많은 클라우드 기술을 사용할 수 있게 됩니다.

 


 

IAM에 대한 요약
사용자 및 권한을 안전하게 관리하는 서비스
Users : 실제 유저와 대응되어 생성한다. 각 유저가 고유의 비밀번호를 가진다.
Groups : 각 사용자들은 그룹으로 묶을 수가 있다.
Policies : 유저 혹은 그룹별로 권한을 부여한다. JSON 형태로 작성 가능하다.
Roles : EC2 instances 혹은 AWS services를 식별하기 위해 사용한다.
Security : MFA + Password Policy를 통해 보안성을 높일 수 있다.
AWS CLI : command-line으로 aws services 접근한다.
AWS SDK : programming language로 aws services 접근한다.
Access Keys : CLI 혹은 SDK에서 AWS를 사용하기 위해 필요하다.
Audit : IAM Credential Reports & IAM Access Advisor 등의 관리 도구를 사용할 수 있다.

 

 

IAM(Identify and Access Management)

What is IAM(Identify and Access Management)

 

IAM(Identify and Access Management)가 대체 무엇일까요? 한 마디로 정의하자면 AWS에 접근하는 사용자들과 각종 권한을 관리하는 서비스입니다.

 

AWS의 서비스들은 Console에서 설정한 지역에 따라 모두 달라집니다. 하지만 IAM은 한 지역에 종속되지 않고 Global 하게 동작합니다. 본격적으로 IAM의 각종 서비스를 설명하기 앞서 알고 가야 하는 개념이 있습니다. 바로 Root accountUser입니다.

 

Root account와 User에 대한 설명을 표현한 그림

 

 

Root account는 사용자가 생성한 AWS 계정 자체를 의미합니다. 모든 서비스에 접근 권한을 가지고 있다는 특징이 있습니다. 보안상의 이유로 Root account를 통해 작업을 수행하지는 않습니다.

 

User는 권한을 부여받을 사용자를 의미합니다. 실제 사용자들과 1대 1로 대응되는 개념이라고 생각할 수 있습니다. 마치 새로운 계정을 생성하는 것처럼 이름과 비밀번호가 존재합니다. Root account가 아닌 다른 유저들은 해당 계정을 통해서 콘솔에 접속이 가능합니다.

 

Group은 user들이 속해있는 조직을 의미합니다. 예를 들어 위 그림에서 Danny, Park, Jun은 Operator라는 Group에 속해있습니다. 즉 실제로 그들이 속한 팀에 맞게 Group을 생성하고 권한을 부여할 수 있다는 의미입니다. Jun, Mark처럼 두 가지 그룹에 속할 수도 있고 Lisa처럼 아무런 그룹에 속하지 않을 수도 있습니다.

 

 

Root account 혹은 IAM user로 접속이 가능합니다

 

 


 

 

Permissions

특정 User 혹은 Group은 권한을 부여 받습니다


앞서 설명한 User 혹은 Group들은 Policies를 할당할 수 있습니다. 말 그대로 사용자들에게 허가 할 작업들을 정의하는 것입니다. 예를 들어 IAM User를 읽어오는 권한을 부여하면 해당 Group은 IAM에 어떤 계정이 존재하는지 확인할 수 있습니다.

 

한 가지 유의 할 점으로 권한 부여시 최소권한원칙(Principle of Least Privilege)을 준수해야합니다. 불필요한 권한을 부여하지 않고 꼭 필요한 만큼의 권한을 부여해야 한다는 의미입니다. 

 

JSON Document로 구성한 S3 Policies

 

Policies는 Console에서 GUI를 통하여 부여할 수도 있지만 위와 같이 JSON으로 구성을 할 수도 있습니다. (방법의 차이일 뿐 결과는 같습니다) 각 요소의 설명은 아래와 같습니다.

Version : Policy의 언어 버전을 의미합니다.
Id : Policies를 구별하기 위한 식별자입니다.
Statement : Policy는 하나 혹은 여러개의 Statement을 가집니다.
- Sid : Statement를 구별하기 위한 식별자입니다.
- Effect : 특정 API에 접근 허용 여부를 결정합니다. (Allow or Deny)
- Principle : Policy을 적용할 사용자/계정/역할을 의미합니다.
- Action : Policy가 허용하거나 거부하는 API 리스트를 의미합니다.
- Resource : Action에서 사용 할 리소스 리스트를 의미합니다.

 

 


 

 

Roles

AWS service에 Role을 부여할 수 있습니다

 

EC2, S3, ECS 등등 수 많은 AWS services가 존재합니다. 이러한 service들은 사용자를 대신하여 자신이 맡은 역할을 수행합니다. 이를 위해서 AWS의 정보에 접근 할 필요가 있습니다. 따라서 우리는 AWS services에 권한을 할당해야 합니다.

 

그 권한을 부여하는 방식이 바로 Roles을 부여하는 것입니다. 위 그림처럼 EC2에 Roles을 부여하여 작업을 위한 권한을 지정해 줄 수 있습니다. 그렇게 되면 둘은 마치 하나의 객체가 되어 AWS 자원에 접근이 가능하게 됩니다.

 

 


 

AWS는 Infrastrucrue 혹은 각종 구성과 Compliance validation과 같은 역할을 맡습니다. 반대로 IAM 각종 권한과 역할을 관리하는 것은 사용자입니다. 즉, 인프라를 제공하는것은 AWS이지만 이를 책임지고 이용하는 것은 사용자의 몫입니다.

 

IAM 에 대한 학습이 끝나고 이해한 내용을 작성한 글 입니다. 복잡한 AWS의 시작 관문과도 같은 부분이 바로 IAM이라고 생각합니다. 각종 권한 부여는 곧 보안과 관련된 부분이므로 잘 학습 한뒤 실무에 적용 할 필요가 있다는 생각이 들었습니다.

 

 

+ IAM Guidelines

AWS account setup을 제외한 경우 root 계정을 사용하지 말 것
One Physical user는 One AWS user로 대응 할 것
유저를 그룹에 할당하고 그룹에 권한을 부여 할 것
강한 비밀번호와 MFA를 통해 보안성을 높일 것
AWS services에 Roles을 부여할 것
Access Keys를 사용하여 CLI 사용할 것
권한 감시를 위해 보고서를 잘 이용 할 것(Credentials Report, Access Advisor)