티스토리 뷰

반응형

AWS IAM의 데이터 보호

데이터를 보호하기 위해 AWS 계정의 자격증명을 보호하고, IAM을 사용해 개별 사용자 계정을 생성해 관리하는 것이 좋다. 여기서 개별 사용자 계정에 필요한 권한만 부여하게 된다.

 

또한 다음과 같은 방법으로 데이터를 보호해야 한다.

  • 각 IAM 계정마다 MFA를 사용한다.
  • SSL/TLS를 사용해 AWS Resource와 통신한다.
  • AWS CloudTrail을 사용해 API 및 사용자 로깅을 수행한다.
  • AWS 암호화 솔루션을 AWS 서비스 내의 모든 기본 보안 컨트롤과 함께 사용한다.
  • Amazon S3에 저장된 개인 데이터를 검색하고 보호하고자 Amazon Macie와 같은 고급 관리형 보안 서비스를 사용한다.
  • AWS CLI, API를 통해 AWS에 접근할 때 FIPS 140-2 검증된 암호화 모듈이 필요할 경유 FIPS EndPoint를 사용한다.

 

UserName과 같은 필드에 고객 계정 번호와 같은 중요 식별 정보를 절대 사용하지 못하도록 해야한다. 그리고 외부 서버에 URL을 제공할 때 해당 서버에 대한 요청을 검증하기 위해 자격증명 정보를 URL에 포함하지 않도록 한다.

 

IAM 및 AWS STS의 데이터 암호화

데이터 암호화는 일반적으로 저장 데이터 암호화전송 중의 데이터 암호화로 구분한다.

 

저장 데이터 암호화

  • IAM - IAM 내에서 수집되고 저장되는 데이터에는 IP주소, 고객 계정 Metadata 및 암호를 포함한 고객의 식별정보가 있다. 이를 AES-256, SHA-256 등의 해시 알고리즘을 통해 암호화해야 한다.
  • AWS STS - AWS STS는 서비스에 대한 성공, 오류, 잘못된 요청을 기록하는 서비스 로그를 제외하고는 고객에 대한 정보를 수집하지 않는다.

 

전송 중 데이터 암호화

암호를 포함한 고객 식별 데이터는 TLS 1.1/1.2를 사용해 전송 중에 암호화된다. 모든 AWS STS 엔드 포인트는 전송 중 데이터를 암호화하기 위해 HTTPS를 지원한다.

 

 

AWS IAM의 로깅 및 모니터링

모니터링은 AWS IAM, AWS STS 및 기타 AWS 솔루션의 안정성, 가용성 및 성능을 유지하는데 있어 중요하다. 

  • AWS CloudTrail는 AWS Management Console과 AWS API 호출 등 모든 IAM 및 AWS STS API 호출을 이벤트로 저장한다. 자세한 내용은 아래 1) 링크를 확인한다.
  • AWS IAM 액세스 분석기(IAM Access Analyzer)를 사용해 외부 엔터티와 공유되는 조직 및 계정 내 리소스를 식별할 수 있다. 이렇게하면 리소스 및 데이터에 대한 의도하지 않은 접근을 식별할 수 있다.
  • Amazon CloudWatch는 AWS 리소스와 AWS에서 실시간으로 실행되는 애플리케이션을 모니터링한다. 지표를 수집 및 추적하고 사용자 지정 대시보드를 생성할 수 있고, 지표가 임계치에 도달하면 사용자에게 알리는 등의 조치를 취할 수 있다. (예를 들면 CPU 사용량 등의 지표를 사용할 수 있다)
  • Amazon CloudWatch Logs를 사용하면 Amazon EC2, CloudTrail 및 다른 원본에서 로그 파일을 모니터링하고 저장 및 액세스할 수 있다. 로그 파일의 정보를 모니터링하다가 특정 임계치가 충족될 때 이를 통보할 수 있다.

 

1) docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/cloudtrail-integration.html

 

AWS CloudTrail을 사용하여 IAM 및 AWS STS API 호출 로깅 - AWS Identity and Access Management

