🧑🏻💻 IAM
IAM은 Identity and Access Management의 약자로,
사용자를 생성하고 그룹에 할당할 수 있는 글로벌 서비스다.
루트 계정은 기본으로 생성되며, 루트 계정을 손대거나 공유하는 대신, 사용자를 생성해야 한다.
사용자는 조직내의 사람을 의미하며, 그룹으로 만들 수 있다.
그룹에는 사용자만 속할 수 있고, 다른 그룹은 속할 수 없다.
또한, 유저들은 꼭 그룹에 포함될 필요가 없으며, 여러 그룹에 속할 수도 있다.
✍🏻 권한부여
사용자나 그룹은 정책이라고 불리는 JSON 문서를 받을 수 있으며, 정책은 사용자들의 권한을 정의한다.
AWS에서는 최소한의 특권 원칙을 적용하는데, 이는 사용자의 필요 이상의 권한은 주지 않는다는 원칙이다.
IAM에서는 Region 선택이 불가능한데, 이는 IAM이 글로벌 서비스이기 때문이다.
IAM에서 Users 메뉴를 통해 사용자를 추가할 수 있다.
유저 세부사항 설정 -> 권한 설정 -> 태그 설정을 통해 유저를 생성하고,
Account Alias를 설정해서 고유한 로그인 URL을 만들면 해당 유저로 로그인이 가능하다.
📜 정책
그룹 단위로 정책이 설정되어 있다면, 그룹에 속한 모든 사용자들은 해당 정책을 상속받게 된다.
[IAM 정책 JSON 파일의 구조]
- Version : 정책 언어 버전
- Id : 정책 식별용 ID
- Statements
권한을 그룹을 이용한 정책 상속을 통해 주지 않고, 사용자에게 직접 줄 수도 있다.
🔐 IAM의 사용자 & 그룹 방어기제
- 암호 정책 : 최소 암호 길이 설정하기, 특정 문자 유형 요구하기, 모든 IAM 사용자가 자신의 암호를 바꾸게 하거나, 일정 시간이 지난 후 암호가 만료되어 바꾸도록 요구하기, 암호 재사용 금지하기.
- MFA(Multi Factor Authentication) : 비밀번호와 함께 사용하여 계정을 보호하는 방법으로, 추가적인 보안 장치의 조합을 사용하는 것이다. (2차 인증과 같은 것) MFA를 사용하게 되면 비밀번호를 분실하거나 해킹당했더라도 물리적인 인증 장치가 남아있으므로 계정의 보안이 유지된다.
[중요 포인트]
AWS의 MFA 장치 옵션
- 가상 MFA 장치 : Google Authenticator이나 Authy를 사용하는 방법
- Universal 2nd Factor(U2F) 보안 키 : YubiKey와 같은 물리적인 장치를 사용하는 방법
- Hardware Key Fob 장치 : Gemalto와 같은 물리적인 Key Fob 장치를 사용하는 방법
- AWS GovCloud의 Hardware Key Fob 장치 : AWS GovCloud에서 제공하는 Key Fob을 사용하는 방법
🚧 AWS 액세스
[AWS에 액세스하기 위한 방법]
- AWS Management Console (비밀번호 + MFA)
- AWS CLI (액세스 키로 보호됨)
- AWS SDK (액세스 키로 보호됨)
액세스 키는 AWS 콘솔을 통해 생성되며, 사용자들은 자신의 액세스 키에 대한 책임을 가지게 된다.
액세스 키는 비밀번호와 같기 때문에 절대로 공유해선 안된다.
AWS CLI란, 터미널에서 명령을 통해 AWS 서비스와 상호작용할 수 있는 도구이다.
AWS CLI를 사용하면 AWS 서비스의 공용 API에 직접 액세스가 가능하며,
리소스를 관리하기 위한 스크립트를 개발하고 일부 작업을 자동화할 수 있다.
AWS SDK란, AWS 소프트웨어 개발 키트를 의미하며, 라이브러리 세트이다.
AWS 서비스와 API에 프로그래밍 관점으로 접근해 관리할 수 있으며,
터미널에서 사용하는 것이 아니라 코딩해야할 앱 안에 삽입하여 사용하고, 다양한 프로그래밍 언어를 지원한다.
💻 AWS Cloud Shell
AWS 클라우드 셸은 AWS 클라우드에 있는 터미널로 AWS 홈페이지 내에서 사용할 수 있으며,
만약 접근이 불가능하다면 Region을 체크해 볼 필요가 있다.
AWS 클라우드 셸의 장점은 CLI 사용시마다 API 호출을 반환해준다는 것이다.
또한, pull repository가 가능하고, 클라우드 셸에 대한 설정도 할 수 있으며, 파일 업로드/다운로드가 가능하다.
🙋🏻 IAM Roles
몇몇 AWS 서비스들은 권한이 필요하며, 그렇기 때문에 IAM Role이라는 것을 생성해야 한다.
IAM Role은 실제 사용자가 아닌, AWS 서비스에 권한을 부여하는 것이다.
[몇가지 Common roles]
- EC2 Instance Roles
- Lambda Function Roles
- Roles for CloudFormation
🛠️ IAM Security Tools
- IAM Credentials Report : 계정 레벨의 리포트로, 모든 계정 사용자와 그들의 자격 증명 상태를 보여준다.
- IAM Access Advisior : 사용자 수준에서 사용자에게 보장된 서비스 권한과, 서비스가 언제 액세스 되었는지를 보여준다. 이 도구를 통해 어떤 권한이 사용되지 않았는지를 알 수 있고, 최소 특권의 원칙으로 사용자가 얻어야 할 권한을 줄여준다.
📜 IAM Guidelines
- AWS 계정 설정시 외에는 루트 계정을 사용하지 말 것.
- AWS 사용자 한 명은 한 명의 물리적 사용자와 같다.
- 사용자를 그룹에 할당할 수 있고, 그룹에 권한을 할당할 수 있다.
- 강력한 비밀번호 정책을 만들것.
- MFA를 사용하여 계정 보안을 강화할 것.
- AWS 서비스에 권한을 줄 때마다 역할을 생성하고 사용할 것.
- CLI나 SDK를 사용할 경우 액세스 키를 사용할 것.
- IAM Credentials Report와 IAM Access Advisor를 사용하여 계정 권한을 감사할 것.
- 절대로 IAM 사용자와 액세스 키를 공유하지 말 것.
🔑 IAM 책임 분배 모델
[AWS]
- 모든 인프라의 보안
- 서비스 구성 및 취약점 분석
- 규정 준수
[사용자]
- 사용자, 그룹, 역할, 정책 관리 및 모니터링
- 모든 계정에 대한 MFA 활성화
- 모든 액세스 키를 수시로 바꾸기
- 적절한 권한 적용을 위한 IAM 도구 사용
- 액세스 패턴 분석 및 권한 검토