Featured image of post 02. IAM 및 AWS CLI

02. IAM 및 AWS CLI

IAM으로 사용자와 서비스 권한 관리하기

AWS Certified Solutions Architect Associate - C03을 준비하며 작성한 글입니다.

 

01. IAM 소개: 사용자, 그룹, 정책

IAM: 사용자 & 그룹

  • IAM = Identity and Access management
  • 사용자를 생성하고 그룹에 배치 → Global Service
  • 루트 계정(Root Account): 기본 생성, 계정을 생성할 때만 사용되어야 합니다. → 대신 사용자를 생성해야 합니다.
    • 루트 계정은 계정에 대한 모든 권한을 가지고 있기 때문에, 보안 상의 이유로 별도의 관리자 계정(User)을 만드는 것이 좋습니다.
  • 사용자(Users): 조직 내의 한 사람에 해당하며 그룹으로 묶을 수도 있습니다.
  • 그룹(Groups): 사용자만 배치할 수 있으며, 다른 그룹을 포함시킬 수 없습니다.
    • 그룹에 포함되지 않은 사용자도 있을 수 있습니다.
    • 한 사용자가 여러 그룹에 속할 수 있습니다.

💡 사용자와 그룹을 생성하는 이유는 뭘까요?
이들이 AWS 계정을 사용하도록 허용하기 위함입니다. 그리고 허용을 위해서는 이들에게 권한을 부여해야 합니다.

 

IAM: 권한

  • 사용자 또는 그룹에게 IAM 정책이라고 불리는 JSON 문서를 지정할 수 있습니다.

    • 특정 사용자, 혹은 특정 그룹에 속한 모든 사용자들이 어떤 작업에 권한을 가지고 있는지를 설명해 놓은 문서
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "ec2:Describe*",
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": "elasticloadbalancing:Describe*",
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "cloudwatch:ListMetrics",
                    "cloudwatch:GetMetricStatistics",
                    "cloudwatch:Describe*"
                ],
                "Resource": "*"
            },
        ]
    }
    
  • 이 정책들을 사용해 사용자들의 권한을 정의할 수 있게 됩니다.

  • AWS에서는 모든 사용자에게 모든 것을 허용하지 않습니다. → 최소 권한의 원칙을 적용

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

 

IAM Dashboard → Users → Add users

Custom Password를 위한 설정

“admin” 그룹 생성

식별용 태그 생성

사용자 로그인을 위한 Account Alias 설정

Account Alias, IAM Username, Password로 로그인

 

02. IAM 정책

IAM 정책 상속

  • 그룹 레벨 정책: 그룹의 모든 구성원에게 적용, 구성원 모두 권한을 얻으며 정책 상속 가능
  • 인라인 정책: 그룹에 소속 여부와 관계없이 원하는 사용자에게 적용 가능
  • 여러 그룹에 속한 경우, 여러 정책을 함께 적용받을 수도 있습니다.

 