AWS CloudTrail을 사용하여 IAM 및 AWS STS API 호출 로깅 IAM 및 AWS STS은 IAM 사용자 또는 역할이 수행한 작업에 대한 레코드를 제공하는 서비스인 AWS CloudTrail과 통합됩니다. CloudTrail는 콘솔과 API 호출에서

docs.aws.amazon.com

 

 

IAM 보안 모범 사례

AWS 계정의 루트 사용자 Access Key 잠금

Access Key를 사용해 프로그래밍 방식으로 AWS에 접근할 수 있다. 그러나 AWS 계정의 루트 사용자의 Access Key는 사용하면 안된다. AWS 계정의 루트 사용자에 대한 Access Key는 결제 정보를 포함해 모든 AWS 서비스의 전체 Resource에 대한 접근 권한을 보유하고 있고 이 권한을 줄일 수 없기 때문이다.

  • AWS 계정의 루트 사용자에 대한 Access Key가 아직 없다면 필요할 때까지 만들지 말아야 한다.
  • AWS 계정의 루트 사용자에 대한 Access Key가 있다면 삭제해야 한다. 계속 유지해야할 경우 주기적(90일)으로 Access Key를 교체해야 한다.
  • 다른 사람과 AWS 계정의 루트 사용자의 암호 또는 Access Key를 공유해서는 안된다.
  • AWS 계정의 루트 사용자에 대해서 강력한 암호를 사용해 AWS Management Console에 대한 접근을 보호해야 한다.
  • AWS 계정의 루트 사용자에 MFA를 활성화해야 한다.

 

개별 IAM 사용자 만들기

AWS 계정 루트 사용자의 자격증명을 사용해 AWS에 접근하거나 다른 사용자와 공유하면 안된다. 대신 AWS 계정에 접근해야 하는 사용자에 대해서 별도의 IAM 사용자 계정을 생성한다. 심지어 관리자조차 IAM 사용자를 만들어 관리 권한을 부여한 후 모든 관리 작업을 수행하도록 해야한다.

 

IAM 사용자를 만들면 각 IAM 사용자에게 서로 다른 보안 자격증명이 부여된다. 또한 서로 다른 다양한 권한을 부여할 수 있고 필요에 따라서 권한을 추가/삭제 할 수 있다.

 

그룹을 사용해 IAM 사용자에게 권한 할당

개별 IAM 사용자에 대한 권한을 정의하는 대신 업무와 관련된 그룹을 만들고 그룹별로 권한을 부여하는 것이 편리하다. 그리고 해당 그룹에 IAM 사용자를 할당한다. 그러면 그룹에 부여된 권한이 그룹에 포함된 모든 IAM 사용자에게 상속된다. 사내에서 직원의 부서가 변경되면 해당 IAM 사용자가 속한 IAM 그룹만 변경하면 된다.

 

최소 권한 부여

IAM 사용자 혹은 역할이 수행해야 하는 작업을 파악한 후 해당 작업에 필요한 권한만 부여하도록 해야한다. 필요하다면 관리형 정책을 사용하는 것이 아니라 고객 관리형 정책을 새로 정의해 정책을 작성한다.

 

최소한의 권한으로 시작해 필요에 따라 추가 권한을 부여하는 방법이 안전하다.

 

정책 작업은 List, Read, Write, Permissions Management, Tagging 으로 분류할 수 있다. 이러한 정책 작업을 통해서 액세스 레벨 그룹화를 작성할 수 있다. 예를들면 특정 IAM 사용자에게는 특정 Resource에 대해서 읽기 권한만 부여하도록 하고 싶다면 Read 정책 작업만 부여하면 된다.

 

최소 권한을 부여하기 위해 "마지막으로 액세스한 정보"가 유용하게 활용될 수 있다. IAM 사용자, 그룹, 역할 또는 정책에 대한 IAM Console 세부 정보 페이지의 Access Advisor 탭에서 이 정보를 확인한다. 마지막으로 접근한 정보에는 Amazon S3와 같은 일부 서비스에 대해 마지막으로 액세스한 작업에 대한 정보도 포함된다.

 

AWS Organizations 마스터 계정 자격증명을 사용해 로그인하는 경우 IAM Console의 AWS Organizations 섹션에서 마지막으로 접근한 서비스 정보를 확인할 수 있다. 또한 AWS CLI, API를 통해 IAM 또는 AWS Organizations의 엔터티 또는 정책에 대해 마지막으로 접근한 정보 보고서를 검색할 수 있다.

 

