IAM 사용자 및 그룹
IAM = Identity and Access Management
사용자를 생성하고 그룹에 배치하기 때문에 글로벌 서비스다. 계정을 생성할때만 사용되고 글로벌이기 때문에 리전을 선택할 필요가 없다.
그룹에는 오직 사용자만 배치할 수 있다. 그룹에 속해있지 않아도되고, 한 사람이 여러 그룹에 속해도 된다. 사용자와 그룹을 생성하는 이유는 aws계정 사용을 허용 하기 위해이다.
요약하자면, IAM 정책을 통해 사용자에게 직접 권한을 부여할 수 있고, 그룹으로 묶어서 여러 사람들을 동시에 권한을 부여 할 수 있다. 또한 여러 그룹에 속해서 여러가지 권한을 받을 수 있다.
AWS에서는 최소 권한의 원칙을 적용한다.
최소 권한의 원칙 : 사용자가 꼭 필요로 하는 것 그 이상의 권한을 주지 않는 것이다.
사용자가 3개의 서비스를 접근한다면 그에 대한 권한만 생성하는 것이다.
IAM : 권한 설정
root : 최고 권한자
사용자 계정은 별칭을 지정할 수 있는데, 별칭은 계정에 더 빠르게 로그인하기 위해 설정할 수 있는 기능이다.
IAM 정책
정책에는 json문서가 존재한다. 특정 작업에 권한을 가지고 있는지를 설명해놓은것이다. 문서를 통해 AWS 서비스를 이용하도록 허용한다.
개발자그룹, 운영 그룹 이 있다. 그럼 개발이든 운영이든 그 그룹만의 정책이 있다. 정책이 그룹의 모든 구성원에게 적용되며 구성원 모두 권한을 얻으며 정책의 상속이 가능해진다.
속하지 않은 사람은 그룹이아닌 사용자에게만 연결이 가능한 인라인 정책을 적용한다.
개발자 그룹에도 속하면서 감사팀에도 속하는 사용자는 2가지의 정책을 적용하게 된다. 또한 운영 그룹에도 속하면서 감사팀에도 속하는 사용자는 2가지의 정책을 적용하게 된다.
정책을 직접 만들 수도 있다, Visual editor 또는 JSON 문서로 만들 수 있다.
IAM 정책의 구조
JSON
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "s3-event-cezary_for_lambda-s3",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::ACCOUNT_ID:user/read-only-console-user" // 어느 IAM 유저에게 정책 적용
]
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:eu-west-1:1234567890:function:lambda-s3",
}
]
}
버전 :"Versoin" : "2012-10-17"
ID : 식별자 (선택사항)
Statement(문장) : 구성요소
- 하나일 수도 여러 개일 수도 있다.
문장의 구조
sid : 문장의 식별자 (선택사항)
Effect(효과) : Allow(허용) or Deny(거부)
Principal(원칙) : 특정 정책이 적용될 사용자, 계정 혹은 역할로 구성된다.
예시에선 AWS의 root계정에 적용이 된다라고 나와있다.
Action(조치): Effect에 기반해 허용 및 거부되는 API 호출목록이다.
Resource(리소스) : 적용될 action의 리소스의 목록
Condition(조건) : Statement가 언제 적용될지를 결정한다.
IAM 정보 보호 2가지 방어 메커니즘
1. 비밀번호 정책 (Password Policy)
AWS에서는 다양한 옵션을 이용해 비밀번호 정책의 생성이 가능하다.
비밀번호의 최소 길이를 설정할 수도 있고, 특정 유형의 글자 사용을 요구할 수도 있다. (대문자, 소문자, 특수문자)
또한 일정 기간이 지나면 비밀번호를 만료시켜 새 비밀번호를 설정하게 요구할 수도 있다.
암호정책은 루트 계정에서 직접 정책을 설정할 수 있다.
2. MFA (다중 인증)
다중 인증(MFA)은 사용자에게 암호 이외의 추가 정보를 입력하도록 요구하는 다중 단계 계정 로그인 과정이다. AWS에서는 이 메커니즘을 필수적으로 사용하도록 권장 된다.
사용자들은 계정에 접근 권한이 있고, 특히 관리자는 구성을 변경, 리소스 삭제 등 을 한다 그래서 루트 계정은 반드시 보호 해야하고, 전체 IAM 사용자들도 보호 해야 한다. 보호 하기 위해 MFA를 사용한다.
MFA는 비밀번호와 보안 장치를 함께 사용하는 것이다.
가상 MFA 장치 (Virtual MFA device)
루트 계정, IAM 사용자 또 다른 계정, 그리고 또 다른 IAM 사용자가 지원되는 식으로 가상 MFA 장치에 원하는 수만큼의 계정 및 사용자 등록이 가능하다. 그래서 사용하기가 아주 편리하다.
종류
- 인증 앱 (Authenicator app)
모바일 기기나 컴퓨터에 설치된 앱에서 생성된 코드를 사용하여 인증한다.
- 보안 키 (Security Key)
YubiKey 또는 기타 지원되는 FIDO 보안 키를 터치하여 생성된 코드를 사용하여 인증한다.
- 하드웨어 TOTP 토큰 (Hardware TOTP token)
하드웨어 TOTP(시간 기반 일회용 비밀번호) 토큰에 표시된 코드를 사용하여 인증한다.
AWS 엑세스 키, CLI 및 SDK
AWS에 엑세스하는 방법
1. AWS Management Console (protected by password + MFA)
AWS 관리 콘솔 비밀번호와 MFA를 사용한다.
2. AWS Command Line Interface (CLI) : protected by access keys
CLI는 명령줄 인터페이스를 의미하며 AWS CLI는 명령줄 셸에서 명령어를 사용하여 AWS 서비스들과 상호작용할 수 있도록 해주는 도구이다.
CLI를 사용하면 AWS 서비스의 공용 API로 직접 엑세스가 가능하다. 그리고 스크립트를 개발해 일부 작업을 자동화 할 수 있다.CLI는 오픈 소스로, GitHub에서 모든 소스 코드를 찾을 수 있으며 AWS 관리 콘솔 대신 사용되기도 한다.
즉, 관리 콘솔(웹페이지)에서 하거나 엑세스 키와 비밀 엑세스 키를 구성하여 CLI를 사용할 수 있다는 것이다.
3. AWS Software Developer Kit (SDK) - for code : protected by access keys
SDK는 소프트웨어 개발 키트이다. 특정 언어로 된 라이브러리의 집합인데 프로그래밍 언어에 따라 개별 SDK가 존재한다.
이 방식으로 AWS 서비스나 API에 프로그래밍을 위한 엑세스가 가능하도록 해준다. 하지만 SDK는 터미널내에서는 사용하는 것이 아니라 코딩을 통해 어플리케이션 내에 심어 두어야 하는 것이다. 어플리케이션 내에 자체적으로 AWS SDK가 있는거다. Js, Python, PHP,.NET,Ruby, Java, C++ 등을 지원한다.
안드로이드나 iOS를 쓰면 모바일 SDK도 가능하다. 사물 인터넷인 IOT SDK도 가능하다
접근 키(access key)는 관리 콘솔을 사용해서 생성할 수 있다. 그리고 사용자들이 자신들의 접근 키를 직접 관리한다.
사용자 측면에서는 접근 키는 암호와 같다. 그러니 자신만의 접근 키를 생성하게 되면 동료와 공유해서는 안된다.
엑세스 키 ID 는 사용자 이름 엑세스 키는 비밀번호 이다.
Cloud Shell
AWS에 터미널을 통해 명령을 내리는 것 대신 사용 하는 대안
사용가능한 리전이 정해져있다.
Cloudshell엔 전체 저장소가 있다. 파일을 생성하고 재부팅을 하더라도 남아있다.
구성이 가능하다 즉, 글씨 크기도 작게,크게 등으로 설정이 가능하고 밝거나 어둡게 테마 선택도 가능하다 안전하게 붙여넣기 기능도 있다. 파일을 업로드, 다운로드 또한 가능하다.
AWS 웹페이지 상단에서 아이콘을 눌러 사용가능하다.
IAM ROLE
AWS 서비스에도 권한을 부여해야한다. 그러기 위해서는 IAM ROLE 이라는 것을 만들어야 한다.
IAM Role은 사용자와 같지만 실제 사람이 사용하도록 만들어진 것이 아니고 AWS 서비스에 의해 사용되도록 만들어졌다.
만약 EC2 인스턴스로 어떤 작업을 수행하려고 할땐 EC2 인스턴스에 권한을 부여 해야 한다. 이를 위해 IAM Role을 만들어 하나의 개체로 만든다.
EC2 인스턴스가 AWS에 있는 어떤 정보에 접근하려고 할 때 IAM Role을 사용하게 될 것이다.
IAM 보안 도구
IAM 자격 증명 보고서 (계정 수준 account-level)
- 계정에 있는 사용자와 다양한 자격 증명의 상태를 포함합니다.
- 보고서를 통해 어떤 사용자가 비밀번호를 바꾸지 않았는지, 계정을 사용하는지 에 대한 파악할때 유용하다.
- 보안 측면에서는 어떤 사용자를 주목해야 하는지를 발견하는데 도움을 준다.
IAM 엑세스 관리자 (사용자 수준 user-level)
- 이것은 사용자 수준에서 가능하다.
- 사용자에게 부여된 서비스의 권한과 해당 서비스에 마지막으로 엑세스한 시간이 보인다. 최소권한의 원칙에 따랐을 때 매우 도움 되는 정보이다.
- 해당 도구를 사용하여 어떤 권한이 사용되지 않는지 볼 수 있다 즉, 사용자의 권한을 줄여 최소 권한의 원칙을 지 킬 수 있다.
( AWS에서는 최소 권한의 원칙을 적용한다. 즉 사용자가 꼭 필요로 하는 것 이상의권한을 주지 않는 것이다.)
IAM 가이드 및 모범 사례
- 루트 계정은 AWS계정을 설정할 때를 제외하고 사용하지 말아라
하나의 AWS 사용자는 한명의 실제 사용자를 의미한다. 따라서 지인이 나의 AWS를 이용하고 싶다면 새로운 사용자를 만들어 주면 된다.
- 사용자를 그룹에 넣어 그룹 수준에서 보안을 관리할 수 있다.
- 비밀번호 정책은 강력하게 만들어야 한다. MFA를 사용한다면 해커로부터 계정을 지킬 수 있다.
- AWS 서비스에 권한을 부여할 때마다 역할을 만들고 사용 해야한다.
- AWS를 프로그래밍할 경우 즉, CLI나 SDK를 사용할 경우 반드시 엑세스 키를 만들어야 한다. 엑세스 키는 비밀번호와 같기 때문이다.
- 계정의 권한을 감시할 때는 IAM 자격 증명 보고서와 IAM 엑세스 분석기를 사용 가능하다.
'AWS Cloud > solution architect' 카테고리의 다른 글
EBS (Elastic Block Store) 개요 및 유형/기능/암호화 (1) | 2023.10.27 |
---|---|
AWS 네트워크 및 EC2 배치그룹, ENI, 절전모드 (0) | 2023.10.27 |
EC2 기초 (2) (1) | 2023.10.19 |
EC2 기초 (1) (4) | 2023.10.18 |