IAM 정책의 구조

  • Version: 보통은 “2012-10-17”로 정책 언어 버전입니다.
  • Id: 정책을 식별하는 ID (선택)
  • Statement: 1개 이상으로 구성 (필수)
    • Sid: Statement ID, Statement의 식별자 (선택)
    • Effect: Statement의 특정 API 접근 허용 여부, [Allow || Deny]
    • Principal: 특정 정책이 적용될 사용자, 계정 또는 역할(Roles)
    • Action: Effect에 기반해서 허용 및 거부되는 API 호출의 목록
    • Resource: 적용될 Action의 리소스 목록
    • Condition: Statement가 언제 적용될지 결정 (선택)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
{
    "Version": "2012-10-17",
    "Id": "S3-Account-Permissions",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": ["arn:aws:iam::123456789012:root"]
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": ["arn:aws:s3:::mybucket/*"]
        }
    ]
}

 

IAM Dashboard → Policies → AdministratorAccess

AdministratorAccess의 IAM 정책

 

03. IAM MFA

IAM - 비밀번호 정책

  • 강력한 비밀번호 = 철저한 계정 보안
  • AWS의 비밀번호 정책
    • 최소 길이
    • 특수 문자형(specific character types) 요구
      • 영문 대소문자
      • 숫자
      • 특수문자(non-alphanumeric)
    • 사용자 비밀번호 변경 허용 / 금지 설정
    • 비밀번호 만료 기간 → 재설정 요구 (password expiration)
    • 비밀번호 재사용 방지

 

Multi Factor Authentication - MFA

  • AWS 필수 권장사항
  • MFA = 비밀번호 + 보안 장치
  • 비밀번호가 노출된 상황에서도 관리자 소유의 물리적 장치가 추가로 필요하기 때문에 계정이 침해당하지 않습니다.
  • AWS의 MFA 장치 옵션
    • 가상 MFA 장치(Virtual MFA Device): Google Authenticator(phone only), Authy(multi-device) 등
    • 보안 키(U2F, Universal 2nd Factor Security Key): USB 형태의 물리적 장치(FIDO)
    • 하드웨어 키 팝 MFA 장치(Hardware Key Fob MFA Device): 일회용 비밀번호 생성기(TOTP)

 

IAM Dashboard → Account Settings → Password policy → Edit

Root Account MFA 설정

 

04. AWS 액세스 키 , CLI 및 SDK

AWS 접근

  • AWS 접근 방법
    • AWS Management Console: 비밀번호 + MFA
    • AWS Command Line Interface(CLI): Access Keys
    • AWS Software Developer Kit(SDK): Access Keys
  • 액세스 키는 관리 콘솔을 사용해서 생성할 수 있으며, 사용자들이 직접 관리합니다.
  • 액세스 키는 비밀번호와 마찬가지로, 공유하면 안됩니다.
    • Access Key ID: AKIASK4E37PV4983d6C (예시)
    • Secret Access Key: AZPN3zojWozWCndlijhB0Unh8239albzbzO5fqqkZq (예시)

 

AWS CLI

  • 명령줄 Shell에서 명령어를 사용하여 AWS 서비스들과 상호작용할 수 있도록 해주는 도구
  • CLI를 사용하면 AWS 서비스의 공용 API로 직접 액세스할 수 있습니다.
  • CLI를 통해 리소스를 관리하는 스크립트를 개발해 일부 작업을 자동화할 수 있습니다.
  • https://github.com/aws/aws-cli

 

AWS SDK

  • 소프트웨어 개발 키트
  • 라이브러리 집합 → 프로그래밍 언어에 따라 개별 SDK 존재
  • AWS 서비스나 API에 프로그래밍을 위한 액세스가 가능하도록 해줍니다.
  • 코딩으로 애플리케이션 내에 작성
  • 프로그래밍 언어, 모바일 SDK, IoT 장치 SDK 등 지원

 

AWS CLI 설치: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

설치 완료

보안 자격 증명 생성에 루트 계정을 사용하지 마세요.

IAM Dashboard → Users → User → Security credentials → Access keys → Create access key

Access Key 적용 aws configure

 

05. AWS 클라우드쉘

  • CloudShell은 특정 리전에서만 사용이 가능합니다.
  • CloudShell은 전체 저장소를 갖고 있습니다.
  • 파일을 업로드, 다운로드할 수 있는 옵션이 있습니다. (CloudShell → Actions)

 

터미널(CLI) 대안

 

06. AWS 서비스에 대한 IAM Role (Service Role)

  • AWS 서비스는 사용자를 대신하여 다른 서비스의 리소스로 액세스할 수 있어야 합니다.
  • 이를 위해서는 AWS 서비스에 권한을 부여해야 합니다. → IAM Roles
    • EC2 Instance Roles
    • Lambda Function Roles
    • Roles for CloudFormation

 

IAM Dashboard → Roles → Create role

서비스에 정책 및 권한 부여

Demo Role for EC2 Instance 생성

 

07. IAM 보안 도구

  • IAM 자격 증명 보고서(IAM Credential Report, 계정 수준): 계정에 있는 사용자와 다양한 자격 증명의 상태를 포함
  • IAM 액세스 관리자(IAM Access Advisor, 사용자 수준): 사용자에게 부여된 서비스의 권한과 해당 서비스에 마지막으로 액세스한 시간을 포함
  • 최소 권한의 법칙: 위의 도구들을 사용하여 어떤 권한이 사용되지 않는지 볼 수 있고 따라서 사용자의 권한을 줄여 원칙을 지킬 수 있습니다.

 

IAM Dashboard → Credential report → Download credentials report

Credentials Report

IAM Dashboard → Users → User → Access Advisor

 

08. IAM 모범 사례

IAM 가이드라인

  • 루트 계정은 AWS 계정을 설정할 때를 제외하고는 사용하면 안됩니다.
  • 새로운 사람이 AWS를 이용하고자 한다면 사용자를 추가해야 합니다.
    • 1 AWS 사용자 = 1 실제 사용자
  • 사용자를 그룹에 넣어 해당 그룹에 권한을 부여하면 그룹 수준에서 보안을 관리할 수 있습니다.
  • 비밀번호 정책은 강력하게 설정해야 합니다.
  • MFA를 사용할 수 있다면 계정을 안전하게 보호할 수 있습니다.
  • AWS 서비스에 권한을 부여할 때마다 역할을 추가해야 합니다.
  • AWS를 프로그래밍 할 경우(CLI 또는 SDK를 사용하는 경우) Access Key를 생성해야 합니다.
  • 계정의 권한을 감사할 때는 IAM 자격 증명 보고서와 IAM 액세스 관리자를 사용할 수 있습니다.
  • 절대로 IAM 사용자와 액세스 키를 공유하지 마세요.

 

09. IAM 요약

  • Users: 회사 내 실제 사용자와 IAM 사용자가 매핑됩니다.
  • Groups: 그룹은 사용자만 포함할 수 있습니다.
  • Policies: 사용자나 그룹에 권한을 부여합니다. IAM 정책은 JSON 문서로, 사용자나 그룹이 할 수 있는 권한을 알려주는 문서입니다.
  • Roles: AWS 서비스가 다른 AWS 서비스에 무언가를 하게 하는 권한을 주려고 할 때, IAM 역할을 만들어야 합니다.
  • Security: MFA + 강력한 비밀번호 정책
  • Access Keys: CLI 또는 SDK를 이용하여 AWS에 접근한다면 반드시 액세스 키를 만들어야 합니다.
  • Audit: IAM 자격 증명 보고서 & IAM 액세스 관리자
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus