[새싹 금천 5기] AWS IAM 서비스 (이노그리드_기업맟춤형 클라우드 인재 양성 캠프)
AWS IAM(Identity and Access Management)
https://aws.amazon.com/ko/iam/?nc2=h_ql_prod_se_iam
IAM이란?
AWS 리소스에 누가 접근할 수 있고, 무엇을 할 수있는지를 제어하는 AWS 보안 관리 서비스이다.
사용자(user), 그룹(group), 역할(role), 정책(policy)으로 구성되어 세밀한 권한 관리가 가능하고
조직 내 보안과 운영 효율 성을 높이는 것이 핵심 기능이다.
IAM 보안 모범 사례 ⇒ https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/best-practices.html
루트 사용자 모범 사례 ⇒ https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/root-user-best-practices.html
IAM 보안 모범 사례
- 임시 보안 인증을 사용하여 AWS에 액세스하려면 인간 사용자가 ID 공급자와의 페더레이션을 사용하도록 요구합니다.
- AWS에 액세스하려면 워크로드에 IAM 역할이 있는 임시 자격 증명을 사용하도록 요구합니다.
- 다중 인증(MFA) 필요
- ID, PW 뿐만아니라 OTP, 인증서 등 외부 기기를 통해 추가 인증
- 장기 보안 인증이 필요한 사용 사례에 필요한 경우 액세스 키 업데이트
- 주기적인 업데이트로 유출 방지
- 모범 사례를 따라 루트 사용자 보안 인증을 보호하세요
- 사용자는 root, IAM으로 나뉘어지는데 서비스 운영 용도로는 IAM을 사용하여 서비스 구성한다.
- root는 AWS 가입사용자(이메일, 카드번호로 가입한)
- 최소 권한 적용
- 사용자에게 필요한 만큼만 권한만 부여해서 의도하지 않은 액세스 방지(안전한 서비스)
- AWS 관리형 정책으로 시작하고 최소 권한을 향해 나아갑니다
- 관리형(managed) : 서비스에서 발생할 수 있는 권한을 미리 예상되는 정책으로 정해 놓은것 (버킷 목록 조회 권한, 읽는 권한 등) - 일괄적으로 적용
- inline : 특정 유저에 한에 제한적으로 적용하는 정책
- IAM 액세스 분석기를 사용하여 액세스 활동을 기반으로 최소 권한 정책 생성
- 사용하지 않는 사용자, 역할, 권한, 정책 및 보안 인증은 정기적으로 검토하고 제거합니다.
- IAM 정책의 조건을 사용하여 액세스 추가 제한
- 구체적인 정책을 부여할때 제안하는것
- IAM Access Analyzer를 사용하여 리소스에 대한 퍼블릭 및 크로스 계정 액세스 확인
- IAM Access Analyzer를 사용하여 IAM 정책을 검증하여 안전하고 기능적인 권한을 보장합니다.
- 여러 계정에 권한 가드레일 설정
- 권한 경계를 사용하여 계정 내에서 권한 관리 위임
- 할 수 있는 권한의 최대치 설정
루트 사용자 모범 사례
- 루트 사용자 보안 인증을 보호하여 무단 사용 방지
- 액세스를 보호하려면 강력한 루트 사용자 암호 사용
- 다중 인증(MFA)을 통한 루트 사용자 로그인 보호
- 루트 사용자에 대해 액세스 키를 생성하지 않음
- 액세스 키는 프로그램간 접근에만 사용
- 가능하면 루트 사용자 로그인에 여러 사람 승인 사용
- 루트 사용자 보안 인증에 그룹 이메일 주소 사용
- 계정 복구 메커니즘에 대한 액세스 제한
- AWS Organizations 계정 루트 사용자 자격 증명 보호
- 액세스 및 사용 모니터링
사용자(USER)
- AWS의 기능과 자원을 이용하는 객체
- 사람 또는 애플리케이션이 될 수 있다.
사용자를 식별하는 방법
- 사용자 생성 시 지정한 이름으로 식별
- IAM 사용자를 만들 때 부여하는 고유한 이름
- 콘솔 로그인, CLI/SDK 사용 시 사용자 식별에 사용
- 사용자의 고유 식별자
- AWS가 내부적으로 부여하는 변경 불가능한 고유 ID입니다.
- 사용자 이름이 중복되거나 바뀌더라도 항상 동일한 사용자임을 확인 가능
- ARN(Amazon Resource Name) : 아마존에서 제공하는 모든 서비스의 이름 규칙
- ex) arn:aws:service:region:account-id:resource
- arn : ARN의 시작을 의미
- aws : AWS를 나타내는 고정 값
- service : 리소스를 제공하는 AWS 서비스(예: S3 버킷, Lambda 함수, RDS 데이터베이스 등)
- region : 리소스가 위치한 AWS 지역(region) (선택적)
account-id : AWS 계정 ID
- resource : 서비스별로 리소스를 고유하게 식별하는 정보
사용자의 자격 증명 방법
- AWS Management Conosle 암호로 인증
- https://console.aws.amazon.com\
- 사용자가 웹 브라우저 AWS 콘솔에 로그인 할때 사용하는 인증방식
- Access Key로 인증
- Access Key ID + Secret Access Key 조합으로 AWS API, CLI, SDK 등 프로그램 방식으로 AWS 접근할때 사용
- 콘솔 로그인이 아닌 시스템간 통신이나 자동화 스크립트에 주로 사용
- SSH 키
- AWS에 생성한 EC2 인스턴스의 터미널로 SSH 접속할 때 사용
- 퍼블릭 키는 AWS에 저장, 프라이빗 키를 사용자 로컬PC에 저장하여 접속한다.
- 서버 인증서
- AWS 서비스가 HTTPS로 보안 통신을 제공할때 사용하는 SSL/TLS 인증서
- ACM(AWS Certificate Manager) 또는 IAM을 통해 등록 및 관리
IAM 사용자 추가 방법(Root 계정으로 로그인)
액세스 관리 > 사용자 > 사용자 생성
management 콘솔에 액세스할 수 있는 사용자 생성

