[AWS-Security] 4.5. IAM 권한 검토
[AWS-Security] 4.5. IAM 권한 검토
1. IAM 권한 검토
- 수동 검토의 필요성 : 조직에서 모범 사례(규칙)를 만들었다면 이를 적용해야 하지만, 패스워드 정책 등을 제외한 대부분의 모범 사례는 자동으로 시스템에 강제하기 어렵다.
- 해결책 : IAM 구성이 우리가 정한 규칙(모범 사례)을 잘 따르고 있는지 확인하는 가장 확실한 방법은 수동으로 직접 검토하는 것이다.
2. IAM 리소스를 검토해야 하는 이유
수동 검토는 많은 시간과 노력이 필요하지만, 반드시 수행해야 한다.
- 측정 (보안 수준의 정량화)
- 조직에서 만든 모범 사례(기준표)를 바탕으로 현재 우리 시스템이 목표에 얼마나 근접했는지 평가하는 단계이다.
- 이를 통해 “우리 정책의 90%가 규정을 준수하고 있다”와 같은 수치를 도출할 수 있으며, 시간이 지남에 따라 보안 상태가 개선되고 있는지 추적할 수 있다.
- 시행 (실질적인 보안 강제)
- 훌륭한 모범 사례를 만들어 두어도, 실제로 시스템에 적용(시행)하지 않으면 아무런 보안 이점을 얻을 수 없다.
- 자동화할 수 없는 규칙들의 경우, 수동 검토를 통해 규정을 어긴(비준수) 리소스를 찾아내고 수정해야만 원하는 보안 수준을 달성할 수 있다.
- 주기적 재검토 (방치된 권한 청소)
- 클라우드 환경은 빠르게 변하지만, IAM 관리는 이를 따라가지 못해 안쓰는 역할이나 삭제된 리소스의 권한이 그대로 방치되는 등 부실해지는 경향이 있다.
- 주기적인 IAM 검토는 쓸데없이 남아있는 ‘오래된 권한’을 찾아내어 정리할 수 있는 기회이다.
AWS 로그 기록 서비스인 CloudTrail을 확인하면 쉽게 식별해 낼 수 있다.
3. 검토 유형
3.1. 기준선 설정 (Baselining Review)
- 개념 : 구성이 ‘의도하고 필요한 것’과 ‘실제로 부여된 것’이 일치하는지 비교하는 방법이다.
- 방법 : 사용자에게 ‘필요하다고 생각되는 모든 권한 목록’을 먼저 작성한 후, ‘실제로 연결된 모든 권한(인라인 정책, 관리형 정책, 수임 가능한 역할 등)’을 모두 수집하여 두 목록을 비교한다.
- 장점 : 최소 권한 모범 사례를 확인하고, 더 이상 필요하지 않은 오래된 권한을 찾아 제거하는 데 유용하다.
[예시 시나리오]
- EC2 접근 권한만 필요한 사용자에게 아래와 같은 정책이 부여되어 있다.
- 해당 정책은 일부 EC2 접근과 MetadataBackupRole이라는 Role을 수임할 수 있는 기능을 허용한다. (해당 Role에 불필요한 권한이 있지 않은지 검사해야 함)
1 2 3 4 5 6 7 8 9 10 11 12
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["ec2:StartInstances", "ec2:TerminateInstances", "ec2:DescribeInstances"], "Resource": "*" }, { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::123456789012:role/MetadataBackupRole" }] }
[확인 결과]
- Role 세부 정책서 확인 시, 필요한 권한(EC2) 외의 불필요한 S3 권한이 부여되어 있다.
- S3 역할 수임 권한을 제거하여 정책을 최신화한다.
- MetadataBackupRole.json
1 2 3 4 5 6 7 8
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:PutObject", "s3:DeleteObject", "s3:ListAllMyBuckets"], "Resource": "*" }] }
[최종 정책]
1
2
3
4
5
6
7
8
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": ["ec2:StartInstances", "ec2:TerminateInstances", "ec2:DescribeInstances"],
"Resource": "*"
}]
}
3.2. 전통적인 보안 검토 (Traditional Security Review)
- 개념 : 모든 IAM 리소스를 조직의 ‘모범 사례(규칙)’에 대입하여 규정 준수 여부를 빠르게 평가하는 방법이다.
- 방법 : 리소스의 구체적인 맥락(이 권한이 필요한지 등)을 따지지 않고, “와일드카드(*)가 있는가?”, “인라인 정책이 있는가?” 등 정해진 규칙 위반 여부만 찾아낸다.
- 장점 : 모범 사례에 익숙한 보안 전문가가 수행하면, 일일이 코드를 뜯어보고 개발자와 대화해야 하는 ‘기준선 설정’ 보다 훨씬 빠르고 쉽게 비준수 항목을 식별할 수 있다.
[예시 시나리오]
- 모범 사례
- 정책에 와일드 카드(*) 사용 금지
- 인라인 정책 사용 금지
- 사용자는 AssumeRole을 제외한 다른 직접 권한 보유 금지
- 대상 IAM 정책
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
{ "_comment":"1. S3AccessPolicy라는 IAM 정책", "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:PutObject", "s3:DeleteObject"], "Resource": "*" }] } { "_comment":"2. 앨리스(Alice)라는 IAM 사용자에게 연결된 인라인 정책", "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:PutObject", "s3:DeleteObject"], "Resource": "arn:aws:s3:::my_bucket/*" }] }
- 추가 Role 정보 : S3AccessPolicy 관리형 정책이 연결되어 있고, 앨리스를 신뢰하는 S3AceessRole이라는 역할이 있다.
[비준수 항목]
- S3AccessPolicy는 리소스 블록에서 와일드카드(*)를 사용하고 있다.
- 앨리스(Alice) 사용자는 인라인 정책을 가지고 있다.
- 사용자(앨리스)에게 AssumeRole이 아닌 권한(s3:PutObject 등)이 직접 부여되어 있다.
3.3. 로그 기반 검토 (Log-based Review)
- 개념
- 접근 로그를 살펴보고 ‘부여된 권한’ 중 ‘실제로 사용된 권한’이 무엇인지 확인하는 방법이다.
- 권한이 충분히 복잡하거나 기준선 검토를 할 시간이 없을 때 유용하다.
- 도구 : AWS 계정에서 호출되는 거의 모든 작업을 기록하는 AWS CloudTrail 서비스를 활용한다. (기본적으로 지난 90일의 이벤트를 캡처)
- 방법 : 콘솔의 Event history에서 검색하거나, AWS CLI 및 다운로드한 CSV 파일을 통해 특정 작업이 언제 마지막으로 쓰였는지 조회한다.
[CLI 및 로그 검색 예시]
1
2
3
4
5
6
7
8
# 특정 작업에 대한 이벤트를 반환하는 CloudTrail 조회 명령어
aws cloudtrail lookup-events \
--lookup-attributes AttributeKey=EventName,AttributeValue=ListBuckets
# IAM 정책 문서 샘플 (CSV 파일에서 grep으로 검색)
grep "ListBuckets" event_history.csv
> 79ec17a0,"2019-01-01,10:30:00 AM",dylanshields,ListBuckets,us-east-1,192.168.1.1
> 79ec17a0,"2019-01-02,11:43:08 AM",dylanshields,ListBuckets,us-east-1,192.168.1.1
- 결론 : 위 결과처럼 마지막 사용일이 아주 오래전이라면, 해당 권한은 더이상 필요하지 않은 것으로 판단하여 취소를 검토해야 한다.
이상적으로는 조직에서 IAM 구성의 모든 불안전한 요소를 파악하기 위해 세 가지 유형의 검토를 모두 사용하는 것이 좋다.
4. 검토 부담 경감 (리뷰 시간과 노력 줄이기)
- 권한 설정 방법 제한하기
- 개념 : IAM 엔터티에 권한을 적용하는 방법은 매우 다양하다. 특정 방식으로만 제한하면 확인해야 할 곳이 줄어든다.
- 예시 : 모범 사례로 ‘인라인 정책 사용 금지’해 두면, 사용자를 검토할 때 인라인 정책이 있는지 찾아볼 필요가 아예 없어진다.
- 내장된 기능(태그 및 설명) 활용하기
- 태그(Tag) 활용 : 리소스를 한 번에 모두 검토하기 힘들 때, 리소스에 마지막으로 검토한 날짜를 태그로 지정하여 진척도를 추적할 수 있다.
1 2
# IAM 사용자에게 태그를 추가하는 AWS CLI 명령어 aws iam tag-user \ --user-name Alice \ --tags Key=ReviewedOn,Value=2020-01-01
- 설명(Description) 필드 활용 : 거의 모든 IAM 리소스에는 설명을 입력할 수 있다. 리소스의 용도나 사용자에 대한 정보를 미리 적어두면, 검토자가 필요한 권한의 맥락을 파악하는 데 걸리는 시간을 절약할 수 있다.
- 태그(Tag) 활용 : 리소스를 한 번에 모두 검토하기 힘들 때, 리소스에 마지막으로 검토한 날짜를 태그로 지정하여 진척도를 추적할 수 있다.
- 모범 사례 재고 (현실적인 타협)
- 개념 : 만약 일이 너무 많아서 검토 자체를 제대로 시행하지 못하고 있다면, 그 모범 사례는 실질적으로 도움이 되지 않으므로 변경하거나 제거하는 것이 좋다.
- 예시 (와일드 카드 금지의 딜레마)
- 최소 권한 원칙을 위해 와일드 카드(*) 사용을 금지하면, 정책에 수많은 작업이 길게 나열되게 된다.
- 검토자는 이 수많은 작업들이 실제로 필요한지 일일이 확인해야 한다.
- 일이 너무 많아 검토가 불가능하다면, 모범 사례를 완화하여
dynamodb:*를 쓰는 것이 더 바람직할 수 있다.
- 결론 : 보안(최소 권한)을 일부 포기하는 것이지만, 새로운 모범 사례를 만들 때는 항상 “검토 프로세스에 얼마나 많은 부담을 추가할 것인가”를 반드시 고려해야 한다.
- 자동화 도구 도입
- 모든 모범 사례에 적용되지는 않지만, 도구를 사용하여 검토 작업의 부하를 줄일 수 있다.
- AWS Config 규칙을 활성화하면 IAM 리소스가 업데이트될 때마다 해당 리소스를 확인하고, 설정한 보안 규정을 준수하지 않을 때 경고를 보내준다.
- 오픈소스 : NCC Group의 ScourSuit 같은 도구를 사용할 수도 있다.
This post is licensed under CC BY 4.0 by the author.
