IAM : User & Group
IAM?
- Identity and Access Management, Global Service
Root Account
- 기본적으로 계정을 생성할 때 생성되는 계정
- 만든 후에는 사용도, 공유도 해서는 안된다.
- 사용자를 생성할 때만 사용해야 한다
User
- 하나의 사용자는 조직 내의 한 사람에 해당 됩니다.
- 필요하다면, 사용자를 그룹에 묶을 수도 있습니다.
Group
- 오직 User만 포함 시킬 수 있습니다, Group을 포함 시킬 수는 없습니다.
- Group에 포함 되어 있지 않는 User도 있습니다.
IAM : Permissions
- 왜 User와 Group으로 나눌까?
- 이유인 즉, AWS 계정을 사용하면서 ==권한==을 주기 위함이다.
- User & Group
- JSON 형태로 해당 User, Goup을 구성할 수 있다.
- 이를 정책 & IAM 정책 이라고 불린다.
- 어떤 작업에 권한을 가지고 있는지 JSON의 형태로 설명해 놓은 것 입니다.
- 해당 JSON은 EC2, ElasticLoadBalancing, CloudWatch의 describe가 허용된 상태 입니다.
- 이 정책을 사용해 사용자들의 권한을 정의 할 수 있게 됩니다.
- 새로운 사용자가 너무 많은 실행을 하여, 큰 비용이 발생할 수 도 있고, 보안적 이슈가 발생할 수도 있기에, 따라서 AWS에서는 최소 권한의 원칙을 적용합니다.
- 사용자가 꼭 필요로 하는 것 이상의 권한을 주지 않는 것이 원칙입니다.
- AWS IAM 설정에서 Tag 값은 Department -> 부서명을 쓸 수도 있고, Identity를 할 수 있는 모든 Name을 사용해도 된다.
User로 로그인 하는 방법
- IAM 대시보드 홈에 왼쪽 상단에는 계정에 대한 압축된 정보가 있습니다.
- 해당 계정ID는 복잡한 숫자로 구성되어있다.
- 이러한 복잡한 숫자는 구별하기 어렵기 때문에, 아래와 같이 계정 별칭을 지정해서 문자로
- 위의 별칭은 고유하기 때문에 다른 User가 사용할 수 없습니다.
IAM Policies inheritance
- 위와 같은 구조로 IAM Policy를 구성하게 된다면,
- Alice, Bob, Charles는 Developers에 대한 Policy를 상속 받습니다.
- David, Edward는 Operations에 대한 다른 Policy를 상속 받습니다.
- Fred 처럼 아무 Group에 속하지 않을 수도 있습니다.
- 만약 감사 팀에 Charles, David가 속한다면, Audit Team의 Policy를 추가적으로 상속 받게 됩니다.
IAM Policies Structure
- 위의 구조는 IAM Policy의 JSON 파일 구조입니다.Version
- 정책 언어의 버전을 설정합니다 보통은 "2012-10-17" 입니다.
Id
- 정책을 식별하는 ID이다.
- 해당 사항은 선택사항이다.
Statement
- 문장의 구성 요소이다.
- 해당 사항은 필수 사항이다.
Sid
- Sid는 문장 ID로 문장의 식별자 역할을 한다.
- 해당 사항은 선택사항이다.
effect
- 문장의 특정 API 접근 하는 것을 허용 할지에 대한 내용입니다.
- 오른쪽에 Allow, Deny가 뜰 수 도 있다.
principal
- 계정, 유저, role등 해당 정책이 적용되는 것을 적는 란 이다.
- 해당 예시에서는 AWS 계정의 루트 계정에 적용이 된 것입니다.
Action
- effect를 기반해 허용 및 거부되는 API 호출의 모음입니다.
Resource
- 적용될 action의 리소스의 목옥으로 해당 예시에서는 bucket으로 되었지만, 다른 것들이 될 수 있습니다.
Conditions
- Statement가 언제 적용 될 지를 결정하는 Condition이 있습니다.
- 해당 사항은 옵션입니다.
IAM Password Policy
- 그룹과 사용자들의 정보가 침해당하지 않으려면, 두 가지의 방어 메커니즘이 존재한다.
Password Policy
첫번째 방법은 비밀번호 정책의 정의 입니다.
- 비밀번호가 강력할 수록 계정의 보안이 철저해지기 때문입니다.
- AWS에서는 다양한 옵션을 이용해 비밀번호 정책의 생성이 가능합니다.
비밀번호 정책
-
- 특정 문자 요구
- 대문자 필수
- 소문자 필수
- 숫자 필수
- 특수 문자 필수
- IAM User의 비밀번호 교체 유무
- 특정 기간이 지나면, 비밀 번호 만료 후 새 비밀번호 요구
- 사용자가 비밀번호 변경 시 이전 사용 비밀번호를 막는다.
- 특정 문자 요구
MFA
Multi Factor Authentication
- AWS에서는 거의 필수적으로 사용하라고 권고되고 있다.
- AWS User들은 많은 것들을 할 수 있습니다.
- 특히 관리자의 경우에는 리소스 삭제, 추가 등등을 할 수 있습니다.
- 그렇기 때문에 관리자 계정의 경우에는 반드시 보호의 대상이며, 전체 IAM 사용자들도 예외는 아닙니다.
MFA?
비밀번호와 본인 소유의 보안 장치를 같이 사용하는 인증 방식을 말합니다.
비밀번호만 사용하는 것보다는 훨씬 안전합니다.
- 해당 로그인 방식은, 만약 비밀번호가 누출된 상태에서도 로그인을 위해서는 휴대폰과 같이 Alice의 물리적인 장치가 추가적으로 필요하기 계정이 침해 받지 않습니다.
MFA devices options in AWS
Virtual MFA device
- Google Authenticator
- 오직 하나의 디바이스에서만 가능합니다.
- Authy
- 여러개의 디바이스에서 가능합니다.
Universal 2nd Factor(U2F) Security Key
- Yubico 사의 YubiKey가 있습니다.
- Yubico는 AWS 제공 장치가 아닌 3rd party 제품을 제공합니다.
- 하나의 보안 키에서 여러 루트 계정과 IAM 사용자 지원합니다
Hardware Key Fob MFA Device
- Gemalto의 제품입니다.
Hardware Key Fod MFA Device for AWS GovCloud(US)
- 만약 미국 정부의 클라우드인 AWS GovCloud를 사용한다면
- 위 처럼 보이는 특수 키 팝이 필요합니다.
How can users access AWS
AWS 접근하기 위한 3가지 방안
- AWS Manangment Console( 비밀번호와 MFA 인증을 통한 로그인 )
- AWS Command Line Interface(CLI)(access key를 통해서 인증)
- AWS Software Developer Kit(SDK)(access key를 통해서 인증)
- AWS AccessKey는 AWS Console에서 생성합니다.
- 사용자는 access key를 본인들이 관리하게 됩니다.
- Accesskey는 패스워드처럼 비밀 키이므로, 공유하면 절대 안된다.
Example Make Access Key
What's the AWS CLI
- AWS CLI는 CLI 명령어를 이용해서 AWS 서비스들과 상호작용할 수 있게 해주는 것을 의미한다.
- CLI를 사용하면 AWS 서비스의 공용 API로 직접 액세스가 가능합니다.
What's the AWS SDK?
- AWS Software Development Kit(AWS)
- 특정 언어로 된 라이브러리의 집합입니다.
- 따라서 프로그래밍 언어에 따라 개별 SDK가 존재합니다.
- 해당 방식을 통해서도 AWS 서비스나 API에 프로그래밍을 위한 액세스가 가능하도록 해줍니다.
- SDK는 터미널에서 사용하는 것이 아닌, 코딩을 통해 애플리케이션 내에 심어 두어야 합니다.
- SDK
- JavaScript, Python, PHP, .NET, Ruby, Java, Go, Nodejs, C++
- Mobile SDKs(Android, iOS, ...)
- IoT Device SDK(Embedded C, Arduino, ...)
CloudShell
- Cloud Shell 자체에서는 Terminal 처럼 지원하기 때문에, 굳이 local terminal을 사용하지 않아도 된다.
- 위처럼 AWS 명령어도 잘 동작하고 있다.
- 위 환경 설정에는 다양한 옵션들이 존재하기에, 해당 옵션을 통해서 원하는 설정을 가지고 가면 된다.
- 자체 내장 저장소가 있기 때문에, 아래와 같이 파일 업로드 및 다운로드가 가능하다.
IAM Roles for Services
- 몇몇 AWS service들은 우리를 대신해서, 우리 계정으로 이용해 작업을 수행합니다.
- AWs 서비스에 권한을 할당 해야 하고, 이를 위해 IAM 역할 이라는 것을 생성 해야 합니다.
- IAM 역할은 사용자와 유사하지만, 실제 사용자가 사용하는 것이 아니라, AWS 서비스가 사용하는 것입니다.
![[Pasted image 20230704093856.png | 400]]
- IAM 역할은 사용자와 유사하지만, 실제 사용자가 사용하는 것이 아니라, AWS 서비스가 사용하는 것입니다.
- 예를 들면, AWS EC2와 AWS에 있는 Resorce를 접근 할 때는 해당 IAM Role을 체크해서, AWS Resource에 Access를 하게 된다.
- 대표적인 예시는
- EC2 Instance Roles
- Lambda Function Roles
- Roles for CloudFormation
실습
- 역할은 AWS의 엔티티가 단기간 동안 자격 증명을 얻고 필나 작업을 할 수 있게 해줍니다.
- 이외 나머지는 시험과 실습에 필요가 없다.
- AWS Service 역할을 만들 수 있다는 것을 알면 된다.
- 아래에서 가장 일반적인 사용 사례는 두가지 입니다.
- EC2 인스턴스 또는 Lambda함수에 대한 역할을 만드는 것입니다.
- 위의 정책을 설정하면 EC2 인스턴스가 IAM을 읽을 수 있다.
IAM Security Tools
IAM Credential Reportss(account-level) - IAM 자격 증명 보고서
- 보고서는 계정에 있는 사용자 다양한 자격 증명의 상태를 포함합니다.
IAM Access Advisor(user-level) - IAM 액세스 관리자
- 액세스 관리자는 사용자에게 부여된 서비스의 권한과 해당 서비스에 마지막으로 액세스한 시간이 보입니다.
- 최소 권한의 원칙을 따랐을 때 매우 도움 되는 정보입니다.
- 해당 도구를 사용하여 어떤 권한이 사용되지 않는지 볼 수 있고, 따라서 사용자의 권한을 줄여서 최소 권한 원칙을 지킬 수 있습니다.
실습
- 자격 증명 보고서를 만들어보겠습니다.
- 위 버튼을 통해서 자격 증명 보고서를 다운 받습니다.
- 해당 내용은 계정의 보안 적인 측면을 한꺼번에 확인이 가능하다.
IAM 액세스 관리자
Users
클릭 후 본인의 User name을 선택합니다.
Access Advisor
를 클릭하게 되면, 지속적으로 접속 했던 Resource가 뜨게 됩니다.
- 표에 나와있는 것 중에 Last accessed에서
Not accessed in the tracking period
는 user가 한번도 사용하지 않았다는 것을 뜻하기에, 해당 권한은 삭제 처리 하는 것이 좋다.
IAM Guidelines & Best Practices
AWS IAM 가이드 라인
- Root 계정은 AWS 계정을 설정할 때를 제외하고 사용하면 안된다.
- One pysical user = One AWS user
- 이유인 즉, 사용자를 그룹에 넣어 해당 그룹에 권한을 부여할 수도 있기 때문입니다.
- 따라서 그룹 수준에서 보안을 관리 할 수 있다.
- 강력한 비밀번호 정책
- MFA 사용 권고
- AWS 서비스에 권한을 부여할 때마다 역할을 만들고 사용해야 합니다.
- SDK, CLI를 사용할 경우에는 Access Key를 반드시 사용해야 합니다.
- 계정 권한을 감시하고 분석할 IAM 자격 증명 보고서와 IAM 액세스 분석기를 사용할 수 있습니다.
- 위의 가이드라인 요소를 통해서, 해커를 방지할 수 있습니다.
'DevOps > AWS' 카테고리의 다른 글
AWS CodeDeploy (0) | 2025.04.14 |
---|---|
AWS CodeBuild (1) | 2025.04.14 |
AWS Elastic Beanstalk (0) | 2025.04.14 |
AWS RDS (0) | 2025.04.14 |
AWS VPC 기초 (0) | 2023.08.05 |