AWS

AWS IAM(Identity and Access Management) 사용법

devfinger 2024. 10. 23. 15:36

AWS IAM(Identity and Access Management)은 AWS 리소스에 대한 액세스 제어를 관리하는 서비스이다. AWS의 다양한 리소스와 서비스를 사용할 때 IAM을 사용하여 접근 권한을 설정하고 관리한다. 각 리소스는 IAM 권한을 통해 AWS 리소스에 액세스할 수 있고, 사용자, 애플리케이션, 서비스가 안전하게 AWS 리소스에 접근할 수 있도록 역할을 정의한다.

IAM이 필요한 경우

IAM은 AWS 리소스에 대한 접근 권한이 필요할 때 사용됩니다. 일반적으로 다음과 같은 경우 IAM 설정이 필요하다.

  • AWS 콘솔에 사용자로 로그인하여 리소스를 관리하려는 경우
  • 애플리케이션이 특정 AWS 리소스(S3, DynamoDB, Lambda 등)에 접근해야 할 경우
  • AWS 서비스(예: Lambda, EC2 등)가 다른 AWS 서비스에 접근해야 할 경우 (예: Lambda가 S3에서 데이터를 읽거나 EC2 인스턴스가 RDS에 접근)

IAM 구성 요소

1. Users (사용자)
사용자는 AWS 리소스에 접근하는 개인 계정이다. 사용자는 사람이나 애플리케이션을 나타내며, 특정 AWS 서비스에 대한 권한을 부여받을 수 있다.

  • 사용자는 API콘솔 액세스를 위한 자격 증명(로그인 정보 또는 액세스 키)을 가진다.
resource "aws_iam_user" "developer_user" {
  name = "developer"
}

resource "aws_iam_user_policy_attachment" "developer_policy_attachment" {
  user       = aws_iam_user.developer_user.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonS3FullAccess"
}

 

이 예시에서 developer_user는 S3에 대한 완전한 액세스 권한을 가지고 있다.

 

2. Groups (그룹)
그룹은 여러 사용자에게 동일한 권한을 부여할 수 있는 방식으로 권한을 일괄 관리할 때 사용된다. 그룹에 사용자를 추가하고 그룹에 대한 정책을 설정함으로써, 그룹의 모든 사용자는 해당 정책에 따른 권한을 가지게 된다.

  • 예를 들어, 개발자 그룹과 관리자를 구분하여 각 그룹에 다른 권한을 부여할 수 있다.
resource "aws_iam_group" "dev_group" {
  name = "developers"
}

resource "aws_iam_user_group_membership" "add_user_to_group" {
  user  = aws_iam_user.developer_user.name
  groups = [aws_iam_group.dev_group.name]
}

resource "aws_iam_group_policy_attachment" "dev_group_policy" {
  group      = aws_iam_group.dev_group.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonEC2FullAccess"
}

 

이 예시에서는 developers라는 그룹에 사용자를 추가하고 EC2에 대한 완전한 액세스 권한을 부여합니다.

 

3. Roles (역할)
RoleAWS 서비스 또는 애플리케이션이 다른 AWS 리소스에 접근할 수 있도록 권한을 부여하는 것입니다. 주로 EC2 인스턴스, Lambda 함수, ECS 작업 등 AWS 리소스가 다른 AWS 리소스에 접근할 때 사용됩니다.

  • 사용자는 특정한 자격 증명을 가진 반면, Role은 임시 보안 자격 증명을 사용해 접근 권한을 부여받습니다.
resource "aws_iam_role" "lambda_exec_role" {
  name = "lambda_exec_role"
  assume_role_policy = jsonencode({
    Version = "2012-10-17",
    Statement = [{
      Effect = "Allow",
      Principal = {
        Service = "lambda.amazonaws.com"
      },
      Action = "sts:AssumeRole"
    }]
  })
}

resource "aws_iam_role_policy_attachment" "lambda_policy_attachment" {
  role       = aws_iam_role.lambda_exec_role.name
  policy_arn = "arn:aws:iam::aws:policy/AWSLambdaExecute"
}

 

  • 이 예시에서 lambda_exec_role은 Lambda 함수가 다른 AWS 리소스에 접근할 수 있도록 권한을 부여한 역할이다.