직접 정책 연결 →사용자에게 직접 관리형 정책 연결

일단 권한은 부여하지 않고 사용자 생성
.csv 파일을 다운받아 로컬에 저장

다른 브라우저 생성후 test-user 로그인
→ IAM 계정 생성은 ‘크롬’환경에서
→ 로그인은 브라우저 ‘엣지’로
IAM 계정 로그인 성공

권한을 부여받지 않았기때문에 IAM 서비스 이용이 불가하다.

사용자 그룹 (user group)
- 여러 사용자에게 공통으로 권한을 부여하기 위해서 만든 개념
- 여러 사용자에게 일관된 권한 정책을 쉽게 적용하는 것이 가능
- 사용자마다 권한을 따로 설정하지 않아도 되어 관리가 편리
역할(Role)
- 사용자가 아닌 특정 서비스(S3,EC2 등)에서 생성한 객체에 권한을 부여하는데 사용
- 어떤 행위를 하는 객체에게 여러 정책을 적용한다는 점에서는 사용자와 비슷하지만, 객체가 사용자가 아닌 서비스나 다른 AWS 계정의 사용자라는 차이가 있음
권한(permission)
- AWS의 서비스나 자원에 어떤 작업을 할 수 있는지 여부를 명시한 규칙
- AWS 서비스나 자원에 대해 무엇을 할 수 있는지를 정의
- 예: S3 버킷 읽기, EC2 인스턴스 시작 등
정책(policy)
- 자격 증명이나 리소스와 연결될 때 해당 권한을 정의하는 AWS의 객체
- 권한의 모음으로 사용자, 사용자 그룹, 역할에 적용이 가능
- 사용자, 사용자 그룹, 역할에 권한을 직접 적용할 수 없고, 반드시 정책을 생성한 후 적용해야 함
- 권한들을 묶어서 JSON 형식으로 표현한 문서
- 정책이 있어야 AWS 리소스를 사용 가능
정책 유형에는 두가지 유형이 있다.
- 자격 증명 기반 정책
- 리소스 기반 정책
자격 증명 기반 정책
- IAM 사용자, 그룹 또는 역할에 연결되는 정책으로 자격 증명이 수행할 수 있는 작업(권한)을 지정
- 관리형 정책
- AWS에서 만든 또는 사용자가 만든 독립적인 정책 문서
- 여러 사용자, 그룹, 역할에 공유하고 재사용 가능
- 하나의 정책을 수정하면 연결된 모든 자격 증명에 자동 반영
- 인라인 정책
- 단일 사용자, 그룹 또는 역할에 직접 추가하는 정책
- 정책과 자격 증명을 정확히 1:1 관계로 유지하며 자격 증명을 삭제하면 정책이 삭제됨
리소스 기반 정책
- AWS 서비스를 이용해 만든 리소스에 접근하는것에 관련한 정책
- S3 버킷과 같은 리소스에 연결하는 정책으로 지정된 보안 주체에 해당 리소스에 대한 특정 작업을 수행할 수 있는 권한을 부여하고 이러한 권한이 적용되는 조건을 정의
- 리소스 기반 정책은 인라인 정책이며, 관리형 리소스 기반 정책은 없음
- 모든 리소스가 지원하는 것은 아님
권한 경계
- 관리형 정책을 사용해 자격 증명 기반 정책이 IAM 엔티티(사용자 or 역할)에 부여할 수 있는 최대 권한을 설정하기 위한 고급 기능
- 엔티티의 권한 경계 설정을 통해 자격 증명 기반 정책 및 관련 권한 경계 모두에서 허용되는 작업만 수행할 수 있음
- 리소스 기반 정책은 권한 경계에 제한을 받지 않음
관리형 권한 정책을 추가해보자

‘IAMFullAccess’ 권한 정책을 추가하면 edge 브라우저에서 test-user 로 IAM 서비스를 사용할수 있다.

하지만 권한 경계에 EC2FullAccess를 설정하면 edge에서 IAM 서비스는 물론 EC2 서비스도 이용할 권한이 없다.
이유는?
→ 권한 경계는 사용자가 가질 수 있는 "최대 권한의 범위"를 제한하기 때문에, 경계에 없는 서비스는
아무리 권한 정책을 붙여도 사용할 수 없다.
권한 경계는 부여된 권한 중에서도 "이 범위 안에서만 유효하게 만들어라"는 제한 장치인데
부여된 권한이 경계 범위내 없기때문에 제한된다.
- IAM 서비스 ❌: 경계에 없음 → 거부됨
- EC2 서비스 ❌: 경계에는 있지만, 정책에 EC2 권한이 없음 → 역시 거부됨