aws

[AWS] IAM

하리하링웹 2024. 7. 20. 20:07

IAM 기반 신분 관리

AWS 계정을 처음 생성하면 root user가 만들어진다. root user는 모든 서비스와 리소스에 접근할 수 있으며, root user의 권한으로만 할 수 있는 작업들도 있다. AWS는 root user와 관련된 보안 위협을 방지하고 root user 대신 다른 계정을 생성하여 사용하는 것을 권장한다. 이를 위해 제공되는 서비스가 바로 IAM(Identity and Access Management)이다.

 

IAM 정책

IAM 정책은 하나 이상의 AWS 리소스에 대한 동작의 허용 여부를 결정하는 문서이다. 정책 문서에 명시되지 않은 동작은 모두 불허한다. 하나의 신분에는 최대 10개의 정책을 적용할 수 있다. 만약 하나의 정책에서 S3 버킷 생성을 허용하고 다른 정책에서 이를 불허한다면, AWS는 상반되는 정책에 대해 불허를 우선적으로 따른다.

 

유저와 루트 계정

루트 계정 보호를 위한 최선의 방법은 이를 봉인하는 것이다. 다음 절차를 따르면 된다.

  • 루트 계정과 연계된 액세스 키 삭제
  • 길고 복잡한 비밀번호 작성 후 비밀번호 관리 시스템에 저장
  • 루트 계정에 MFA(Multi-Factor Authentication) 기능 활성화
  • Admin 작업에 루트 계정 사용 자제

IAM 액세스 키 관리

액세스 키는 CLI 기반 접근 및 프로그래밍 기반 접근 시 권한 인증 기능을 제공한다. 액세스 키와 시크릿 액세스 키를 통해 ID와 비밀번호 없이도 리소스에 대한 권한을 부여받을 수 있다.

미사용 키 비활성화하기

활성화된 키는 언제든 사용이 가능하기 때문에 해킹 등에 악용될 수 있다. 따라서 일정 기간 동안 키를 사용하지 않을 경우, 해당 키를 비활성화하고 사용할 계획이 없다면 삭제하는 것이 좋다.

키 로테이션

오래된 키는 삭제하는 것이 좋다. 키 사용 기한을 30일 정도로 설정하고, 기한이 지난 키는 새로운 키로 교체하거나 삭제하는 것이 좋다. 좋은 키 로테이션 방법은 다음과 같다.

  • 각 유저별로 새 액세스 키를 생성한다. 유저가 스스로 키를 관리하도록 할 수도 있다.
  • 애플리케이션의 키 정보를 새 키에 맞춰 업데이트한다.
  • 오래된 키는 비활성화하거나 삭제한다.
  • 키 업데이트 이후에도 애플리케이션 실행에 문제가 없는지 며칠간 관찰한다. CLI 명령을 통해 구형 키 사용 여부도 확인할 수 있다.
  • 잘 동작한다면 구형 키를 완전히 삭제한다.

IAM 그룹

계정 관리가 복잡해지고 바빠질수록 개별 유저를 관리하는 것은 어려워진다. 그룹 단위로 권한을 부여하면 변경 사항이 생겼을 때 일괄 적용이 가능해 편리하다. 개발 그룹, 어드민 그룹, 디자인 그룹 등 다양한 그룹을 생성하여 체계적으로 권한을 관리할 수 있다.

 

IAM 롤

IAM 롤은 유저 또는 서비스가 리소스에 대한 접근 요청을 할 때 이용할 수 있는 임시 신분이다. 롤을 이용하여 서비스와 관련된 다양한 논리적 문제를 해결할 수 있다. 예를 들어, ECS 서비스를 통해 다른 리소스와 연계된 AWS 서비스를 시작하는 경우, ECS를 사용하기 위해 먼저 ECR에 대한 접근 권한을 가지고 있어야 한다.

