AWS

[AWS] aws 강의 섹션 4-1 (IAM 사용자 및 정책, 방어 정책)

대기업 가고 싶은 공돌이 2024. 9. 12. 02:00

IAM

  • IAM은 Identity and Access Management의 약자로
    사용자를 생성하고 그룹에 배치하기 때문에 글로벌 서비스에 해당한다. 

루트 사용자

루트 사용자란 회원 가입시 자동으로 생성되는 계정으로 모든 AWS 권한을 갖고 있는 계정이다.

루트 사용자는 모든 권한을 갖고있기 때문에 특별히 취급에 주의해야 하며, 

계정 설정을 변경하는 등 관리 목적으로만 사용하는 것이 바람직하다.

 

IAM 사용자란

루트 사용자는 탈취 당할 시 치명적인 문제를 야기할 수 있기에, 

서비스 관리용 계정이 따로 또 필요하다.

 

이 계정을 IAM 사용자라고 부른다.

IAM 사용자는 IAM을 통해 생성한 사용자로 루트 사용자로부터 권한을 부여받은 서비스만 관리가 가능하다.

 

예를 들어,

  1. 개발 도구를 사용할 수 있는 개발팀 IAM 계정
  2. 과금 정보만 확인 가능한 회계/감사팀 IAM 계정 등,,

그룹에는 오직 사용자만 배치가 가능하며 다른 그룹은 배치가 불가능하다. 

 

  • 또한 한 사용자가 다수의 그룹에 속할 수도 있다.
  • 그룹에도 권한을 부여하여, 그룹 단위로 사용자를 관리할 수도 있다.
  • 아무 그룹에도 속하지 않은 사용자가 존재할 수도 있는데, 이는 권장하는 방식이 아니다.

권한을 부여하는 이유

신규 사용자에게 모든 권한을 부여하면, 여러 보안 문제 및 과금 문제가 발생할 수 있다.

이러한 문제를 방지하기 위해, 사용자들에게 그룹 단위로 또는, 사용자 단위로 권한을 부여해야한다.

 

권한 부여 방식은 사용자 또는 그룹에게 정책, 또는 IAM 정책이라 불리는 JSON 파일을 할당하는 것이다. 

어떤 서비스를 허용할 것인지가 명시된 파일을 할당하여 권한을 제어할 수 있다.

 

IAM 사용자 만들어보기

이름을 입력해주고 콘솔에 대한 권한을 설정해주자.

 

IAM 사용자를 클릭해주고, 지정 암호를 만들어주자 

이후 그룹 이름과 해당 그룹에 부여해줄 권한 목록을 아래에서 선택한 후 그룹에 사용자를 할당하자. 

태그는 선택사항이지만 나중에 태그를 통해 그룹 관리가 쉬워지기 때문에 설정해주자. 

 

키 값을 Department로 값을 development로 잡았다. 

 

IAM 유저로 로그인하기

우선 IAM 대시보드에서 별칭을 생성해줘야 한다.

 

이후 해당 칸에 별칭을 입력해주고

이름과 비밀번호를 입력해주면 우리가 생성한 IAM 유저로 로그인 할 수 있다.

 

물론 해당 아이디에서는 아까 부여했던 권한만이 사용가능하다. 

 

IAM 정책의 구조

이제 iam 정책의 구조에 대해 살펴보자

  1. Version: 생성한 정책의 버전이다.
  2. id: 정책을 식별하는 id로 선택 사항이다.
  3. statement: 문장은 하나이거나 여러 개일 수 있다.
    문장은 여러 개의 구성요소로 나뉜다.
    1. Sid: 문장의 식별자이다. 선택 사항이다.
    2. Effect: 특정 API에 대해 접근하는 걸 허용하는지 거부하는지에 대한 내용이다. Allow와 Deny가 있다.
      특정 API 목록은 Action에 나와있다.
    3. Principal: 특정 정책이 적용될 사용자, 계정, 혹은 그룹을 나타낸다.
      위의 예시는 aws 루트 계정에 적용하는 예시다.
    4. Action: effect에 기반해 허용 및 거부되는 API의 목록이다.
    5. Resource: 적용될 action의 리소스 목록으로 예시엔 버켓이지만 다른 것이 적용될 수도 있다.
  4. Condition: statement가 언제 적용될지를 결정한다. 선택사항이다.