이 정보를 통해 불필요한 권한을 확인할 수 있다.

 

권한을 추가로 줄이기 위해서 AWS CloudTrail 이벤트 이력을 확인할 수 있다. CloudTrail 이벤트 로그에는 정책의 권한을 변경하기 위한 자세한 이벤트 정보가 포함되어 있다.

 

(흠... 근데 명확한 방법론이 없긴하네.....)

 

AWS 관리형 정책으로 권한 사용 시작

직원에게 필요한 권한을 부여하기 위해서는 IAM 정책에 대해 이해하고 있어야하고 시간이 필요하다. 신속하게 이를 시작하기 위해서 AWS 관리형 정책을 사용할 수 있다. 이 정책은 이미 계정에서 사용할 수 있도록 작성되어 있으며  AWS에 의해 유지관리 및 업데이트 된다.

 

인라인 정책 대신 고객 관리형 정책사용

사용자가 직접 작성하여 부여하기 위한 정책으로 인라인 정책보다 고객 관리형 정책 사용을 권장한다. 고객 관리형 정책을 사용할 경우 AWS Management Console의 한 곳에서 모든 관리형 정책을 볼 수 있다는 장점이 있다. 또한 단일 AWS CLI, API 작업으로 이 정보를 확인할 수 있다. 반면에 인라인 정책은 IAM 사용자, 그룹, 역할에만 존재하는 정책이다.

 

액세스 레벨을 이용한 IAM 권한 검토

AWS 계정의 보안을 개선하려면 모든 IAM 정책을 정기적으로 검토하고 모니터링해야 합니다. 또한 정책은 필요한 작업을 수행하는데 필요한 최소권한만을 부여해야한다.

 

정책을 보면 그 안에서 각 서비스에 대한 액세스 레벨의 요약이 들어있는 정책요약을 확인할 수 있다. AWS는 작업 내용에 따라 각 서비스 작업을 다섯 개의 액세스 레벨(List, Read, Write, Permissions Management, Tagging)으로 분류한다. 이러한 액세스 레벨을 사용해 어떤 작업을 정책에 포함할 수 있다.

 

예를 들면 Amazon S3 서비스의 경우 다수의 사용자가 List, Read 작업에 액세스할 수 있도록 허용할 수 있다. 이러한 작업은 사용자가 Amazon S3에 버킷을 나열하고 객체를 가져올 수 있도록 허용한다. 하지만 소수의 사용자만 Write 작업에 액세스하여 버킷을 삭제하거나 S3 버킷에 객체를 넣도록 허용한다. 또한 관리자만 Amazon S3 Permissions Management 작업에 접근할 수 있도록 권한을 줄여야 한다. IAM및 AWS Organizations 서비스의 Permissions Management 작업에 대한 부분이 매우 중요하다.

 

사용자에 대한 강력한 암호 정책 구성

사용자가 직접 암호를 변경하도록 허용할 경우 강력한 암호를 만들고 주기적으로 암호를 변경하도록 해야한다.

 

MFA 활성화

보안 강화를 위해 계정에 속한 모든 IAM 사용자에게 MFA를 요구하는 것이 좋다.

  • 가상 및 하드웨어 MFA 디바이스가 코드를 생성해 앱 또는 디바이스에 보여준 후  로그인 화면에 입력하는 방식
  • 사용자가 디바이스를 터치하면 U2F 보안 키가 응답을 생성하고, 로그인 화면에 사용자가 직접 코드를 입력할 필요가 없는 방식

 

Amazon EC2 인스턴스에서 실행되는 애플리케이션에 역할 사용

Amazon EC2 인스턴스에서 실행되는 애플리케이션이 다른 AWS 서비스에 액세스하려면 자격증명이 필요하고, 이 애플리케이션에 안전하게 자격증명을 제공해야한다. 이럴 때 IAM 역할을 사용해야 한다. 역할은 IAM 사용자와 달리 영구적인 자격증명 조합이 보여되지 않는다. Amazon EC2의 경우 IAM은 EC2 인스턴스에 동적으로 생성되는 임시 자격증명을 제공하며 이 자격증명은 자동적으로 교체된다. (흐음....... 해보긴 해야겠네요)

 

