Cloud/AWS

AWS IAM

Debin 2023. 6. 18.
반응형

IAM 

Identity And Access Management의 약어다.

AWS 계정과 관련된 권한을 제어하고, 사용자를 관리하는 기능을 제공하는 보안 서비스이며, 

AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스다.

 

사용자를 생성하고 배치하므로 글로벌 서비스에 해당한다.

처음 계정을 생성하면 루트 사용자가 배치되고 이를 기본으로 사용한다.

루트 계정은 계정(사용자)을 생성할 때만 사용해야 한다. 루트 계정을 직접적으로 사용하면 절대 안된다.

그룹과 사용자

IAM으로 사용자를 생성하고, 하나의 사용자는 조직 내의 한 사람에 해당한다.

다양한 사용자들을 그룹으로 묶으며, 그룹에 포함되지 않는 사용자도 존재한다.

한명의 사용자는 여러 그룹에 포함될 수 있다. 그룹은 그룹에 포함될 수 없다.

 

사용자와 그룹을 생성하는 이유는 모든 사용자에게 모든 권한을 허용하지 않고, 보안 문제를 막기 위함이다.

쉽게 말해, 최소 권한의 원칙을 지키기 위해서다.

사용자와 그룹에게 꼭 필요한 권한만 부여한다.

 

즉 사용자가 꼭 필요로 하는 것 이상의 권한을 주지 않는다.

그룹에 배치된 사용자는 그룹에 있는 권한을 승계 받는다.

그룹을 삭제하면 그룹에 포함되어있던 유저들의 그룹으로 인해 승계된 정책도 모두 삭제된다.

IAM 정책 개념

그룹의 구성원들은 그룹의 정책을 적용받는다.

인라인 정책이라는 원하는 사용자에게 개별적으로 정책을 적용시키는 방법도 존재한다.

한 사람은 여러 개의 그룹에 들어갈 수 있고 다양한 그룹의 정책을 적용받을 수 있다.

정책은 JSON으로 작성한다. 사용자가 정책을 적용받으면 그 정책에 관련된 AWS 서비스 사용 권한이 생긴다.

 

정책의 예시는 다음과 같다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:GenerateCredentialReport",
                "iam:GenerateServiceLastAccessedDetails",
                "iam:Get*",
                "iam:List*",
                "iam:SimulateCustomPolicy",
                "iam:SimulatePrincipalPolicy"
            ],
            "Resource": "*"
        }
    ]
}
  • Version: 정책 언어 버전
  • Statement: 정책 구성 요소의 컨테이너
    • Sid: (선택 사항) - 선택 설명문 ID를 포함하여 설명문들을 구분한다.
    • Effect: Allow 또는 Deny를 사용하여 정책에서 액세스를 허용하는지 또는 거부하는지 여부를 설명한다.
    • Principal(일부 상황에서만 필요): 리소스 기반 정책을 생성하는 경우 액세스를 허용하거나 거부할 계정, 사용자, 역할 또는 페더레이션 사용자를 표시한다. 사용자 또는 역할에 연결할 IAM 권한 정책을 생성하면 이 요소를 포함할 수 없다.
      보안 주체는 사용자 또는 역할을 의미한다.
    • Action: 정책이 허용하거나 거부하는 작업 목록을 포함한다.
    • Resource(일부 상황에서만 필요): IAM 권한 정책을 생성하는 경우 작업이 적용되는 리소스 목록을 지정해야 한다.
      리소스 기반 정책을 생성하는 경우 이 요소는 선택 사항이다.
      이 요소를 포함하지 않으면 작업이 적용되는 리소스는 정책이 연결된 리소스다.
    • Condition(선택 사항) - 정책에서 권한을 부여하는 상황을 지정한다.
 

정책과 정책을 합쳐서 새로운 정책을 만드는 것도 가능하다. 직접 선택하거나 JSON으로 작성해야함

IAM MFA

보안 관련 파트는 크게 2가지가 있다.

비밀번호 정책 정의

  • 당연한 말이지만 비밀번호가 강력할수록 계정의 보안도 올라간다.
  • 비밀번호 정책을 정의하면서 아래와 같은 것이 가능하다.
  • 비밀번호 최소 길이 설정, 특정 유형의 글자 사용 요구, 비밀번호 변경 금지, 비밀번호가 일정시간이 지나면 반드시 변경하도록 설정, 비밀번호의 재사용 불가능하게 설정.

MFA (Multi Factor Authentication)

  • MFA가 반드시 사용하는 것을 권장한다. 루트 계정 뿐만 아니라, 다른 사용자도.

AWS에는 다음과 같은 MFA 장치가 있다.

Virtual MFA device

  • Google Authenticator (Phone Only, 필자가 사용하는 것)
  • Authy (Multi - Device): 하나의 장치에서 여러 토큰을 지원한다.
  • 가상 MFA 장치에 원하는 수만큼의 계정 및 사용자 등록이 가능하다.