4. Policy (정책)
정책은 AWS 리소스에 대해 어떤 작업을 할 수 있는지 정의하는 권한 규칙입니다. 정책은 사용자, 그룹, 역할에 할당되어 해당 엔티티에 권한을 부여합니다. 정책은 두 가지 유형이 있습니다.

  • 관리형 정책(Managed Policies): AWS에서 제공하는 사전 정의된 정책입니다.
  • 사용자 정의 정책(Customer Managed Policies): 사용자가 직접 권한을 정의한 정책입니다.
resource "aws_iam_policy" "s3_custom_policy" {
  name        = "s3-custom-policy"
  description = "Custom policy to allow S3 bucket access"
  policy = jsonencode({
    Version = "2012-10-17",
    Statement = [{
      Action = [
        "s3:GetObject",
        "s3:PutObject"
      ],
      Effect   = "Allow",
      Resource = "arn:aws:s3:::my-bucket/*"
    }]
  })
}

resource "aws_iam_role_policy_attachment" "s3_policy_attachment" {
  role       = aws_iam_role.lambda_exec_role.name
  policy_arn = aws_iam_policy.s3_custom_policy.arn
}

 

이 정책은 S3 버킷에 대해 GetObject, PutObject 권한을 부여하는 사용자 정의 정책이다.

언제 IAM을 사용해야 하나?

  1. Lambda 함수를 만들 때는 IAM 역할을 사용하여 해당 함수가 S3, DynamoDB, 또는 다른 AWS 리소스에 접근할 수 있도록 해야 한다.
  2. EC2 인스턴스가 S3에 접근하거나 RDS 데이터베이스를 사용할 때는 IAM 역할을 할당해야 한다.
  3. 사용자가 AWS 관리 콘솔에 로그인하여 리소스를 관리할 경우, IAM 사용자와 그룹을 통해 액세스 권한을 부여해야 한다.
  4. 정책은 특정 작업을 수행할 수 있는 권한을 정의하며, 사용자, 그룹, 역할에 할당된다.

IAM 구성의 일반적인 시나리오

  1. 개별 사용자에게 권한 부여: 한 명의 사용자가 특정 AWS 리소스에만 접근할 수 있게 하고 싶을 때 IAM 사용자와 사용자별 정책을 사용한다.
    • 예: AWS 관리 콘솔에서 EC2 인스턴스를 관리하는 개발자에게 특정 정책을 부여
  2. 여러 사용자에게 일괄적으로 권한 부여: 여러 개발자에게 동일한 권한을 부여할 때 IAM 그룹을 사용하여 그룹 정책으로 권한을 부여한다.
    • 예: developers 그룹에 속한 사용자는 S3와 DynamoDB에 대한 읽기/쓰기 권한을 가짐
  3. AWS 서비스 간 권한 부여: Lambda 함수가 DynamoDB 테이블에 데이터를 쓰도록 하거나 EC2 인스턴스가 S3 버킷에서 데이터를 읽을 수 있도록 할 때 IAM 역할을 사용한다.
    • 예: Lambda 함수가 다른 AWS 리소스에 접근할 수 있도록 역할을 부여하고 정책을 연결

요약

  • 사용자(Users)는 개별적인 사용자 계정을 관리하고, 특정 리소스에 대한 접근을 할 때 사용된다.
  • 그룹(Groups)은 여러 사용자에게 일괄적으로 동일한 권한을 부여할 때 사용된다.
  • 역할(Roles)AWS 리소스가 다른 리소스에 접근할 수 있도록 하는 권한을 부여할 때 사용된다.
  • 정책(Policy)은 권한 규칙을 정의하여 어떤 작업을 할 수 있는지 구체적으로 명시하며, 사용자, 그룹, 역할에 할당된다.

IAM은 AWS 리소스 간의 안전한 통신과 권한 관리를 위한 필수 도구이다.