[DevOps] AWS, Terraform - AWS IAM
AWS IAM (Identity and Access Management)
AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스
IAM을 사용하여 AWS 리소스에 대한 기본 접근 및 리소스를 사용하도록 권한 생성, 부여 가능
Security
- Blocking : 특정 자원에 대한 접근 혹은 사용을 제어하는 것 (AWS IAM은 이 영역에 해당됨)
- Encrypting : 공개되는 정보에 대해서 식별 불가능한 정보로 암호화하는 것
- Hiding : 정보에 관한 접근을 특정 경로 혹은 명령어로 접근하는 것
IAM 구성 요소
- AWS IAM User — AWS IAM User는 AWS 내에서 생성하는 사용자로 AWS와 상호작용하는 사용자 혹은 어플리케이션을 의미합니다.
- AWS IAM Group — AWS IAM Group은 IAM User의 집합이고, Group을 사용함으로써 다수 사용자(유저)에 대하여 동일한 권한을 보다 쉽게 관리할 수 있습니다. 서로의 Policy를 공유하게 됨.
- AWS IAM Role — AWS IAM Role은 특정 권한을 가진 IAM 자격증명입니다. 이 Role을 사용함으로써 특정 사용자 혹은 어플리케이션에 혹은 AWS 서비스에 할당함으로써 접근 권한을 위임할 수 있습니다. (예를 들어 EC2에다 IAM role을 할당해서 EC2는 할당한 IAM Role의 권한을 가지게 되는 것)
- AWS IAM Policy — AWS에 접근하는 해당 권한을 정의하는 개체로 AWS IAM 리소스들과 연결하여 사용할 수 있습니다. (특정 권한 자체를 의미, IAM User, Group, Role이 모두 IAM Policy를 갖게 됨)
IAM Policy Structure
{
"Statement":[{
"Effect":"effect",
"Action":"action",
"Resource":"arn",
"Condition":{
"condition":{
"key":"value"
}
}
}
]
}
- Effect : "Allow" 또는 "Deny"일 수 있다. 기본적으로 IAM 사용자에게는 리소스 및 API 작업을 사용할 권한이 없으므로 모든 요청이 거부된다.
- Action : action은 권한을 부여하거나 거부할 특정 API 작업이다.
- Resource : 작업의 영향을 받는 리소스이다. Amazon 리소스 이름(ARN)을 사용하거나 명령문이 모든 리소스에 적용됨을 표시하는 와일드카드(*)를 사용한다.
- Condition : 선택사항으로서 정책이 적용되는 시점을 제어하는 데 사용할 수 있다. 다양한 조건을 넣어 권한을 부여할 수 있다.
AWS IAM 실습 1
aws console을 사용할 때 다수의 사용자가 사용한다면 어떻게 관리를 해야 할까?
콘솔에서 유저들을 할당하고 권한을 지정하더라도 큰 문제가 없을 것
그러나 회사 같은 인원이 많은 데에서 aws console을 사용할 때 Terraform을 사용해서 IaC로 관리하는 게 매우 매우 중요함!!
Terraform을 통해 AWS IAM user와 group 생성
IAM 리소스는 리전에 종속적인 서비스가 아님
어떤 리소스를 만들게 되면 (S3, vpc)는 종속됨
그러나 IAM은 어떤 리전에 만들든 상관 없음 == "글로벌 리소스"
aws 리소스 중에서 단 한 가지만 갖게 됨 == 전체 리전에서 단 하나의 리소스만 가지는 것을 의미함
terraform plan -parallelism=30
terraform plan -parallelism=30은 Terraform을 실행할 때 동시에 처리되는 작업의 수를 설정하는 옵션입니다.
-parallelism 옵션은 Terraform이 동시에 처리하는 작업의 개수를 제어하는 데 사용됩니다. 기본적으로 Terraform은 단일 작업을 순차적으로 처리하지만, 이 옵션을 사용하면 동시에 여러 작업을 처리할 수 있습니다.
-parallelism=30은 한 번에 최대 30개의 작업이 동시에 실행될 수 있음을 의미합니다. 작업은 Terraform이 수행해야 하는 리소스 생성, 업데이트, 삭제 등의 작업을 말합니다.
실제 Password 설정은 AWS 콘솔에서 하거나 AWS CLI에서 해야 함.
위 Terraform 코드를 통해 IAM user 를 생성해주었다고 하더라도, console 을 접속할 수 는 없습니다. 생성한 user의 password 가 설정되어있지 않기 때문입니다. 비밀번호와 MFA는 직접 console을 통해 설정해야합니다. 혹은 AWS CLI 를 통해서 자동화를 진행할 수 도 있습니다. 물론 테라폼을 통해 설정을 할 수 도 있으나, aws_iam_user_login_profile 을 사용해야합니다. 해당 리소스는 AWS와 Terraform 중급 수준의 이해가 있어야 사용이 편합니다.
중요한 건 코드의 형상과 리소스의 형상이 같아야 한다는 것!
코드로 기록을 한다는 건 그 자체가 문서가 된다는 것임
깃허브와 연결한다면 언제 내가 유저를 만들었는지, 어떻게 만들었는지, 왜 만들었는지 표기를 해서 효율적으로 관리 가능
반드시 해야 하는 것
AWS의 정책 평가 로직을 다 읽기
정확하게 이해하려고 노력해볼 것
그룹이든 IAM 유저든 Allow가 여러 개 명시되어 있으면 합쳐서 OR 조건으로 동작
어딘가에 Deny가 들어가 있으면 가장 먼저 우선됨
Cross Account - aws 어카운트가 나눠져서 권한이 움직이는 게 있음. 그때는 AND 조건으로 움직임.
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_evaluation-logic.html
aws iam ninja 강의 한 번 보기 (re:Invent)
aws terraform group policy 추가 해보기
https://registry.terraform.io/providers/PixarV/ritt/latest/docs/resources/iam_group_policy
Terraform을 통해 AWS IAM role과 policy 생성
EC2에 IAM role을 할당함으로써 해당 EC2는 권한을 사용할 수 있게 됨
aws_iam_instance_profile은 IAM 역할을 위한 컨테이너로서 인스턴스 시작 시 EC2 인스턴스에 역할 정보를 전달하는 데 사용됩니다. 만약 AWS Management 콘솔을 사용하여 Amazon EC2 역할을 생성하는 경우, 콘솔이 자동으로 인스턴스 프로파일을 생성하여 해당 역할과 동일한 이름을 부여합니다.
AWS IAM Policy
AWS의 접근하는 해당 권한을 정의하는 개체
Terraform을 사용하는 이유
방금 콘솔에서 지웠다는 걸 Terraform도 인지하고 있음
내가 생각한 리소스, 모양 그대로 코드를 만들고 실제 리소스와 같아지게 만드는 것
실수로 지웠음에도 코드로 원상복귀를 시키는 것