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 (역할)
Role은 AWS 서비스 또는 애플리케이션이 다른 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을 사용해야 하나?
- Lambda 함수를 만들 때는 IAM 역할을 사용하여 해당 함수가 S3, DynamoDB, 또는 다른 AWS 리소스에 접근할 수 있도록 해야 한다.
- EC2 인스턴스가 S3에 접근하거나 RDS 데이터베이스를 사용할 때는 IAM 역할을 할당해야 한다.
- 사용자가 AWS 관리 콘솔에 로그인하여 리소스를 관리할 경우, IAM 사용자와 그룹을 통해 액세스 권한을 부여해야 한다.
- 정책은 특정 작업을 수행할 수 있는 권한을 정의하며, 사용자, 그룹, 역할에 할당된다.
IAM 구성의 일반적인 시나리오
- 개별 사용자에게 권한 부여: 한 명의 사용자가 특정 AWS 리소스에만 접근할 수 있게 하고 싶을 때 IAM 사용자와 사용자별 정책을 사용한다.
- 예: AWS 관리 콘솔에서 EC2 인스턴스를 관리하는 개발자에게 특정 정책을 부여
- 여러 사용자에게 일괄적으로 권한 부여: 여러 개발자에게 동일한 권한을 부여할 때 IAM 그룹을 사용하여 그룹 정책으로 권한을 부여한다.
- 예: developers 그룹에 속한 사용자는 S3와 DynamoDB에 대한 읽기/쓰기 권한을 가짐
- AWS 서비스 간 권한 부여: Lambda 함수가 DynamoDB 테이블에 데이터를 쓰도록 하거나 EC2 인스턴스가 S3 버킷에서 데이터를 읽을 수 있도록 할 때 IAM 역할을 사용한다.
- 예: Lambda 함수가 다른 AWS 리소스에 접근할 수 있도록 역할을 부여하고 정책을 연결
요약
- 사용자(Users)는 개별적인 사용자 계정을 관리하고, 특정 리소스에 대한 접근을 할 때 사용된다.
- 그룹(Groups)은 여러 사용자에게 일괄적으로 동일한 권한을 부여할 때 사용된다.
- 역할(Roles)은 AWS 리소스가 다른 리소스에 접근할 수 있도록 하는 권한을 부여할 때 사용된다.
- 정책(Policy)은 권한 규칙을 정의하여 어떤 작업을 할 수 있는지 구체적으로 명시하며, 사용자, 그룹, 역할에 할당된다.
IAM은 AWS 리소스 간의 안전한 통신과 권한 관리를 위한 필수 도구이다.
'AWS' 카테고리의 다른 글
AWS Roles(역할) aws_iam_role의 assume_role_policy 사용법 (0) | 2024.10.23 |
---|---|
AWS IAM 관리형 정책 (Managed Policies) (0) | 2024.10.23 |
AWS Lambda IaC 적용 방법 (1) | 2024.10.23 |
AWS security_groups 멀티 지정 (0) | 2024.10.23 |
AWS Aurora Serverless DB 생성, Lambda로 이벤트 전송 IaC (0) | 2024.10.23 |