aws 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹서비스
IAM을 사용하여 리소스를 사용하도록 인증 및 권한 부여된 대상을 제어함
보안에서 Blocking 영역을 담당
보안
IAM user : AWS 내에서 생성하는 사용자로 AWS와 상호작용하는 사용자 or 어플리케이션을 의미
IAM group : IAM user의 집합, 그룹을 사용함으로써 다수 사용자에 대하여 동일한 권한을 보다 쉽게 관리
IAM role : AWS IAM Role은 특정 권한을 가진 IAM 자격증명. Role을 사용함으로써 특정 사용자 or 어플리케이션 or AWS 자원 or 서비스에 접근 권한 위임 가능 . ec2에 IAM Role을 할당해서 그 ec2가 IAM Role의 권한을 사용할 수 있게 함
IAM policy : 권한 그 자체. AWS의 접근하는 해당 권한을 정의하는 개체로 AWS IAM 리소스들과 연결해서 사용 가능
예시 코드
Effect : "Allow" / "Deny"
: 기본적으로 IAM 사용자에게는 리소스 및 API 작업을 사용할 권한이 없으므로 모든 요청이 거부됨
Action : action은 권한을 부여하거나 거부할 특정 API 작업
: ex) s3:GetObject ( s3에 저장된 객체들 다운받는 작업 )
Resource : 작업의 영향을 받는 리소스. 어떤 리소스에 action을 취할지 정함. ARN(Amazon Resource Name)을 사용하거나 명령문이 모든 리소스에 적용됨을 표시하는 와일드카드(*)을 사용
Condition : 선택 사항. 정책이 적용되는 시점을 제어. 다양한 조건을 넣어 권한 부여 가능 ( ex: IP,VPC => 이 ip/VPC 일 때만 허용해라 )
IAM은 리전 종속적인 서비스 X
provider.tf 생성
iamuser.tf
terraform init -> terraform plan -> terraform apply
aws 콘솔에서 테라폼 코드로 생성한 iam user 확인
iam user 로그인하기 위해 aws 콘솔에서 액세스관리 -> 사용자 -> 보안 자격 증명 -> 콘솔 액세스 활성화 -> 비밀번호 생성
putty에서 로그인 가능
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_evaluation-logic.html
resource "aws_iam_role_policy" "hello_s3" {
name = "hello-s3-download"
role = aws_iam_role.hello.id
# 어떠한 iam role과 연결할지 명시해주는 코드 !! 중요 !!
policy = <<EOF
{
"Statement": [
{
"Sid": "AllowAppArtifactsReadAccess",
"Action": [
"s3:GetObject"
],
"Resource": [
"*"
# 모든 리소스에 대해서
],
"Effect": "Allow"
# 허용
}
]
}
EOF
}
resource "aws_iam_instance_profile" "hello" {
name = "hello-profile"
role = aws_iam_role.hello.name
}
iam policy : aws에 해당하는 권한을 가지는 실제 개체
AWS Managed policy: AWS에서 먼저 생성해놓은 Policy set. 사용자가 권한(Permission)을 변경할 수 없음.
Customer Managed policy: User 가 직접 생성하는 Policy 로 권한을 직접 상세하게 만들어 관리할 수 있음
user policy 생성
super-admin (예시) 정책 추가
어떤 유저에 정책을 할당할지 정하기 위해 user 이름 명시
resource "aws_iam_user_policy" "art_devops_black" {
name = "super-admin"
user = aws_iam_user.doyoung_kim.name
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"*"
],
"Resource": [
"*"
]
}
]
}
EOF
}
.aws/credentail에 있는 내용을 지우면 aws s3 ls 명령어에 대한 권한이 없어서 명령어 사용 불가능