IAM - Identity and Access Management (global)

JINWOO OH·2023년 6월 3일

SAA

목록 보기
2/19
post-thumbnail
  • User를 생성하고 Group에 배치하는 Global service
  • Root account created by default, shouldn’t be used or shared
  • Group에는 오로지 User만 포함시킬 수 있다 (Group은 포함 시킬 수 없다)
  • User는 여러 Group에 포함 될 수 있다
  • Root 계정은 정말 필요한 경우에만 사용한다

IAM: Permissions

  • User와 Group은 IAM 정책이라 불리는 JSON documents를 할당 할 수 있다
  • AWS에서는 최소 권한의 원칙을 적용한다
{
    "version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow", // 사람들에게
            "Action": "ec2:Describe*", // ec2사용권한
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "elasticloadbalancing:Describe*",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:ListMetrics",
                "cloudwatch:GetMetricsStatistics",
                "cloudwatch:Describe*"
            ],
            "Resource": "*"
        }
    ]
}

CSV file (comma-separated values)

  • 사용자들의 자격 증명 정보가 담겨있는 파일
  • 암호를 자동생성으로 해뒀다면 필히 다운받아야 한다

IAM Policies

  • Group에 상속하여 정책을 부여할 수 있다
  • In-Line policie를 통해 group에 속하지 않은 사용자도 정책을 부여 할 수 있다

IAM Policies Structure

{
    "Version": "2012-10-17",
    "Id": "S3-Account-Permissions", 
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": ["arn:aws:iam::123456789012:root"]
            },
            "Action": [
                "s3:GetObject",
                "s3:SetObject"
            ],
            "Resource": ["arn:aws:s3::mybucket/*"]
        }
    ]
}

{{Consist of}}

“Version” - policy language version

“Id” - an identifier for the policy (optional)

“Statement” - one or more individual statements (required)

{{Statements consist of}}

“Sid” - an identifier for the statement (optional)

“Effect” - 특정 API에 접근하는 것을 허용할지 거부할지에 대한 내용 (Allow, Deny)

“Principal” - 특정 정책이 적용될 사용자, 계정, 역할

“Action” - Effect에 기반해 허용, 거부되는 API 호출의 목록

“Resource” - 적용될 action의 리소스 목록

“Condition” - Statement가 언제 적용될지를 결정 (optional)

IAM MFA - Multi Factor Authentication

  • 두가지 방어 메커니즘 중 하나
    • 나머지 하나는 비밀번호
  • 루트 계정과 전체 IAM 계정을 보호 할 수 있는 방법
  • 해킹을 다애 비밀번호가 노출되어도 계정을 지킬 수 있음

MFA devices options is AWS

  • Virtual MFA device
    • Google Authenticator (only one)
    • Authy (multi-user)
  • Universal 2nd Factor(U2F) Security Key
    • Yubikey
  • Hardware Key Fob MFA device
  • Hardware Key Fob MFA device for AWS GovCloud

How can users access AWS?

  • AWS management Console
    • 비밀번호와 MFA에 의해 관리
  • AWS Command Line Interface (CLI)
    • Access keys에 의해 관리
  • AWS Software Developer kit (SDK)
    • Access keys에 의해 관리

Access Keys

  • CLI에 의해 AWS API를 이용할 때 사용
  • Access Key ID == username
  • Secret Access Key == password
  • 생성 시 주의할 점은 루트 사용자가 아닌 IAM 사용자에서 생성하자
    • 루트 생성자는 어지간 하면 건들지 않는 것이 좋다..?

AWS SDK

  • 특정 언어로 된 라이브러리 집합
  • 프로그래밍 언어에 따라 개별 SDK가 존재
  • 터미널에서 사용하는 것이 아닌 코딩을 통해 어플리케이션 내에 심어 두는 것
    • 어플리케이션 내에 자체적으로 AWS SDK가 존재하게 되는 것
    • 예시로 AWS CLI는 Boto라는 Python용 AWS SDK에 구축 되어 있다