Amazon EC2 인스턴스 실행 시 실행 파라미터로 인스턴스에 대한 역할을 지정할 수 있다. 해당 인스턴스에서 실행되는 애플리케이션은 AWS 리소스에 액세스할 때 역할의 자격증명을 사용할 수 있다.

 

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html

 

IAM 역할을 사용하여 Amazon EC2 인스턴스에서 실행되는 애플리케이션에 권한 부여 - AWS Identity and Acc

IAM 콘솔을 사용하는 경우, 인스턴스 프로파일은 사용자를 위해 관리되고 대개 사용자가 파악하기 쉽습니다. 그러나 AWS CLI 또는 API를 사용하여 역할 및 EC2 인스턴스를 만들고 관리하는 경우 사용

docs.aws.amazon.com

 

역할을 사용하여 권한 위임

다른 AWS 계정의 사용자가 내 AWS 계정의 리소스에 접근하도록 허용하려면 계정 간에 보안 자격증명을 공유해서는 안된다. 대신 IAM 역할을 사용할 수 있다. 다른 계정의 IAM 사용자에게 어떤 권한이 허용되는지 지정한 정책이 작성된 역할을 정의할 수 있고, 해당 역할을 어느 IAM 사용자에 대해서 수임하도록 허용할지도 지정할 수도 있다. 

 

액세스 키를 공유하지 말것

액세스 키는 AWS에 프로그래밍 방식으로 액세스할 수 있도록 한다. 액세스 키를 암호화되지 않은 코드에 삽입하거나, AWS 계정 사용자 간에 공유해서는 안된다. AWS 액세스가 필요한 애플리케이션은 IAM 역할을 사용해 임시 보안 자격증명 검색을 통해 프로그램을 구성해야 한다. (위 보안 모범사례 참고)

 

자격 증명을 정기적으로 교체

암호와 액세스 키를 정기적으로 교체하고, 계정의 모든 IAM 사용자도 이와 같이 해야 한다. 그러면 자신도 모르게 암호 또는 액세스 키가 손상되더라도 이 손상된 자격증명이 리소스 액세스에 사용되는 기간을 최소화할 수 있다.

 

또한 모든 IAM 사용자가 주기적으로 암호를 교체하도록 요구하는 암호 정책을 적용할 수도 있다. 또한 이에 대해 얼마나 자주 교체해야하는지도 선택할 수 있다.

 

불필요한 자격증명 삭제

필요없는 IAM 사용자 자격 증명을 삭제해야 한다. 예를 들어 AWS Console을 사용하지 않는 애플리케이션에 대해 IAM 사용자를 생성한 경우 IAM 사용자는 암호가 필요하지 않다. 마찬가지로 사용자가 AWS Console만 사용하는 경우 액세스 키를 제거해야 한다.

 

최근에 사용된 적이 없는 자격증명은 삭제해야할 기준이 될 수 있다. 이는 자격증명 보고서를 다운로드 받아 자세한 내용을 확인할 수 있다.

 

보안 강화를 위해 정책 조건 사용

필요한 경우 IAM 정책에서 리소스에 대한 액세스 허용 조건을 정의해 사용할 수 있다.

 

예를 들어 요청할 수 있는 IP주소의 범위를 지정하도록 조건, 특정 기간이나 시간 범위 내에서만 요청이 가능하도록 조건을 작성할 수도 있다. 또한 SSL, MFA를 사용하도록 조건을 설정할 수도 있다.

 

AWS 계정의 활동 모니터링

AWS 로깅 기능을 사용해 사용자가 계정에서 수행한 작업과 사용한 리소스를 확인할 수 있다. 로그 파일에는 작업 시간 및 날짜, 작업의 소스 IP, 부족한 권한으로 인한 실패 등의 내용이 나와있다.

 

Amazon CloudFront, AWS CloudTrail, Amazon CloudWatch, AWS Config, Amazon S3 등의 AWS 서비스를 사용해 로깅 기능을 사용할 수 있다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함