AWS Certified Solutions Architect Associate [2] AWS IAM / CLI

CHAN LIM·2022년 7월 12일
2

IAM

Users & Groups

  • IAM : Identity and Access Management의 약자입니다.
  • IAM에서는 사용자를 생성하고 그룹에 배치하기 때문에 글로벌 서비스에 해당됩니다.
  • 루트 계정은 기본으로 생성되고, 루트 계정은 절대로 더이상 사용해서도 공유해서도 안됩니다.
  • IAM에서 사용자를 생성할 때, 사용자는 조직 내의 한 사람에 해당되고 필요하다면 사용자들을 그룹으로 묶을 수도 있습니다.
  • 그룹에는 오직 사용자만 배치할 수 있습니다.
  • 그룹에 포함되지 않은 사용자도 있을 수 있습니다.
  • 또한 한 사용자가 다수의 그룹에 속할 수도 있습니다.

Permissions

예시)

	"Version": "2022-10-17",
    "Statement": [
    	{
        	"Effect": "Allow",
            "Action": "ec2:Describe*",
            "Resource": "*"
        },
        ...
        ...
  • AWS 계정을 사용하도록 허용하고 그 허용을 위해서는 이들에게 권한을 부여해야 합니다.
  • "정책 (policies)"이라 불리는 JSON 문서를 지정할 수 있습니다.
  • 이 정책들을 사용해 사용자들의 권한을 정의할 수 있게 됩니다.
  • AWS에서는 모든 사용자에게 모든 것을 허용하지 않습니다.
  • 그래서 AWS에서는 최소 권한의 원칙을 적용합니다.
    • 즉, 사용자가 꼭 필요로 하는 것 이상의 권한을 주지 않는 것입니다.
      • 사용자가 세 개의 서비스에 접근해야 한다면 그에 대한 권한만 생성하는 것입니다.

IAM 정책

: AWS 계정을 사용하도록 허용하고 그 허용을 위해서는 이들에게 권한을 부여합니다.

IAM 정책 상속 (Policies inheritance)

  • 인라인 정책 : 사용자가 그룹에 속해 있든, 아니든 원하는 사용자에게 정책을 적용 가능하게 합니다.

IAM 정책 구조

예시)

	"Version": "2022-10-17",
    "id": "S3-Account-Permissions",
    "Statement": [
    	{
        	"Sid": "1",
        	"Effect": "Allow",
            "Principal" : {
            	"AWS": ["arn:aws:iam::4343243251454:root"]
            }
            "Action": "ec2:Describe*",
            "Resource": "*"
        },
        ...
        ...
  • Version : 2022-10-17, 정책 언어 버전입니다.

  • ID : 정책을 식별하는 ID (선택사항)

  • Statement : 하나 또는 여러 개입니다.

    • Sid : 문장 ID로 문장의 식별자이고 역시 선택 사항입니다.
    • Effect : 정책에서 effect는 문장이 특정 API에 접근하는 걸 허용할지 거부할지 대한 내용입니다.
    • Principal : 특정 정책이 적용될 사용자, 계정, 혹은 역할로 구성됩니다.
    • Action : effect에 기반해 허용 및 거부되는 API 호출의 목록입니다.
    • Resource : 적용될 action의 리소스의 목록입니다.
    • Condition : Statement가 언제 적용될지를 결정합니다. (예시엔 없습니다.)

IAM MFA 개요

  • 그룹사용자들의 정보가 침해당하지 않도록 보호하는 두 가지 방어 매커니즘

IAM - Password Policy

  • 비밀번호가 강력할수록 계정의 보안이 철저해지기 때문입니다.
  • AWS에서는 다양한 옵션을 이용해 비밀번호 정책의 생성이 가능합니다.
    • 최소 길이를 설정
    • 특정 유형의 글자 사용
    • 대문자, 소문자
    • 숫자, 특수 문자
  • IAM 사용자들의 비밀번호 변경을 허용 또는 금지할 수도 있습니다.
  • 또는 만료시켜 새 비밀번호 설정을 요구할 수도 있습니다.
  • 비밀번호의 재사용을 막을 수 있습니다.

Multi Factor Authentication, MFA

사용자들은 계정에 접근 권한이 있고 많은 작업을 할 수 있는데, 특히 관리자일 경우에는 구성을 변경하거나 리소스를 삭제하는 등의 작업을 할 수 있습니다.
따라서 적어도 루트 계정은 무슨 일이 있어도 반드시 보호해야 하며 전체 IAM 사용자들도 보호를 해야 합니다.

  • MFA : Password + 보안장치
  • 장점 : 사용자가 해킹을 당해 비밀번호가 누출된 상황이라고 해도 해커에게는 로그인을 위해 휴대전화 등 사용자 소유의 물리적 장치가 추가로 필요해질 테니 계정이 침해당하지 않는다는 점입니다.
  • 종류
    • 가상 MFA 장치
      • Google Authentication
      • Authy
    • U2F 보안 키 = 물리적 장치
      • Yubico 사의 YubiKey
        • YubiKey는 하나의 보안 키에서 여러 루트 계정과 IAM 사용자를 지원하기 때문에 하나의 키로도 충분합니다.
    • 하드웨어 키 팝 MFA 장치
      • AWS의 제3자 회사인 Gemalto의 제품
        * SurePassID

AWS에 액세스하는 법

: AWS에 액세스하는 방법은 세 가지

  • AWS Console
    • 사용자 이름 및 비밀번호와 다요소 인증으로 보호됩니다.
  • AWS CLI
    • CLI는 명령줄 인터페이스를 의미하며 AWS CLI는 명령줄 셸에서 명령어를 사용하여 AWS 서비스들과 상호작용할 수 있도록 해 주는 도구입니다.
    • 모든 명령어가 aws로 시작하기 때문에 CLI를 사용합니다.
    • CLI를 사용하면 AWS 서비스의 공용 API로 직접 액세스가 가능합니다.
    • CLI를 통해 리소스를 관리하는 스크립트를 개발해 일부 작업을 자동화할 수 있습니다.
    • CLI는 오픈 소스로, GitHub에서 모든 소스 코드를 찾으실 수 있으며 AWS 관리 콘솔 대신 사용되기도 합니다.
    • 컴퓨터에서 설정하고 액세스 키에 의해 보호됩니다.
      • 액세스 키란 자격 증명입니다. (뒤에 나옵니다.)
  • AWS SDK
    • SDK는 소프트웨어 개발 키트입니다.
    • 특정 언어로 된 라이브러리의 집합으로 프로그래밍 언어에 따라 개별 SDK가 존재합니다.
    • SDK는 터미널 내에서는 사용하는 것이 아니라 코딩을 통해 애플리케이션 내에 심어 두어야 하는 겁니다.
    • 애플리케이션 내에 자체적으로 AWS SDK가 있는 것입니다.
    • 다양한 프로그래밍 언어를 지원합니다.
    • AWS로부터 애플리케이션 코드 내에서 API를 호출하고자 할 때 사용되는 방식입니다.

CLI와 SDK, 두 방식 모두 완전히 동일한 액세스 키로 보호가 됩니다.

  • Access Keys
    • 관리 콘솔을 사용해서 생성할 수 있습니다.
    • 사용자들이 자신들의 액세스 키를 직접 관리합니다.
    • 사용자의 측면에서 액세스 키는 비밀번호와 마찬가지로 암호와 같습니다.
      • 그러므로 자신만의 액세스 키를 생성하게 되면 동료와 공유해서는 안 됩니다.
      • 액세스 키 ID = username
      • Secret 액세스 키 = password

AWS 역할 (Roles)

AWS 서비스 몇 가지는 우리의 계정에서 실행해야 합니다.
이를 위해서는 사용자와 마찬가지로 어떤 권한이 필요합니다.
따라서 AWS 서비스에 권한을 부여해야 합니다.
그러기 위해서는 IAM 역할이라는 것을 만들어야 합니다.

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

예)
EC2 인스턴스를 만든다면 EC2 인스턴스는 가상 서버입니다. EC2 인스턴스는 AWS에서 어떤 작업을 수행하려고 할 수 있습니다. 그러기 위해서는 EC2 인스턴스에 권한을 부여해야 합니다. 이를 위해 IAM 역할을 만들어 이들을 하나의 개체로 만듭니다. EC2 인스턴스가 AWS에 있는 어떤 정보에 접근하려고 할 때 IAM 역할을 사용하게 될 것입니다.
만약 IAM 역할의 권한을 올바르게 부여한 경우 하려고 하는 호출에 접근하게 될 것입니다.