이러한 작업에 적합한 AmazonECSTaskExecutionRolePolicy와 같은 롤들이 미리 정의되어 있다.

롤은 접근이 필요한 리소스의 신뢰 개체를 정의하는 방식으로 생성할 수 있다. 신뢰 개체에는 다음과 같은 종류가 있다.

  • AWS 서비스
  • AWS 계정
  • Amazon, Amazon Cognito, Facebook, Google 로그인을 통해 접근 권한을 증명한 웹 식별 객체
  • SAML 2.0 연합 자격 인증 객체

신뢰 개체를 정의한 후, 사용자는 정책 부여, 사전 정의된 IAM 정책 부여 등을 통해 권한을 부여할 수 있다. 신뢰 개체에 새 롤이 포함되어 있는 경우, AWS는 AWS Security Token Service를 사용해 만료 기한이 정해진 보안 토큰을 발행한다.

 

접근권한 관리 도구

AWS는 사용자 및 리소스 관리를 위한 다양한 도구를 제공한다. 접근 권한 관리를 위한 주요 도구로 IAM, Amazon Cognito, AWS Managed Microsoft AD, AWS Single Sign-On 등이 있으며, 키 암호화 및 보안 자격 증명 도구로는 AWS Key Management Service, AWS Secrets Manager, AWS CloudHSM 등이 있다.

 

Amazon Cognito

Amazon Cognito는 모바일 앱 및 웹 개발자를 위한 회원가입과 로그인 기능을 제공한다.

  • Cognito 유저 풀: 애플리케이션에 회원가입 및 로그인 기능을 추가할 수 있다.
  • Cognito 아이덴티티 풀: 애플리케이션 사용자에게 다른 AWS 서비스에 대한 임시 권한을 부여할 수 있다.

유저 풀 생성 시 회원가입 방법과 로그인 방식을 정의할 수 있으며, 패스워드 복잡성, MFA(다중 요소 인증), 이메일 인증 등을 설정할 수 있다.

AWS Managed Microsoft AD

AWS Directory Service를 통해 Microsoft Active Directory(AD)에 접근할 수 있다. 이를 통해 AWS VPC에 포함된 리소스를 Active Directory로 관리할 수 있으며, Microsoft SharePoint, .NET, SQL Server 기반 워크로드와 같은 방식으로 관리할 수 있다.

AD Connector를 사용하면 AWS 서비스와 온프레미스 Microsoft Active Directory를 직접 연결할 수 있다. Managed Microsoft AD의 도메인 컨트롤러는 두 개의 VPC 가용 영역에서 실행되며, 데이터 복제 및 소프트웨어 업데이트 등 인프라 관리 업무를 자동으로 수행한다.

AWS Single Sign-On

AWS Single Sign-On(SSO)은 AWS Directory Service로 관리되는 Microsoft Active Directory를 통해 신분 확인 및 권한 부여 작업을 일관되게 수행한다. AWS Organizations에 포함된 다수의 AWS 계정에서도 사용할 수 있으며, Salesforce, Box, Office 365 등 다양한 애플리케이션과 통합할 수 있다.

AWS Organizations는 다수의 AWS 계정을 정책 기반으로 제어하는 관리 서비스로, 하나 이상의 AWS 계정을 보유한 기업이 기업 자산을 통합적으로 관리할 수 있도록 도와준다.

AWS Key Management Service

AWS Key Management Service(KMS)는 AWS 서비스 이용을 위한 암호화 키 생성 및 관리 서비스이다. KMS는 시스템 전반에 걸쳐 사용 가능한 완전관리형, 중앙제어형 암호화 키를 제공한다. 데이터 보호를 위한 암호화 키 생성, 추적, 순회, 삭제 기능을 제공하며, 모든 종류의 키와 관련된 이벤트를 추적하는 AWS CloudTrail과 통합하여 기업의 감사 업무 및 준법 감시 업무에도 사용할 수 있다.

