[AWS] IAM

Gaeun·2023년 5월 1일
1

참고 자료

1. IAM

🧑‍💻 Users & Groups

IAM: Identify and Access Management, Global service

  • 사용자를 생성하고 그룹에 배치하기 때문에 글로벌 서비스에 해당된다.
  • Root account: 기본적으로 생성되며, 생성 후에는 루트 계정을 더이상 사용해서도, 공유해서도 안 됨. 대신 사용자를 생성해야 함.
  • Users: 하나의 사용자는 조직 내의 한 사람에 해당됨. 필요하다면 사용자들을 그룹으로 묶을 수도 있음.
  • Groups: 그룹에는 사용자만 배치할 수 있음. 다른 그룹은 포함할 수 없음.

사용자와 그룹을 생성하는 이유? 이들이 AWS 계정을 사용하도록 허용하기 위해서!

✅ Permissions

  • 사용자 또는 그룹에게 policy, 또는 IAM policy라고 불리는 JSON 문서를 지정할 수 있음. (특정 사용자, 혹은 특정 그룹에 속한 모든 사용자들이 어떤 작업에 권한을 가지고 있는지 설명해놓은 것)
{
    "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에서는 least privilege principle(최소 권한의 원칙)을 사용.
    • 사용자가 꼭 필요로 하는 것 이상의 권한을 주지 않는 것을 의미

🏛️ Policies Structure

Consists of

  • Version: 정책 언어 버전(보통은 "2012-10-17")
  • Id: 정책을 식별하는 ID (optional)
  • Statement: 한 개 이상의 statements (required)

Statements consist of

  • Sid(시드): Statement ID, Statement의 식별자 (optional)
  • Effect(효과): Statement가 특정 API에 접근하는 걸 허용할지, 거부할지에 대한 내용 (Allow / Deny)
  • Principal(원칙): 특정 정책이 적용될 사용자, 계정, 혹은 역할
  • Action(조치): effect에 기반해 허용 및 거부되는 API 호출의 목록
  • Resource(리소스): 적용될 action의 리소스 목록
  • Condition(조건): Statement가 언제 적용될지 결정 (optional)

🔐 Password Policy

  • Strong password = higher security for your account
  • AWS에는 다양한 옵션을 이용하여 비밀번호 정책의 생성이 가능
    • 비밀번호 최소 길이 설정
    • 특정 유형의 글자 사용 요구(대문자, 소문자, 숫자, 특수문자 등)
    • IAM 사용자들의 비밀번호 변경을 허용 또는 금지
    • 일정기간이 지난 후 비밀번호 만료, 새 비밀번호 설정 요구
    • 비밀번호의 재사용 금지

🔐🔐🔐 Multi Factor Authentication - MFA

  • 사용자들은 계정에 접근 권한이 있고, 많은 작업을 할 수 있음. 특히 관리자인 경우 구성을 변경하거나 리소스를 삭제하는 등의 작업을 할 수 있음.
  • 따라서 적어도 루트 계정은 무슨 일이 있어도 반드시 보호해야 하고, 또한 전체 IAM 사용자들도 보호를 해야 함.
  • 따라서 비밀번호 이외에 사용할 수 있는 수단으로서 MFA가 있음.

    MFA: password you know + security device you own

if a password is stolen or hacked, the account is not compromised!

MFA devices opitons in AWS

  • Virtual MFA device: 하나의 장치에서도 토큰을 여러개 지원함. 즉, 루트 계정, IAM 사용자, 또 다른 계정 등 원하는 수 만큼의 계정 및 사용자 등록이 가능함.
    • Google Authenticator (phone only)
    • Authy (multi-device)
  • Universal 2nd Factor (U2F) Security Key: 하나의 보안 키에서 여러 루트 계정과 IAM 사용자를 지원함.
    • Yubikey by Yubico (3rd party)
  • Hardware Key Fob MFA Device
    • Provided by Gemalto (3rd party)
  • Hardware Key Fob MFA Device for AWS GovCloud (US)
    • Proviced by SurePassID (3rd party)

2. AWS CLI

🖱️ How can users access AWS?

  • To Access AWS,
    • AWS Management Console (protected by password + MFA)
    • AWS Command Line Interface (CLI): protected by access keys
    • AWS Software Developer Kit (SDK) - for code: protected by access keys
  • Access Keys는 AWS 콘솔을 통해 생성.
  • 사용자들이 자신들의 액세스 키를 직접 관리.
  • Access Keys are secret, just like a password. Don't share them
  • Access Key ID ~= username
  • Secret Access Key ~= password

📋 AWS CLI (Command Line Interface)

  • AWS CLI: Command-line shell에서 명령어를 사용하여 AWS 서비스들과 상호작용할 수 있도록 하는 도구.
  • AWS CLI를 사용하면 AWS의 공용 API로 직접 액세스 가능.
  • AWS CLI를 통해 리소스를 관리하는 스크립트를 개발해 일부 작업을 자동화할 수 있음.
  • AWS Management Console 대신 사용되기도 함.

📦 AWS SDK (Software Development Kit)

  • 특정 언어로 된 라이브러리의 집합. 따라서 프로그래밍 언어에 따라 개별 SDK가 있음.
  • AWS SDK를 사용하면 AWS의 서비스나 API에 프로그래밍을 위한 액세스 가능.
  • SDK는 터미널 내에서 사용하는 것이 아닌 코딩을 통해 애플리케이션 내에 심어두는 것. 즉, 애플리케이션 내에 자체적으로 AWS SDK가 있는 것.
  • Supports:
    • SDKs (JavaScript, Python, PHP, NET, Ruby, Java, Go, Node.js, C++)
    • Mobile SDKs
    • IoT Device SDKs
  • 예: AWS CLI는 사실상 Boto라는 Python용 AWS SDK에 구축되어 있음.

3. IAM Role

💡 IAM Roles for Services

  • 몇몇 AWS는 본인 계정에서 실행해야 함. 이를 위해서는 사용자와 마찬가지로 어떤 권한이 필요. 따라서 AWS 서비스에 권한을 부여해야 함.
  • To do so, we will assign permission to AWS services with IAM Roles.
  • IAM Role은 사용자와 비슷하지만 실제 사람이 사용하도록 만들어진 것이 아니고, AWS 서비스에 의해 사용되도록 만들어짐.
  • Command roles:
    • EC2 Instance Roles
    • Lambda Function Roles
    • Roles for CloudFOrmaiton

🔒 IAM Security Tools

  • IAM Credentials Report (account-level)
    • 계정에 있는 사용자와 다양한 자격 증명의 상태 포함
  • IAM Access Advisor (user-level)
    • 사용자에게 부여된 서비스의 권한과 해당 서비스에 마지막으로 액세스한 시간을 볼 수 있음.
    • 해당 도구를 사용하여 어떤 권한이 사용되지 않는지 볼 수 있고, 이를 통해 사용자의 권한을 줄여 최소 권한의 원칙을 지킬 수 있음.

🧾 IAM Guidlines & Best Practices

  • 루트 계정은 AWS 계정을 설정할 때를 제외하고 사용 ❌
  • One physical user = One AWS user
  • 사용자를 그룹에 넣어 해당 그룹에 권한을 부여할 수 있음 → 그룹 수준에서 보안 관리 가능.
  • 비밀번호 정책을 강력하게 할 것.
  • MFA를 사용할 수 있다면 꼭 사용할 것.
  • AWS 서비스에서 권한을 부여할 때마다 Role를 만들고 사용해야 함.
  • CLI 혹은 SDK를 사용할 경우 Access Key를 만들고 사용할 것. Access Key는 비밀번호와 같음.
  • 계정의 권한을 감사할 때에는 IAM Credential Report를 사용할 수 있음.
  • Never share IAM users & Access Keys

4. IAM - Summary

  • Users: mapped to a physical user, has a password for AWS Console
  • Groups: contains users only
  • Policies: JSON document that outlines permissions for users or groups
  • Roles: for EC2 instances or AWS services
  • Security: MFA + Password Policy
  • AWS CLI: manage your AWS services using the command-line
  • AWS SDK: manage your AWS services using a programming language
  • Access Keys: access AWS using the CLI or SDK
  • Audit: IAM Credential Reports & IAM Access Advisor
profile
🌱 새싹 개발자의 고군분투 코딩 일기

0개의 댓글