Universal 2nd Factor(U2F) Security Key

  • U2F 보안 키, 물리적 장치다.
  • Yubico 사의 YubiKey가 있고, 제 3자 회사다.
  • 휴대가 편리하며, YubiKey는 하나의 보안 키에서 여러 루트 계정과 IAM 사용자를 지원하므로 1개의 키로 충분하다.

Hardware Key Fob MFA Device

  • 마찬가지로 제 3자 회사인 Gemalto의 작품이며 물리적 장치다.

Hardware Key Fob MFA Device for AWS GovCloud(US)

  • 미국 정부의 클라우드인 AWS GovCloud를 사용하기 위한 특수한 키 팝이다.
  • SurePassID라는 제 3자 회사가 이를 제공한다.

AWS 접근 방법

aws에 접근하는 방법은 크게 3가지가 있다.

  1. Password + MFA를 사용해 AWS 관리 콘솔에 접근하는 것. (웹)
  2. AWS CLI를 사용. 액세스 키로 보호되며, 액세스 키는 자격 증명을 위한 키이다. 이를 통해 터미널에서의 aws 접근이 가능하다.
  3. AWS 소프트웨어 개발자 키트인 SDK. 애플리케이션 코드에서 api를 호출할 때 사용하며, 코딩을 통해서만 사용할 수 있다.
    SDK는 특정 언어로 작성한 라이브러리의 집합이다.

2,3번은 액세스 키를 사용해 접근한다.

액세스 키를 생성하면 액세스 키 id와 시크릿 액세스 키가 생긴다.

액세스 키 id는 유저 이름, 시크릿 액세스 키는 비밀번호와 동일하다.

IAM Role

IAM Role은 사용자와 같지만 실제 사람이 사용하도록 만들어진 것이 아니고, AWS 서비스에 의해 사용되도록 만들어졌다.

예를 들어 ec2가 AWS에서 어떤 작업을 하려고 한다면, EC2에게 권한을 부여해야 한다.

여기서 사용되는 것이 IAM Role다. IAM Role을 만들어서 이들을 묶어버리고 어떤 작업을 할 수 있게 권한을 부여한다.

 

Ec2 Role, Lambda Role, Roles For CloudFormation 등이 있다.

IAM Security Tool

크게 2가지가 있다.

IAM Credentials Report(Account Level) 

자격 증명 보고서라고 하며, 계정 수준에서 가능하다.

  • 보고서는 계정에 있는 모든 사용자와 다양한 자격 증명의 상태를 포함한다.
  • 보안 인증 보고서에는 이 계정의 모든 IAM 사용자와 해당 사용자의 다양한 보안 인증 상태가 나열된다.
  • 보고서가 생성되면 최대 4시간 동안 저장된다.
  • csv로 온갖 정보를 보여준다. 사용자가 언제 생성 됐는지, 언제 마지막 접근인지 등

IAM Access Advisor(user-level):

IAM 접근 관리자라고 하며, 사용자 수준에서 가능하다.

  • 사용자에게 부여된 서비스 권한과 해당 서비스에 마지막으로 접근한 액세스 시간을 보여준다.
  • 최소 권한의 원칙을 따를 때 도움이 된다.
  • 이 도구를 사용해 어떤 권한이 사용되지 않는 지 확인할 수 있다.
  • 이를 통해 권한을 쳐내 최소 권한의 원칙을 지킬 수 있다.
  • 사용자에서 액세스 관리자로 들어감. 최근 4시간의 활동 내역이 전부 보임.

모범 사례와 가이드라인

  • 루트 계정은 AWS 계정을 설정할 때 말고는 사용하지 말자.
  • 하나의 AWS 사용자는 한 명의 실제 사용자를 의미한다.
  • 사용자를 그룹에 넣어 권한을 부여할 수 있다.
  • 비밀번호 정책은 빡세게 정하자.
  • MFA는 쓰는게 해커로부터 보호받을 수 있는 최고의 방법이다.
  • AWS 서비스에 권한을 부여하려면 Role을 만들어야 한다.
  • CLI나 SDK를 사용하려면 반드시 액세스 키를 만들어 사용해야 한다.
  • 계정의 권한을 감사할 때는 자격 증명 보고서와 접근 관리자를 사용한다.
  • 절대로 IAM 사용자와 액세스 키를 공유하지 말라.
  • 사용자를 그룹에 넣는 것이 바람직함. 그룹은 다른 그룹을 포함할 수 없다.

 

이상으로 포스팅을 마칩니다. 감사합니다.

참고자료

당신이 지금 알아야할 AWS(이영호)

https://www.udemy.com/course/best-aws-certified-cloud/

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/access_policies.html

 

반응형

댓글