안녕하세요 서후아빠입니다. ^_^
이번 세션은 AWS IAM에 대해서 업무적으로 필요한 최소한의 개념에 대해서 간단히 정리해 보았습니다.
개요
AWS에서 Service와 User가 다른 Service에 대한 권한 관리
1개의 IAM에 여러 개 Rule 부여 가능, EC2는 1개의 Rule만 부여 가능
정책 (Policy) 종류 및 사용 목적
식별 기반 정책을 이용하여 리소스 기반 정책 접근
정책 (Policy) JSON 구조
예시 : Amazon S3가 123456789012 계정에서 my-bucket 버킷의 my-function이라는 함수를 호출할 수 있도록 허용
필수 설정 항목은 붉은색 표현
Principal
구분 | JSON |
AWS account | "Principal": { "AWS": "account-id" } "Principal": { "AWS": ["account-id", "arn:aws:iam::account-id:root"] } |
IAM rule | "Principal": { "AWS": "arn:aws:iam::account-id:role/role-name" } |
Role session | "Principal": { "AWS": "arn:aws:sts::account-id:assumed-role/role-name/role-session-name" } "Principal": { "Federated": "www.amazon.com" } "Principal": { "Federated": "arn:aws:iam::account-id:saml-provider/provider-name" } "Principal": { "AWS": "arn:aws:iam::account-id:user/user-name" } "Principal": { "AWS": "arn:aws:sts::account-id:federated-user/user-name" } |
AWS service | "Principal": { "Service": "s3.amazonaws.com" } |
All | "Principal": "*" "Principal" : { "AWS" : "*" } |
NotPricipal은 Pricipal의 반대개념으로써 "Effect": "Allow"와 함께 설정하면 해당 출발지 외 모두 허용한다는 의미이므로 함께 설정하는 것은 권장하지 않습니다. 일반적으로 "Effect": "Deny"와 함께 설정합니다. |
Action
구분 | JSON |
lambda의 InvokeFunction(함수호출) Access에 대해서만 적용 | "Action": "lambda:InvokeFunction" |
lambda의 InvokeFunction(함수호출) 제외한 모든 Access에 대해서 적용 | "NotAction": "lambda:InvokeFunction" |
특정 Access type(ex : InvokeFunction)뿐만 아니라 모든 Access type에 대해서 적용을 받기 위해서는 *를 입력한다. |
Resource
구분 | JSON |
All(*로 표현) 적용 | "Resource": "arn:aws:s3:::my-bucket/*“ "Resource": "arn:aws:s3:::my-bucket/*/test/*" |
현재 사용자의 이름과 일치하는 테이블만 적용 | "Resource": "arn:aws:dynamodb:ap-northeast-2:account-id:table/${aws:username}" |
Condition
구분 | JSON |
기본 구조 | "Condition" : { "{condition-operator}" : { "{condition-key}" : "{condition-value}" }} |
The request context (True, False, Null, Not present 반환) |
"Condition": { "NumericLessThanEquals": {"aws:MultiFactorAuthAge": "3600"} } |
The condition block | "Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}} |
condition-operator type |
condition-operator |
String | StringEquals, StringNotEquals, StringEqualsIgnoreCase, StringNotEqualsIgnoreCase, StringLike, StringNotLike |
Numeric | NumericEquals, NumericNotEquals, NumericLessThan (미만), NumericLessThanEquals (이하), NumericGreaterThan (초과), NumericGreaterThanEquals (이상) |
Boolean | Bool |
String condition-operator의 Ignore 의미 : 대소문자 무시 그 외 Type : Date, Binary, IP address, ARN, ...IfExists |
권한
최종 획득 권한 범위(조건)은 모든 범위가 중첩되는 가운데 부분입니다.
여러 개의 권한이 설정된 경우 적용 우선순위는 아래와 같습니다.
API 요청은 아래 순서에 따라 최종 목적지에 도달합니다. ① 4개 정책(SCP, Permission Boundary, ID기반, Resource기반) 중에서 명시적으로 Deny되지 않은 것만 통과 ② SCP 정책(AWS Organizations에서 부여)에서 Allow된 것만 통과 ③ IAM User에 부여된 Permission Boundary 정책에서 Allow된 것만 통과 ④ 정책 종류 중 식별 기반 정책에서 Allow된 것만 통과 ⑤ 정책 종류 중 Resource 기반 정책에서 Allow된 것만 통과 |
Policy와 Rule
Policy : 요청자(Users or AWS services) or 요청자 그룹의 권한을 정의하는 JSON 문서
Rule : AWS 서비스에 접근 가능한 임시 권한을 요청자에게 제공 (ex : EC2에게 S3 권한을 가진 역할 제공하여 서비스 이용)
IAM에서 필수적으로 설정해야 하는 항목 (중요)
root 사용자의 Access key 비활성화하고, 반면에 IAM User는 Access key 활성화
- root 사용자는 IAM 설정과 비용 관리만
- IAM User는 IAM 이외의 AWS service 관리
MFA 설정
사용자 역할에 맞는 정책 할당 (사용자 그룹에 할당하는 것을 권고)
암호 복잡도 정책 설정
요금 경보 설정 (CloudWatch + SNS 연계)
사용자 인증 종류
프로그래밍(API, CLI, SDK 등) 인증 방식 : Access ID + Secret access Key
AWS 웹 관리 콘솔 인증 방식 : User ID + Pasword (추가 옵션 : MFA)
MFA (Multi-Factor Authentication)
사용 목적 : AWS 웹 관리 콘솔 접근, AWS service에 접근 시 "User ID + Password" 외 2차 인증 통한 보안 강화
구분 | 가상 MFA 디바이스 | U2F 보안 키 | 하드웨어 MFA 디바이스 | SMS 문자 메시지 기반 MFA (신규 고객 지원 종료) |
내용 | Mobile에 간편히 설치하여 사용 (무료) | USB에 저장된 U2F 보안 키를 사용 (유료, 별도 구매) | 은행 OTP와 비슷, 시리얼 번호와 OTP 번호 2개를 입력하여 등록 (유료, 별도 구매) | 계정에 등록된 연락처를 이용하여 SMS 인증 |
U2F 보안 키 vs 하드웨어 MFA 디바이스
- U2F 보안 키 : U2F 보안 키가 생성한 응답을 사용자가 확인하는 것이 아닌 서비스에서 확인하는 방식
※ U2F(Universal 2nd Factor) : FIDO Alliance에서 호스팅하는 공개 인증 표준
- 하드웨어 MFA 디바이스 : 인증 코드 방식, 사용자가 로그인 시 입력
MFA 이용한 로그인 흐름도
AWS 참고 URL
IAM JSON : https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html
'Security' 카테고리의 다른 글
[실습] AWS IAM의 Permissions boundary(권한 경계)를 이용하여 미흡한 운영자로부터 서비스 인프라 보호하기 (0) | 2022.07.25 |
---|---|
[실습] AWS IAM User에게 권한 부여, MFA 활성화 실습하기 (0) | 2022.07.22 |
[실습] Amazon Network ACLs (NACL) 및 Security groups (SG, 보안그룹) 실습하기 (0) | 2022.07.21 |
[이론] Amazon Network ACLs (NACL) 및 Security groups (SG, 보안그룹) 기본 개념 (0) | 2022.07.21 |
[Tip] AWS 관리 콘솔에서 EC2 접속을 차단하는 방법에 대해서 알아보기 (0) | 2022.07.09 |