IAM 보안 도구 (Security Tools)

IAM 자격 증명 보고서

  • 계정 수준
  • 보고서는 계정에 있는 사용자와 다양한 자격 증명의 상태를 포함합니다.

IAM 액세스 관리자

  • 사용자 수준
  • 사용자에게 부여된 서비스의 권한과 해당 서비스에 마지막으로 액세스한 시간을 보입니다.
  • 최소권한의 원칙에 따랐을 때 매우 도움 되는 정보입니다.
  • 해당 도구를 사용하여 어떤 권한이 사용되지 않는지 볼 수 있고 따라서 사용자의 권한을 줄여 최소권한의 원칙을 지킬 수 있습니다

IAM 가이드라인 & 최선의 선택

  • 루트 계정은 AWS 계정을 설정할 때를 제외하고 사용하지 않습니다.
  • 하나의 AWS 사용자는 한 명의 실제 사용자를 의미합니다
  • 사용자를 그룹에 넣어 해당 그룹에 권한을 부여할 수 있습니다.
    따라서 그룹 수준에서 보안을 관리할 수 있습니다
  • 다요소 인증(MFA)을 사용합니다.
  • AWS 서비스에 권한을 부여할 때마다 역할을 만들고 사용해야 합니다.
  • CLI나 SDK를 사용할 경우 반드시 액세스 키를 만들어야 합니다.
  • 계정의 권한을 감사할 때는 IAM 자격 증명 보고서와 IAM 액세스 분석기를 사용할 수 있습니다.
  • 마지막으로 절대로 IAM 사용자와 액세스 키를 공유하지 마세요. 절대,

