AWS에 서비스를 배포하고 운영하려면 여러 개발자가 클라우드에서 작업을 진행하는데,
이때 IAM을 사용하면 각자의 역할에 맞는 권한만 부여해 보안을 강화하고 효율적으로 운영할 수 있다.
AWS IAM(Identity and Access Management)은 AWS 리소스에 대한 접근을 안전하게 제어할 수 있는 웹 서비스다. IAM을 사용하면 AWS 계정 내에서 사용자와 그룹을 생성하고 관리하며, 다양한 AWS 리소스에 대한 접근 권한을 세밀하게 제어할 수 있다.
IAM 사용자는 AWS와 상호 작용하는 개인 또는 서비스를 의미한다. 각 사용자는 고유한 보안 자격 증명을 가지며, AWS Management Console 로그인 또는 프로그래밍 방식의 API 접근에 사용된다.
예시:
{
"UserName": "DevOpsEngineer",
"Path": "/",
"CreateDate": "2023-01-15T16:27:32Z",
"UserId": "AIDACKCEVSQ6C2EXAMPLE",
"Arn": "arn:aws:iam::123456789012:user/DevOpsEngineer"
}
IAM 그룹은 IAM 사용자의 집합이다. 그룹을 사용하면 여러 사용자에 대한 권한을 더 쉽게 관리할 수 있다. 예를 들어, "개발자" 그룹을 생성하고 이 그룹에 개발자들이 필요로 하는 권한을 부여할 수 있다.
{
"Path": "/",
"GroupName": "Developers",
"GroupId": "AGPACZPSHVNQWE3EXAMPLE",
"Arn": "arn:aws:iam::123456789012:group/Developers",
"CreateDate": "2023-01-15T21:40:59Z"
}
IAM 역할은 특정 권한을 가진 자격 증명으로, 필요할 때 사용자, 어플리케이션 또는 서비스가 맡을 수 있다. 역할에는 영구적인 자격 증명이 없으며, 임시 보안 자격 증명을 제공한다.
{
"Path": "/",
"RoleName": "EC2ServiceRole",
"RoleId": "AROAR6VMJWRXKEXAMPLE",
"Arn": "arn:aws:iam::123456789012:role/EC2ServiceRole",
"CreateDate": "2023-01-16T18:12:37Z",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
}
IAM 정책은 하나 이상의 권한을 정의하는 JSON 문서다. 정책은 사용자, 그룹 또는 역할에 연결되어 AWS 리소스에 대한 접근을 제어한다.
정책 유형:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::example-bucket"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::example-bucket/*",
"Condition": {
"StringEquals": {
"aws:username": "johndoe"
}
}
}
]
}
IAM의 가장 중요한 이유는 AWS 환경에 대한 보안을 강화하는 것이다.
예시 정책:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:Describe*",
"ec2:RunInstances",
"ec2:StopInstances",
"ec2:StartInstances"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "ap-northeast-2",
"ec2:ResourceTag/Environment": "Development"
}
}
}
]
}
서버리스 애플리케이션(예: Lambda 함수)이 다른 AWS 서비스와 상호 작용할 때, IAM 역할을 사용하여 필요한 권한을 제공한다.
구현 방법:
DynamoDB에 접근하는 Lambda 함수용 역할 정책
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem",
"dynamodb:Query"
],
"Resource": "arn:aws:dynamodb:ap-northeast-2:123456789012:table/UserData"
}
]
}
대규모 조직에서는 여러 AWS 계정을 사용하는 것이 일반적입니다. IAM을 사용하여 이러한 계정 간의 접근을 관리할 수 있다.
구현 방법:
AWS Organizations를 사용하여 계정 구조화
중앙 관리 계정(Master Account)에서 IAM 사용자 관리
역할 수임(AssumeRole)을 통한 다른 계정 접근
예시: 크로스 계정 역할 수임 정책
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::987654321098:role/CrossAccountAccess"
}
]
}
외부 개발자나 컨설턴트에게 일시적으로 AWS 리소스에 접근할 수 있는 권한을 제공해야 할 경우, IAM 역할과 임시 자격 증명을 활용할 수 있다.
구현 방법:
예시 코드 (AWS CLI):
# 역할 수임하여 임시 자격 증명 발급
aws sts assume-role \
--role-arn arn:aws:iam::123456789012:role/ExternalConsultant \
--role-session-name "JohnDoeSession" \
--duration-seconds 3600
AWS IAM은 클라우드 환경에서 안전하고 효율적인 접근 관리를 위해 필수적이다. 사용자, 그룹, 역할, 정책을 통해 세분화된 권한 제어가 가능하며, 이를 통해 보안 위험을 최소화하고 운영 효율성을 높일 수 있다.