728x90
IAM(Identity and Access Management)
: AWS에서 사용자와 리소스 간의 접근을 안전하게 제어하는 서비스
IAM을 사용하면 여러 사용자가 AWS 리소스에 쉽게 접근할 수 있으며, 사용자, 그룹, 정책, 역할 등을 관리할 수 있다.
1. IAM의 핵심 개념
사용자(User)
: AWS 계정에 접근할 수 있는 개인
- 각 사용자에게는 콘솔 로그인용 암호와 API/CLI 접근용 액세스 키가 있다.
- 기본적으로 새로운 사용자는 생성 직후 아무 권한이 없으며, 정책을 통해 명시적으로 권한을 부여해야 AWS 리소스에 접근할 수 있다.
그룹(Group)
: 여러 사용자에게 동일한 권한을 일괄적으로 부여하기 위한 도구
- 여러 사용자에게 동일한 정책을 적용하여 효율적으로 관리할 수 있다.
역할(Role)
: 특정 사용자 또는 서비스가 AWS 리소스에 접근할 수 있도록 권한을 위임하는 데 사용된다.
- 역할을 부여받은(Assume한) 사용자나 서비스는 임시 보안 자격 증명을 통해 권한을 갖게 되어 AWS 리소스에 접근할 수 있게 된다.
- 이 자격 증명은 보안 토큰 서비스(STS)에서 발급되며, 시간이 지나면 만료되므로 영구적인 사용자 액세스 키를 사용하는 것보다 안전하다.
- 예를 들어 EC2 인스턴스가 S3 버킷에 접근하도록 설정하려면,
- IAM 콘솔에서 역할을 생성하고, 이 역할에 S3에 접근할 수 있는 정책(e.g.
AmazonS3ReadOnlyAccess)을 연결한다. - EC2에 이 역할을 연결한다. (이것을 인스턴스 프로파일이라고 부른다.)
- EC2 내부의 애플리케이션은 역할에서 제공하는 임시 자격 증명을 사용해 S3에 접근한다.
- IAM 콘솔에서 역할을 생성하고, 이 역할에 S3에 접근할 수 있는 정책(e.g.
정책(Policy)
: IAM에서 권한을 정의하는 문서로, JSON 형식으로 작성된다.
- 사용자는 기본적으로 아무 권한이 없으며, 정책을 통해 허용된 작업만 수행할 수 있다.
- 정책 유형은 ID 기반 정책과 리소스 기반 정책이 있다.
ID 기반 정책(Identity-Based Policy)
- 사용자, 그룹, 역할에 적용되는 정책
- 특정 사용자에게 AWS 리소스에 접근할 수 있는 권한을 부여하거나 제한할 때 사용한다.
- 예시) "개발자 그룹에 S3 버킷 읽기/쓰기 허용"
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::example-bucket/*"
}
]
}
리소스 기반 정책(Resource-Based Policy)
- 리소스 자체에 연결되는 정책
- 특정 AWS 리소스에 대해 리소스에 접근 가능한 주체(Identity)를 정의하기 위해 사용한다.
- 적용 대상 : S3 버킷, Lambda 함수, SNS 주제, SQS 큐 등
- 예시) "외부 계정이 특정 S3 버킷의 파일에 접근하도록 허용"
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/ExternalUser"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example-bucket/*"
}
]
}
ID 기반 정책
- 조직 내 특정 팀의 모든 사용자에게 동일한 권한을 부여하고 싶을 때
- 예) "모든 개발자는 DynamoDB에서 데이터를 읽을 수 있음"
리소스 기반 정책
- S3 버킷을 외부 계정과 공유하고 싶을 때
- 예) "파트너 계정에서 특정 S3 버킷의 파일에 접근하도록 허용"
권한 경계(Permission Boundaries)
- IAM 엔티티(사용자 또는 역할)에 부여할 수 있는 최대 권한의 한계를 설정하는 정책
- 쉽게 말하면 사용자가 받을 수 있는 권한의 상한선을 정하는 것
서비스 통제 정책(SCP, Service Control Policy)
- AWS Organizations에서 사용되며, 조직 전체에 적용되는 최대 권한을 정의하는 정책
- 사용 사례: 조직 내 모든 계정에서 특정 서비스 사용을 금지하고 싶을 때
세션 정책(Session Policy)
- AssumeRole API로 역할을 사용할 때, 세션 동안만 유효한 권한을 설정하는 임시 정책
- 예) 외부 사용자가 파일을 업로드하기 위해 S3 버킷에 접근할 필요가 있지만, 다른 작업은 허용하지 않으려고 함
- 세션 정책: "S3 버킷 업로드만 가능"
- 사용자는 역할을 Assume할 때 임시로 S3 업로드 권한만 갖게 된다.
교차 계정 액세스
IAM 역할을 사용해 한 AWS 계정에서 다른 AWS 계정의 IAM 역할에 접근을 위임할 수 있다.
멀티 계정 환경에서 리소스 관리와 협업이 필요한 경우 유용하다.
구성 단계
1. 권한을 위임할 계정에서 IAM 역할 생성
- 권한을 위임할 계정(AWS 계정 A)에서 IAM 역할을 생성하고, 신뢰 정책(Trust Policy)을 구성한다.
- 이 신뢰 정책은 권한을 위임받는 계정(AWS 계정 B)이 역할을 사용할 수 있도록 허용한다.
신뢰 정책 예시:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:root"
# 123456789012는 권한을 위임받는 계정(AWS 계정 B)의 AWS 계정 ID
},
"Action": "sts:AssumeRole"
}
]
}
2. 권한을 위임받는 계정에서 역할 사용
- 권한을 위임받는 계정(AWS 계정 B)에서 AWS Security Token Service(STS)의 AssumeRole API를 호출하여 대상 계정(AWS 계정 A)의 역할을 사용(Assume)한다.
예제 명령:
aws sts assume-role \
--role-arn "arn:aws:iam::TARGET_ACCOUNT_ID:role/ROLE_NAME" \
--role-session-name "SessionName"
# TARGET_ACCOUNT_ID: 권한을 위임한 계정(AWS 계정 A)의 AWS 계정 ID
이 명령을 통해 임시 보안 자격 증명(Access Key, Secret Key, Session Token)이 발급되며, 이를 사용하여 권한이 부여된 AWS 리소스에 접근할 수 있다.
2. IAM 보안 기능
- 다중 인증(MFA): 계정 보안을 강화하기 위한 추가 인증 방법으로, 강력한 보안이 필요할 때 설정한다.
- 사용자 암호 정책: 계정마다 강력한 암호 조건을 설정한다.
- 액세스 키 관리: API 키를 생성해 AWS에 프로그래밍 방식으로 접근할 수 있으며, 키는 주기적으로 교체하거나 삭제해야 한다.
3. IAM 모범 사례
- 루트 사용자 액세스 제한: 루트 계정은 가장 강력한 권한을 가지므로, 액세스 키를 비활성화하고 가능한 한 사용하지 않는 것이 좋다. 대신 개별 사용자 계정을 생성하고 권한을 부여해야 한다.
- 최소 권한 원칙 준수: 사용자와 역할에 필요한 최소한의 권한만 부여하여 보안을 강화해야 한다. 또한, IAM 권한을 주기적으로 검토해 불필요한 권한이 포함되지 않도록 해야 한다.
- IAM 그룹 활용: 사용자에게 개별적으로 권한을 부여하기보다, 그룹을 만들어 그룹에 권한을 설정하는 것이 관리에 더 효율적이다.
- 자격 증명 관리 및 로테이션: 모든 자격 증명은 정기적으로 갱신하고, 사용하지 않는 자격 증명은 삭제하여 보안을 유지한다.
- IAM 정책 작성 시 보안 조건 추가: 정책을 작성할 때 사용자 또는 리소스 조건을 추가하여 접근을 세밀하게 제어한다.
- 활동 모니터링: IAM과 관련된 계정 활동을 주기적으로 모니터링하여 예상치 못한 활동을 조기에 탐지할 수 있도록 한다.
4. 추가 보안 및 관리 팁
- AWS 관리 정책 사용: 처음에는 AWS에서 제공하는 관리 정책을 사용하고, 필요하면 사용자 정의 정책을 작성한다.
- EC2 인스턴스에 역할 할당: EC2에서 실행되는 애플리케이션이 AWS 리소스에 접근해야 하는 경우, 인스턴스 프로파일을 통해 역할을 할당하는 것이 좋다.
- 정책 충돌 해결: 여러 정책이 적용될 경우 가장 제한적인 권한이 우선 적용된다.
728x90
'AWS' 카테고리의 다른 글
| AWS 데이터 분석: Athena, Glue, Redshift, EMR (2) | 2024.12.18 |
|---|---|
| AWS 실시간 데이터 처리: Amazon Kinesis (1) | 2024.12.17 |
| AWS VPC(Virtual Private Cloud) (1) | 2024.12.16 |
| AWS EC2 Auto Scaling & Load Balancing (3) | 2024.12.16 |
| AWS EC2(Elastic Compute Cloud) (2) | 2024.12.16 |