권한 살펴보기

aws엔 부여할 수 있는 권한이 여러 개 존재한다.

몇 개만 살펴보도록 하자.

1. AdministratorAccess 권한

모든 것에 대해 관리자 모드로 액세스 할 수 있는 권한을 부여한다. 말 그대로 관리자다.

 

JSON으로 살펴보자

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        }
    ]
}

 

Effect는 allow

action과 resource는 *인 것을 확인할 수 있다.

모든 API와 모든 resource에 접근 가능하다는 의미이니

관리자 권한과 동일하다는 것을 알 수 있다.

 

2. IAMReadOnlyAccess

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:GenerateCredentialReport",
                "iam:GenerateServiceLastAccessedDetails",
                "iam:Get*",
                "iam:List*",
                "iam:SimulateCustomPolicy",
                "iam:SimulatePrincipalPolicy"
            ],
            "Resource": "*"
        }
    ]
}

 

Action에 허용되는 API 호출의 목록이 보이는데 

중간의 GET*은 get으로 시작하는 모든 api를 의미한다.

LIST도 마찬가지다. 

get은 주로 사용자의 정보를 조회하는 역할을 하고, list는 사용자의 목록을 조회하는 역할을 하는 API다

그 외에 버그 리포트, 시뮬레이션 등의 권한이 부여된 것을 확인할 수 있다.

 

Resource는 *이므로 모든 것에 대한 조회 기능을 허용한다는 권한임을 확인할 수 있따.

 

맞춤형 정책 생성하기

create policy에 들어가

 

편집가를 킨 다음,

어떤 액션을 허용할 것인지 입력하면 된다.

 

방어 메커니즘

이제 사용자와 그룹을 만들었으니, 이를 보호하기 위한 방안을 마련해야 한다.

 

이를 위한 두 가지 메커니즘이 있다.

 

1. Password Policy

  • 비밀번호가 강력할 수록 보안은 강력해진다.
  • aws에서는 다양한 옵션으로 비밀번호 정책을 설정할 수 있다.
    1. 최소 비밀번호 길이 설정, 특정 문자 유형 강제
    2. IAM 사용자는 비밀번호를 변경하지 못 하도록 할 수 있다.
    3. 일정 시간 후에 비밀번호가 만료되도록 설정할 수 있다.
    4. 비밀번호 재사용을 방지할 수도 있다.

2. 다중 인증 - MFA (Multi Factor Authentication)

  • MFA를 사용할 것을 강력히 권장한다.
  • Password에 추가로 MFA란 보안장치를 사용하는 것이다.
  • 비밀번호를 해킹당해도 유저의 핸드폰이나 다른 디바이스의 MFA를 알아내지 못 하므로 정보가 손상될 우려가 없다.

MFA의 종류

  1. Virtual MFA device 
    1. Google Authenticator
    2. Authy 등이 있다.
      하나의 장치(휴대폰)에서 여러 토큰을 지원하기 때문에,
      루트 계정, IAM 사용자 , 다른 계정 등을 모두 한 장치(휴대폰)에서 관리할 수 있다.
  2. Universal 2nd Factor(U2F) Security Key 
    • 물리적인 장치다.
    • 단일 보안 키를 사용해 여러 루트 및 IAM 사용자를 관리한다.

    3. Hardware Key Fob MFA Device

  • 하드웨어 보안 토큰 장치

     4. Hardware Key Fob MFA Device for AWS GovCloud

  • 마찬가지로 물리적인 보안 장치다.