처음 시작하는 Infrastructure as Code: AWS & 테라폼을 수강하며 정리한 내용입니다.
AWS IAM이란?
- AWS Identity and Access Management는 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스
- IAM을 사용하여 리소스를 사용하도록 인증 및 권한이 부여된 대상을 제어
보안의 영역
- Blocking: 특정 자원에 대한 접근 혹은 사용을 제어하는 것, AWS IAM이 이 영역에 해당
- Encrypting: 공개되는 정보에 대해서 식별 불가능한 정보로 암호화하는 것
- Hiding: 정보에 관한 접근을 특정 경로 혹은 명령어로 접근하는 것
- 위로 갈수록 좀 더 강력한 보안
IAM 구성요소
- IAM User: AWS 내에서 생성하는 사용자로 AWS와 상호작용하는 사용자 혹은 애플리케이션
- IAM Group: IAM User의 집합, Group을 사용하여 다수 사용자에 대해 동일한 권한을 보다 쉽게 관리
- 실제 조직과 Group 형태를 똑같이 맞추는 것이 좋음
- 그리고 각 조직의 사람들을 해당 Group에 추가
- IAM Role: 특정 권한을 가진 IAM 자격증명, Role을 사용함으로써 특정 사용자, 애플리케이션 또는 AWS 서비스에 접근 권한을 위함할 수 있음
- IAM Policy: AWS에 접근하는 특정 권한을 정의하는 개체, AWS IAM 리소스들과 연결하여 사용할 수 있음
IAM Policy 구조
{
"Statement":[
{
"Effect": "effect",
"Action": "action",
"Resource": "arn",
"Condition": {
"condition": {
"key": "value"
}
}
}
]
}
- Effect: "Allow" 또는 "Deny", 기본적으로 IAM 사용자에게는 리소스 및 API 작업을 사용할 권한이 없으므로 모든 요청이 거부됨
- Action: 권한을 부여하거나 거부할 특정 API 작업, 예를 들어
s3:GetObject
은 S3에 저장된 객체들을 다운받을 수 있도록 함
- Resource: 작업의 영향을 받는 리소스, Amazon 리소스 이름(ARN)을 사용하거나 명령문이 모든 리소스에 적용됨을 표시하는 와일드카드(*)를 사용
- Condition: 선택사항으로 정책이 적용되는 시점을 제어하는 데 사용, 다양한 조건을 넣어 권한을 부여할 수 있음, 예를 들어 특정 IP나 VPC인 경우에만 허용할 수 있음
- Policy를 직접 만들 수 있고 AWS가 이미 자주 쓰이는 Policy를 만들어 놓음
예시
{
"Version": "2024-11-23",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupIngress",
"ec2:AuthorizeSecurityGroupEgress",
"ec2:RevokeSecurityGroupIngress",
"ec2:RevokeSecurityGroupEgress"
],
"Resource": "arn:aws:ec2:region:account:security-group/*",
"Condition": {
"StringEquals": {
"ec2:Vpc": "arn:aws:ec2:region:account:vpc/vpc-11223344556677889"
}
}
}
]
}