티스토리 뷰
AWS IAM(Identity and Access Management)
AWS 리소스에 대해 인증과 권환을 부여해, 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스
기능
- 액세스 관리를 통해 계정에서 보안 주체 엔터티에 허용된 권한을 정의할 수 있음(define what a principal entity is allowed to do in an account)
- 여러 사람이 AWS 계정에 대한 Shared Access 를 할 수 있음
- MFA (멀티 팩터 인증)
- 등
정의할 요소
보안 주체 엔터티 (principle entity) | - person (user) 또는 group - application (role) |
허용된 권한 관리 | - policy (정책) |
- AWS는 IAM 엔터티(사용자 또는 역할)가 요청을 보낼 때 Policy(허용된 권한)을 평가
- 계정 권한에 대해 IAM role,rbac 또는 ACL을 사용
- policy는 보통 json 파일을 이용
Terraform 으로 IAM 구성하기
aws_iam_policy_document
- terraform resource가 아니라 data source임
- 만약 resource 타입을 사용하려면 aws_iam_policy 를 사용해야 함
- aws의 ${. . . } 문법이 기존 terraform 의 interpolation 과 충돌하기 때문에, terraform 의 interpolation을 쓰기 위해서는 ${...}을 사용하고, aws의 policy variable을 쓰기 위해서는 &{...}을 사용
- json 포맷의 iam policy documnet를 생성해줌
- 이 리소스를 쓰는 방법 대신, terraform 에서 json 문자열을 주입하거나, file을 읽는 방법도 있음
aws_iam_role
- 만약 정책이 aws_iam_policy_attachment_resource를 통해서 role에 부착된 상항에서, role의 이름이나 경로를 변경하려 한다면, force_detach_policies_argument 를 true를 설정해야 한다. (aws_iam_role-policy_attachment 의 경우 이 설정을 하지 않아도 됨)
aws_iam_policy
resource "aws_iam_policy" "policy" {
name = "test_policy"
path = "/"
description = "My test policy"
# Terraform's "jsonencode" function converts a
# Terraform expression result to valid JSON syntax.
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = [
"ec2:Describe*",
]
Effect = "Allow"
Resource = "*"
},
]
})
}
aws_iam_role_policy_attachment
- policy를 role에 부착
AWS instance profile
인스턴스마다 어플리케이션의 자격증명 어려움 | 어플리케이션은 AWS credential 로 API 요청에 서명해야하기 때문에, EC2 인스턴스에서 인스턴스의 credential 을 관리해야한다. 각 인스턴스마다 (특이 Auto scaling 그룹의 인스턴스에 대해) credential을 관리하기 어렵다. |
그래서 IAM 역할을 사용 | 애플리케이션이 사용하는 보안 자격 증명을 직접 관리할 필요 없이 IAM 역할을 사용하여 API 요청 전송 권한을 위임할 수 있다. ex) Amazon S3의 버킷을 사용해야 하는 애플리케이션에 해당 권한을 부여 가능 |
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html
terraform 에서 aws_iam_instance_profile
resource "aws_iam_instance_profile" "test_profile" {
name = "test_profile"
role = aws_iam_role.role.name
}
resource "aws_iam_role" "role" {
name = "test_role"
path = "/"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}
'CLOUD > AWS' 카테고리의 다른 글
[AWS] ECS 네트워크 모드 (0) | 2024.05.02 |
---|---|
[AWS] EKS (Amazon Kubernetes) 구성요소 (0) | 2022.09.12 |
[AWS] Lambda (0) | 2022.09.07 |
[AWS] eks 에 External DNS 설정하기 (Route53 사용하기) (0) | 2022.09.07 |
[Terraform] aws_launch_template 시작 템플릿 (0) | 2022.08.30 |