Access Key를 이용해서 AWS CLI를 이용하는 방법

  • IAM 계정에서 Access Key 생성
  • 생성된 .csv 파일을 확인
  • CLI의 권한은 IAM 콘솔에서의 권한과 같다
**## aws configure 명령을 통해 Access**
aws configure
AWS Access Key ID [****************4QC7]: AKIA5QZOV3LPARQQM5U4
AWS Secret Access Key [****************S37Z]: {{.csv파일에서 확인}}
Default region name [ap-northeast-2]: ap-northeast-2 # 가장 가까운 지역
Default output format [json]: # 지금은 그냥 enter
**## aws iam list-users 명령을 통해 user list를 조회**
{
    "Users": [
        {
            "Path": "/",
            "UserName": "admin",
            "UserId": "AIDA5QZOV3LPA3NKSVJIK",
            "Arn": "arn:aws:iam::929421449950:user/admin",
            "CreateDate": "2023-01-02T06:23:12+00:00"
        },
        {
            "Path": "/",
            "UserName": "sakin",
            "UserId": "AIDA5QZOV3LPDGRVXIAHQ",
            "Arn": "arn:aws:iam::929421449950:user/sakin",
            "CreateDate": "2023-05-27T00:37:57+00:00",
            "PasswordLastUsed": "2023-05-27T00:49:06+00:00"
        }
    ]
}

AWS CloudShell

  • AWS에서 사용 할 수 있는 무료 터미널
  • CloudShell에는 전체 저장소가 존재한다
  • 특정 Region에서만 가능하다

IAM Role

  • AWS Service에 권한을 부여하는 것
  • 쉽게 말하면 사람이 사용하는 권한이 아닌 AWS Service에 의해 사용되도록 하는 권한

IAM Security Tools

  • IAM Credentials Report (account-level)
    • 계정에 있는 사용자와 다양한 자격 증명의 상태를 포함
  • IAM Access Advisor (user-level)
    • 사용자에게 부여된 서비스의 권한과 해당 서비스에 마지막으로 액세스한 시간을 나타냄
    • 권한을 설정할 때 사용되지 않는 권한이 있다면 줄일 수 있음

IAM Guidelines & Best Practices

  • 특별한 경우가 아닌 이상 루트 계정을 사용하기 않기
  • One physical user = One AWS user
  • 사용자를 그룹에 넣어 해당 그룹에 권한을 부여할 수 있다 → 그룹 수준에서 보안을 관리 할 수 있다
  • MFA를 사용하면 계정을 안전하게 보호 할 수 있다
  • AWS Service에 권한을 부여할 때마다 역할을 만들고 사용할 수 있다
  • AWS를 프로그래밍할 경우 (CLI, SDK를 이용할 경우) 반드시 Access Key를 생성해야 한다
  • IAM 자격 증명 보고서와 IAM 액세스 분석기를 사용해서 계정의 권한을 확인 할 수 있다

IAM Section - Summary

  • Users: 회사 내 실제 사용자와 IAM 사용자가 매핑된다
  • Groups: 사용자를 그룹에 포함 시킬 수 있다 (다른 그룹은 포함 시킬 수 없음)
  • Policies: 사용자나 그룹에 권한을 부여한다 (정책 생성 시 JSON 포맷을 활용)
  • Roles: AWS Service들이 사용하는 권한을 설정한다
  • Security: MFA + Password Policy
  • Access Keys: CLI나 SDK를 이용하여 AWS에 액세스한다고 하면 생성해야 한다
  • Audit: IAM 대시보드를 감사하고 싶다면 IAM Credential Reports를 만들어서 사용자 관련 정보를 볼 수 있고, IAM의 특정 사용자를 감사하고 싶다면 IAM Access Advisor를 사용하여 사용자의 최근 권한의 사용 내역을 확인한다

0개의 댓글