콘솔, AWS CLI, SDK에서 키 생성 및 관리 업무를 수행할 수 있으며, 키 관리 권한은 IAM 사용자, 그룹, 롤 단위로 부여할 수 있다.

 

AWS Secrets Manager

AWS Secrets Manager는 패스워드와 서드파티 API 키 등 애플리케이션에서 필요로 하는 시크릿 리소스를 전문적으로 관리할 수 있는 도구이다. 실행 코드에 민감한 시크릿 코드를 입력하는 대신 Secrets Manager를 이용하여 변경 사항을 정기적으로 업데이트하는 방식으로 인증 자격을 관리할 수 있다.

 

AWS CloudHSM

AWS CloudHSM은 웹 서버 인프라의 암호화 작업을 위해 전용 가상 연산 기기 클러스터를 제공한다. HSM은 Hardware Security Module의 약자로, 웹 서버의 암호화 키 생성, 저장, 관리 부담을 덜어준다.

장점

  • 키는 높은 수준의 보안성이 검증된 전용 서드파티 HSM에 저장된다.
  • 미 연방정보처리표준(FIPS) 140-2 규정에 부합한다.
  • Public Key Cryptography Standards(PKCS)#11, Java JCE, Microsoft CNG 인터페이스를 이용해 애플리케이션과 통합된 기능을 제공한다.
  • VPC 내 고성능 암호화 생성 가속 기능을 제공한다.

애플리케이션의 데몬으로 CloudHSM 클라이언트를 실행하여 HSM 클러스터를 활성화할 수 있으며, 이때 클라이언트는 HSM과 완벽하게 암호화된 방식으로만 소통하도록 설정할 수 있다.

 

AWS Resource Access Manager (AWS RAM)

AWS Resource Access Manager(AWS RAM)는 리소스 접근을 돕는 서비스로, 단일 조직 내 다수의 계정에 속한 사용자와 조직 외부 AWS 계정의 사용자가 안전하게 리소스를 공유할 수 있도록 지원해준다.

AWS RAM의 리소스 접근 기능을 사용하면 여러 개의 리소스 사본을 만들고 관리해야 하는 부담을 덜 수 있으며, 단일 접근 정책 및 단일 롤 프로필을 통해 모든 작업을 통제할 수 있다.

특정 리소스가 AWS RAM의 공유 리소스에 포함되면, 모든 인증된 사용자는 자체 콘솔이나 AWS CLI를 이용해 해당 리소스에 접근할 수 있다.

 

정리

  • Root 계정은 생성 이후 되도록 사용하지 말고 IAM 계정을 생성하는 것이 좋다.
  • 모든 사용자 계정은 강력한 패스워드와 MFA를 사용하여 보호하고 각종 키들은 암호화하여 사용해야 한다.
  • 접근 권한을 부여받은 사용자는 IAM 정책에 정의된 AWS 리소스에 접근할 수 있으며, IAM 그룹을 통해 정책을 더 쉽게 관리할 수 있다.
  • 사용하지 않는 엑세스 키는 비활성화하거나 삭제하고, 활성화된 키도 주기적으로 변경하는 것이 좋다.
  • 사용자, 그룹, 롤 등 신분을 나타내는 객체는 Cognito, Managed Microsoft AD, Single Sign-On 등 다양한 방식으로 AWS 서비스 접근 권한을 부여받을 수 있다.
  • 접근 권한 인증서와 시크릿 문서는 AWS KMS, AWS Secrets Manager, AWS CloudHSM 등의 서비스를 이용해 관리할 수 있다.
 
 

'aws' 카테고리의 다른 글

[AWS]DNS와 CDN: Route 53과 CloudFront  (0) 2024.07.30
[AWS] 모니터링  (0) 2024.07.28
[AWS]데이터베이스 (2)  (0) 2024.07.18
[AWS]데이터베이스 (1)  (0) 2024.07.16
[AWS]VPC (2)  (0) 2024.07.13