AWS 사용자는 IAM(identity and access management)을 통해 리소스 관리에 필요한 신분확인 및 권한부여 업무를 처리할 수 있다.
처음 AWS 계정을 생성하면 루트 유저 라는 신분이 만들어진다. 루트 유저는 우리의 계정 내에서 모든 서비스와 리소스에 접근 할 수 있는 권한을 지니고 있으며, 다른 신분으로는 결코 할 수 없는 작업을 오직 루트 유저 권한으로만 할 수 있다.
이처럼 강력한 힘을 가지고 있기 때문에 AWS는 루트 유저 계정은 엄격하게 보호하고, 다른 계정을 생성해서 일상적인 업무에 사용할 것을 권장한다.
IAM 정책은 하나 이상의 AWS 리소스와 관련된 일련의 허용 동작 및 불허 동작을 정리한 문서이다.
정책 문서에 의해 특정 사용자는 해당 리소스에 접근해서 원하는 작업을 수행할 수 있다.
이 때 정책에서는 효과(effect)라는 속성으로 허용(allow) 또는 불허(deny)를 나타낸다.
{
"Version" : "2012-10-17",
"Statement" : [
{
"Effect" : "Allow",
"Action" : "*",
"Resource" *",
}]
}
예를 들어서 위와 같은 경우는 모든 리소스에서 모든 액션을 허용한다는 뜻으로 사용된다. 이처럼 리소스에는 각 aws의 리소스 action은 해당하는 리소스에서 어떤 행위에 대한것인지를 특정한다.
참고로 정책문서에서 명시적으로 정의되지 않은 모든 동작은 불허된다.
그래서 Deny는 기본적으로 접근제약이 없는 리소스에 하지 말하야할 액션을 정의할떄 사용된다.
IAM을 통해 리소스에 정책을 연계하면, 해당 신분은 정책의 권한 및 제약 조건에 영향을 받게 된다. 하나의 IAM 정책을 다수의 신분에 연계할 수 있으며 하나의 신분에는 최대 10개의 정책을 연계할 수 있다.
만약에 두개의 정책이 서로 상반되는 내용으로 상충이 된다면 AWS는 불허의 기준을
따르도록 한다. 이 외에도 특정 리소스의 액션에 대해 명시적인 불허가 정의된 경우 다른 곳에서 허용을 했더라도 결과적으로는 불허가 적용된다.
루트 계정 보호를 위한 최선의 방법은 봉인을 하는 것이다.
루트 계정 봉인전에 어드민 작업을 위해서 새 계정을 생성하고 어드민에 적한한 권한을 부여한다. 보통의 경우 AdministatorAccess 정책을 정용하며, 일르 통해 다른 유저, 그룹,롤을 생성하고 각 업무 수행에 필요한 권한을 부여한다.
전 계정에 대한 예산관리 권한과 특정 S3버킷에 대한 MFA delete 권한은 오직 루트 계정만이 지닌다.
액세스 키는 프로그래밍 기법 또는 CLI 기반 접근 시 권한 인증 기능을 제공한다.
기존의 유저네임 및 패스워드 방식을 사용하지 않고도, 로컬 환경에서 액세스 키ID와 시크릿 액세스 키를 이용해 특정 리소스에 대한 접근 권한을 부여받을 수 있는 것이다.
애플리케이션 또는 실행 명령은 액세스 키 정보를 이용해 요청에 필요한 데이터를 제공할 수 있다.
활성화된 키는 언제든 해킹에 악용 될 수 있기 때문에 일정기간동안 사용되지 않은 키를 발견하면 비활성화 시키고, 조만간 사용할 계획이 없다면 삭제하는 것이 좋다.
오래된 엑세스 키는 정기적으로 삭제하는 것이 좋다. 기간을 정해두고 그 기한을 넘으면 키를 삭제하거나 다른 키로 교체하는 것이 좋다.
개별 유저를 생성할 때는 AWS 작업을 안전하고 효율적으로 수행할 수 있는 만큼만 접근권한을 부여해야 한다. 하지만 계정 관리가 복잡해질 수록 개별 유저를 일일이 관리하는 것은 불가능에 가깝기 때문에 IAM 그룹을 생성하여 업무 영역별, 조직업무 내용별로 관리를 해야한다.이렇게하면 변경사항이 생겼을때도 일괄적으로 적용을 할 수 있다.
IAM 롤은 유저 또는 서비스가 리소스에 대한 접근 요청을 할 때 이용할 수 있는 임시 신분이다. 롤을 이용해 서비스와 관련된 다양한 논리 문제를 해결 할 수 있다.
롤은 접근이 필요한 리소스의 신뢰 계체를 정의하는 방식으로 생성할 수 있으며, 신뢰 개체에는 AWS 서비스, AWS 계정, Amazon, Amazon Cognito, Facebooc, 또는 Google 로그인으로 접근구너한을 증명한 웹 식별 객체, SAML2.0자격 인증 객체등이 있다.
신뢰 개체 정의 후 사용자는 정책 문서 생성 및 부착 또는 사전정의된 IAM 정책을 할당하는 방식으로 퍼미션을 부여할 수 있다.
신뢰 개체에 새 롤이 포함돼 있는 경우 AWS는 AWS Security Token Service(STS)를 이용해 만료 기한이 정해진 보안 토큰을 발행한다.
AWS는 사용자 및 리소스 관리에 필요한 다양한 도구를 제공한다.
사용자의 접근 권한 관리를 위한 주요 도구
Cognito는 모바일 앱 및 웹 앱 개발자를 위한 회원가입 및 로그인 기능을 제공한다.
Cognito User Pool : 애플리케이션에 회원가입 및 로그인 기능을 추가할 수 있다.
Cognito identity pool : 애플리케이션 사용자에게 계정이 있는 다른 서비스에 대한 임시 접근권한을 부여할 수 있다.
AWS Directory Service를 통한 액티브 디렉토리(AD)접근 서비스 이다.
AWS VPC에 포함된 리소스를 Active Directory 를 통해 Microsoft sharePoint, .NET, SQL 서버 기반 워크로드와 같은 방식으로 관리하는것이다.
기존의 AWS Directory Service로 관리되는 Microsoft active Directory의 신분확인 및 권한부여 작업을 일관되게 수행한다.
SSO는 Salesforce, office 365등 인기있는 애플리케이션 뿐만아니라 SAML2.0을 지원하는 커스텀 앱에서도 사용할 수 있다.
KMS는 AWS서비스를 이용하기 위한 암호화 키 생성 및 관리 서비스다.
KSM는 시스템 전반에 걸쳐 사용할 수 있는 완전관리형, 중앙제어형 암호화 키라는 특징이 있으며 우리의 데이터를 보호하기 위한 암호화 키의 생성, 추적, 순회, 삭제 기능을 제공한다.
모든 종류의 키와 관련된 이벤트를 추적하는 AWS CloudTrail과 KMS를 통합해 기업의 감사 업무 및 준법 감시 업무에 사용할 수 있다.
IAM 룰만 가지고는 인증자격 정보를 안전하게 전달 할 수 없다. 인증자격이란 서드파티 서비스 및 데이터베이스 등에 접근하기 위한 자격정보를 의미한다.
패스워드와 서드파티 API키 등 애플리케이션에서 필요로 하는 시크릿 리소스를 전문적으로 다룰 수 있는 도구가 바로 AWS Secrets Manager이다.
실행 코드에 민감한 정보를 코드에 입력하는 대신에 secrets manager를 이용해 변경 사항을 정기적으로 업데이트하는 방식으로 인증 자격을 확인받을 수 있다.
웹 서버 인프라의 암호화 작업을 위해 전용의 가상 연산 기기 클러스터를 시작한다.
HSM은 Hardware security module의 약자로, 웹서버의 암호화 키 생성, 정렬, 관리 부담을 덜어주는 것이 주요 목적이다.
KMS와 유사한 기능을 제공하지만 다음과 같은 특징 및 장점이 있다.
리소스 접속을 돕는 또 다른 서비스이다. 단일 조직 내 다수의 계정에 속한 유저 또는 조직 외부 AWS 계정의 유저가 안전하게 리소스를 공유할 수 있도록 지원한다.
특정 리소스가 AWS RAM의 공유 리소스에 포함되면, 모든 인증 유저는 자체콘솔 또는 AWS CLI를 이용해 해당 리소스에 접근할 수 있게 된다.