Summary

  • 사용자
    • 여러분의 회사 내 실제 사용자와 IAM 사용자가 매핑됩니다.
    • 사용자는 AWS 콘솔에 대한 비밀번호를 가질 것이고 모범 사례는 사용자를 그룹에 두는 것입니다.
  • 그룹
    • 그룹은 사용자만을 포함할 수 있습니다.
    • 다른 그룹을 포함할 수 없고 사용자나 그룹에 권한을 부여합니다.
  • 정책
    • JSON 문서입니다.
    • 사용자나 그룹이 할 수 있는 권한을 알려주는 문서입니다
  • 역할
    • 다음 섹션에서 다룰 EC2 인스턴스를 생성합니다.
    • AWS 서비스가 다른 AWS 서비스에 무언가를 하게 하는 어떤 권한을 줍니다.
  • 보안
    • MFA + Password Policy
  • 액세스 키
    • 코딩을 하기 위해 CLI 또는 명령줄 인터페이스를 이용하거나 SDK를 이용하여 AWS에 액세스할 때 만들어야 합니다.
    • 액세스 키 ID와 비밀번호인 액세스 키

  • IAM 대시보드를 감사하고 싶다면 자격 증명 보고서를 만들어 사용자 관련 정보를 볼 수 있고
  • IAM의 특정 사용자를 감사하고 싶다면 IAM 액세스 관리자를 사용하여 사용자의 최근 권한의 사용 내역을 확인할 수 있습니다

From
AWS Certified Solutions Architect Associate 시험합격!

profile
클라우드, 데이터, DevOps 엔지니어 지향 || 글보단 사진 지향

0개의 댓글