사용자 인증과 권한 통제는 온프레미스 환경과 더불어 클라우드 환경에서도 가장 중요한 보안 요소이다
이 때문에 AWS는 더욱 안전하게 사용할 수 있도록 AWS IAM 기능을 제공한다
AWS IAM을 살펴보기 전에 먼저 AWS IAM 위에서 AWS 리소스가 어떻게 생성되고 관리되는지 알아보자!
AWS 리소스 생성하고 관리하기
AWS 리소스를 다루는 방법을 살펴보자!
AWS 관리 콘솔
AWS 관리 콘솔에서는 AWS 리소스를 생성하고 관리하는 데 사용할 수 있는 '웹' 기반 사용자 인터페이스를 제공한다
=> 직관적이기 때문에 AWS 입문 단계에서 사용하기에 굉장히 편리
(앞선 실습들은 AWS 관리 콘솔초럼 웹 기반 GUI 방식으로 진행했음)
AWS 명령줄 인터페이스
AWS 명령줄 인터페이스(AWS CLI)는 AWS 서비스를 관리하는 통합 도구이다
운영 체제(윈도우, macOS, 리눅스)에 설치하면 "셸" 프로그램에서 AWS 서비스를 사용할 수 있다
=> 명령줄 인터페이스나 프로그래밍에서도 AWS 리소스를 다룰 수 있다는 점을 알고있자!
AWS 소프트웨어 개발 키트
특정 소프트웨어를 개발할 때 도움을 주는 개발 도구 집합을 소프트웨어 개발 키트(SDK) 라고 한다!
AWS SDK는 AWS 리소스를 프로그래밍적으로 사용하기 편리하도록 제공되는 라이브러리들을 의미한다
=> 예를 들어 AWS 리소스를 사용하는데 인증 동작이 필요할 때는 직접 프로그래밍해서 구현해야 하지만, AWS SDK를 이용하면 최소한의 노력만으로도 동작을 구현할 수 있다
(AWS SDK는 파이썬, Go, 루비, 자바 등 주요 프로그래밍 언어별로 다양한 라이브러리를 제공함)
AWS API란
앞서 설명한 AWS 리소스를 다루는 방법들은 AWS API에서 요청을 받아온다
그렇다면 AWS API란 무엇일까?
API란
API(Application Programming Interfaces)는 두 애플리케이션이 상호 작용할 수 있게 도와주는 매개체이다
즉, API를 이용하여 두 애플리케이션이 서로 통신하면서 정보를 주고받을 수 있는 것이다!
API를 사용할 때는 두 가지 규칙을 따라야 한다
1. 외부에 공개된 API 서버가 아닐 때는 인증된 사용자만 접속할 수 있게 해야 한다
=> 인증된 사용자인지 확인하는 '인증'과 데이터를 내려받아도 된다고 허가하는 '인가'가 필요하다
2. 요청할 때 규칙을 정리한 문서인 '명세서'가 필요하다
=> 최대 글자 수 제한은 몇 글자까지인지, 전달하려는 데이터 유형은 무엇인지 등 정해진 규칙이 요청서에 담겨 있어야 함
예를 들어 공공 데이터 포털 사이트에는 공공 데이터를 제공할 수 있는 API 서버가 구성되어 있다
=> 사용자가 누구든 포털 사이트의 API 서버에 데이터를 요청하면 정보를 얻을 수 있다
사용자가 특정 데이터를 조회하면 공공 데이터 포털 API 서버에 API 요청이 전달되고 API 서버는 사용자에 대한 인증과 인가를 확인한 후 인증된 사용자라고 판단하면 명세서 규칙을 확인하여 요청한 데이터의 결과 값을 사용자에게 보여 준다!
인증(authentication) : 사용자가 적법한 서명 값을 가졌는지 확인한다
인가 (authorization) : 인증이 확인된 사용자가 API 권한을 수행할 수 있는지 확인한다
AWS 클라우드에서 인프라, 보안, 데이터베이스, 분석, 배포 및 모니터링 등 모든 IT 리소스는 AWS API 호출로 제어할 수 있다
AWS API란
AWS API는 사용자나 애플리케이션이 AWS 서비스를 사용하기 위해 도와주는 매개체이다
예를 들어 사용자가 Amazon S3 서비스를 사용하려고 한다면 사용자는 요청 정보를 AWS API에 보낸다
이때 AWS API는 사용자 인증을 확인한 후 요청이 적합하다고 판단되면 Amazon S3 서비스에 전달하여 서비스를 처리하게 한다
예를 들어 AWS 명령줄 인터페이스를 이용하여 Amazon S3 버킷을 생성한다고 가정해보면
AWS 명령줄 인터페이스에서 버킷을 생성하는 명령어를 작성하면 AWS 리소스를 사용할 수 있게 AWS API를 호출한다
=> AWS API를 사용할 수 있도록 '인증, 인가'를 확인한 후 요청했던 대로 S3 버킷을 생성한다
인증과 인가를 확인한 후에는 AWS CloudTrail 서비스를 이용하여 'API 로깅"을 남긴다
여기에서 API 로깅이란 AWS API의 활동 기록을 저장하는 것으로, 보안 사고나 장애가 발생하면 더욱 빠르게 대응할 수 있다
=> AWS 모든 서비스는 AWS API로 상호 작용하기 때문에 API 로깅을 기록하는 것은 매우 중요하다
AWS CloudTrail은 AWS 계정의 거버넌스, 규정 준수, 운영 감사, 위험 감사를 지원하는 서비스이다
CloudTrail을 사용하면 AWS 인프라에서 계정 활동과 관련된 작업을 기록하고 지속적으로 모니터링하여 보관 할 수 있다
AWS IAM
앞서 알아본 인증과 인가는 AWS IAM으로 동작한다
이번에는 AWS IAM 동작을 알아보고 AWS IAM 구성 요소와 관련 용어를 살펴보고, IAM 정책과 역할을 공부해보자!
AWS IAM이란
AWS IAM(Identitiy & Access Management)은 AWS 서비스와 리소스에 안전하게 접근할 수 있도록 관리하는 기능이다
=> IAM을 이용하여 리소스를 사용하도록 '인증'과 '권한'을 통제한다
AWS 사용자 및 그룹을 만들고 관리하거나 권한을 이용하여 AWS 리소스 접근을 허용, 거부할 수 있다
AWS IAM은 대부분의 AWS 서비스와 연결되어 활용할 수 있으며, 추가 비용 없이 사용할 수 있다
AWS IAM 구성 요소와 동작 방식
구성 요소
AWS IAM은 사용자, 그룹, 역할, 정책으로 구성된다
자세히 살펴보면
AWS 계정 루트 사용자 : 맨 처음 생성된 AWS 계정이며, 해당 계정의 모든 권한을 가지고 있다
IAM 사용자 : 별도의 AWS 계정이 아닌 계정 내 사용자이며, 각 IAM 사용자는 자체 자격 증명을 보유한다
=> 즉, IAM 사용자마다 특정 AWS 작업을 수행할 수 있게 권한을 통제할 수 있다
IAM 그룹 : IAM 사용자 집합을 의미한다
=> IAM 그룹에 권한을 지정해서 다수의 IAM 사용자의 권한을 쉽게 관리할 수 있음
IAM 정책 : 자격 증명이나 리소스와 연결될 때 요청을 허용, 거부 할 수 있는 권한을 정의하는 AWS 객체이다
IAM 역할 : 특정 권한을 가진 계정에 생성할 수 있는 IAM 자격 증명이다
=> 역할에는 그와 연관된 암호 또는 접근 키 같은 장기 자격 증명이 없고 역할을 주면 역할 세션을 위한 임시 보안 자격 증명을 제공한다
(역할을 이용하여 일반적으로 AWS 리소스에 접근할 수 없는 사용자, 애플리케이션, 서비스에 접근 권한을 위임할 수 있음)
보안 주체 : AWS 계정 루트 사용자, IAM 사용자, IAM 역할을 이용하여 로그인하고 AWS에 요청하는 사람 또는 애플리케이션 이다
인증, 인가 동작 방식
IAM 사용자가 AWS 리소스를 사용할 때는 암호나 접근 키 같은 자격 증명을 사용하여 인증받아야 한다!
=> IAM 사용자 계정에 따른 암호나 접근 키가 올바르다면 적합한 사용자로 간주되어 인증 동작이 마무리 됨
그다음 인증이 처리되면 IAM 사용자는 적합한 권한이 있는지 확인하는 인가 동작을 진행한다
(ex. EC2 FullAccess 권한을 가진 사용자가 있다면 EC2는 사용이 가능하지만 S3는 사용할 수 없음)
📌 IAM 사용자 이외에 IAM 그룹에 정책을 부여해서 그룹별로 좀 더 편리하게 관리할 수 있다
AWS IAM 사용자
IAM 사용자는 일반적으로 '루트 사용자'와 '일반 IAM 사용자'로 나뉜다
루트 사용자는 AWS의 모든 리소스에 접근할 수 있는 전체 권한이 있어 AWS 계정 생성 및 해지와 IAM 사용자 관리 등에 사용하지만, 직접 AWS 리소스를 사용하도록 권장하지는 않음
=> 루트 사용자 계정을 다수가 사용하면 어떤 사용자가 어떤 행위를 했는지구별할 수 없고, 루트 사용자 계정이 해킹되면 공격자가 AWS 계정에 대한 모든 권한을 가지게 되므로!
AWS IAM 정책
사용자를 인가하고 나면, 사용자별로 권한에 대한 확인 절차를 진행한다
사용자별 권한 검사는 AWS IAM 정책을 이용해서 진행한다
=> 사용자에 연결된 IAM 정책으로 사용자별 AWS 서비스와 리소스에 대한 인가(권한)을 얻을 수 있다
사용자가 특정 AWS 서비스를 사용하려고 인가를 요청하면, IAM은 IAM 정책을 기반으로 AWS 요청을 검사, 평가한 후 최종적으로 허용, 차단을 결정
{
"Version" : "2012-10-17"
"Statement" : [
{
"Effect" : "Allow or Deny",
"principal" : "principal",
"Action" : ["action"],
"Resource" : ["*"],
"Condition" : {"key":"value"}
}
]
}
Effect : 명시적 정책에 대한 허용 혹은 차단
principal : 접근을 허용 혹은 차단하고자 하는 대상
Action: 허용 혹은 차단하고자 하는 접근 타입
Resource : 요청의 목적지가 되는 서비스
Condition : 명시적 조건이 유효하다고 판단될 수 있는 조건
AWS IAM 역할
IAM 역할이란 정의된 권한 범위 내 AWS API를 사용할 수 있는 임시 자격 증명을 의미한다
코드에 하드 코딩하지 않고 실행할 때 임시(+Token, 일정 시간 이후 만료됨) 자격 증명을 사용하는데, 이를
"Assume"이라고 한다
=> IAM 역할을 사용하면 사용자 권한을 공유하거나 매번 권한을 부여할 필요 X
EC2 Instance Profile, Federations(Cross-Account, SAML2.0, Web Identify Provider)들은 IAM 역할을 활용한 예
개발자가 S3 버킷에 대한 접근 권한이 필요한 EC2 인스턴스에서 애플리케이션을 실행한다고 생각해보자!
관리자는 S3 Full 권한이 연결된 'IAM 역할'을 생성해서 EC2 인스턴스에 연결한다(EC2 Instance Profile)
EC2상의 애플리케이션은 IAM 역할의 임시 자격 증명을 사용하여 S3 버킷에 접근할 수 있다
=> 관리자가 개발자에게 별도의 권한을 부여하지 않아도 애플리케이션이 S3 버킷에 접근할 수 있고, 개발자는 이를 위해 추가적인 자격 증명을 공유하거나 관리할 필요가 전혀 없음
'Infra > AWS 교과서' 카테고리의 다른 글
[AWS 교과서] 10장, 11장 - 워드프레스 (5) | 2024.01.22 |
---|---|
[AWS 교과서] 9장 - AWS 오토 스케일링 서비스 (2) | 2024.01.21 |
[AWS 교과서] 7장 - AWS 고급 네트워킹 서비스(2) (0) | 2024.01.18 |
[AWS 교과서] 7장 - AWS 고급 네트워킹 서비스(1) (0) | 2024.01.18 |
[AWS 교과서] 6장 - AWS 데이터베이스 서비스(2) (0) | 2024.01.16 |