본문 바로가기
INFRA/Operation

Terraform 리소스의 개념 이해 - AWS 4편

by BTC_지수 2022. 10. 18.

안녕하세요! 하씨가문의 영광입니다!

 

오늘도 계속해서 Terraform으로 AWS를 구축할때 쓰이는 리소스들에 대해서 알아볼텐데요!

한번 시작을 해볼까요~! 고고~!!

 

 

aws_iam_user

 

resource "aws_iam_user" "lb" {
  name = "loadbalancer"
  path = "/system/"

  tags = {
    tag-key = "tag-value"
  }
}

resource "aws_iam_user" "lb" { } 블록내의 인수는 다음과 같습니다.

 

<필수>

name : 사용자의 이름입니다. 이름은 공백 없이 대문자와 소문자, 영숫자로 구성되어야 합니다.

다음 문자(= , . @ - _ )를 포함할 수도 있습니다. 사용자 이름은 대소문자로 구분되지 않습니다. 예를 들어, "TESTUSER"와 "testuser"라는 이름의 사용자를 모두 만들 수 없습니다. 

 

<선택 사항>

path : 사용자를 생성할 경로입니다. 기본은 " / " 입니다.

permissions_boundary : 사용자의 권한 경계를 설정하는 데 사용되는 정책의 ARN입니다.

force_destroy : user를 폐기할 때 Terraform에서 관리하지 않는 IAM Access key, 로그인 프로필 또는 MFA 장치가 있더라도 폐기하십시오. force_destroy를 사용하지 않으면 Terraform 관리 액세스 키가 user 와 로그인 프로필은 삭제되지 않을것입니다.

tags : IAM 사용자에 대한 태그의 Key-Value 맵입니다. provider default_tags 구성 블록이 있는 경우, 일치하는 키를 가진 태그가 공급자 수준에서 정의된 태그를 덮어씁니다.

 

 

aws_iam_user_policy

 

resource "aws_iam_user_policy" "lb_ro" {
  name = "test"
  user = aws_iam_user.lb.name

  # 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 = "*"
      },
    ]
  })
}

resource "aws_iam_user_policy" "lb_ro" { } 블록내의 인수는 다음과 같습니다.

 

<필수>

policy : 정책 문서입니다. 이게 이 리소스에서 제일 주요건인데요 이것은 JSON 형식의 문자열입니다. Terraform을 사용하여 AWS IAM 정책 문서를 구축하는 방법에 대한 자세한 내용은 AWS IAM 정책 문서 안내서를 참조하시면 됩니다.

user : 이 정책을 연결할 IAM user 입니다.

 

<선택 사항>

name : 정책의 이름입니다. 생략하면 Terraform은 임의의 고유한 이름을 할당합니다.

name_prefix : 지정된 접두사로 시작하는 고유한 이름을 만듭니다. name과 상충합니다.

 

aws_iam_user_policy_attachment

 

resource "aws_iam_user_policy_attachment" "test-attach" {
  user       = aws_iam_user.user.name
  policy_arn = aws_iam_policy.policy.arn
}

resource "aws_iam_user_policy_attachment" "test-attch" { } 블록내의 인수는 다음과 같습니다.

 

<필수>

user : 정책을 적용해야 하는 사용자 입니다.

policy_arn : 적용하려는 정책의 ARN 입니다.

 

aws_iam_role

resource "aws_iam_role" "test_role" {
  name = "test_role"

  # Terraform's "jsonencode" function converts a
  # Terraform expression result to valid JSON syntax.
  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Sid    = ""
        Principal = {
          Service = "ec2.amazonaws.com"
        }
      },
    ]
  })

  tags = {
    tag-key = "tag-value"
  }
}

resource "aws_iam_role" "test_role" { } 블록내의 인수는 다음과 같습니다.

 

<필수>

assume_role_policy : Entity가 역할을 맡을 수 있는 권한을 부여하는 정책입니다.

 

assume_role_policy는 표준 IAM 정책과 매우 유사하지만 약간 다르므로 aws_iam_policy  리소스를 사용할 수 없습니다. 그러나 aws_iam_policy document 데이터 소스는 사용할 수 있습니다. 

 

<선택 사항>

description : 역할에 대한 설명입니다.

force_detach_policies : 역할을 제거하기 전에 역할에 있는 정책을 강제로 분리할지 여부입니다. 기본값은 false입니다.

inline_policy : IAM 역할과 연결된 독점 IAM 인라인 정책 세트를 정의하는 구성블록입니다. 블록이 구성되지 않은 경우 Terraform은 이 리소스의 인라인 정책을 관리하지 않습니다. 하나의 빈 블록(예: inline_policy {})을 구성하면 Terraform이 적용 시 대역 외 추가된 모든 인라인 정책을 제거합니다.

managed_policy_arns : IAM role에 연결할 독점 IAM 관리형 정책 ARN 집합입니다. 이 속성이 구성되지 않은 경우 Terraform은 이 리소스에 대한 정책 첨부를 무시합니다. 구성하면 Terraform은 관리형 정책을 연결하거나 분리하여 역할의 관리형 정책 연결을 이 세트와 정렬합니다. 빈 집합(예: managed_policy_arns = [ ])을 구성하면 Terraform이 모든 관리형 정책 첨부 파일을 제거합니다.

max_session_duration : 지정된 역할에 대해 설정하려는 최대 세션 기간(초) 입니다. 이 설정의 값을 지정하지 않으면 기본 최대값인 1시간이 적용됩니다. 이 설정은 1시간에서 12시간 사이의 값을 가질 수 있습니다.

name : role의 이름입니다. 생락하면 Terraform은 임의의 고유한 이름을 할당합니다.

name_prefix : 지정된 접두사로 시작하는 고유한 이름을 만듭니다. name과 상충합니다.

path : 역할의 경로입니다. 

permissions_boundary : 역할에 대한 권한 경계를 설정하는 데 사용되는 정책의 ARN입니다.

tags : IAM 역할에 대한 태그의 Key-Value 맵입니다. Provider default_tags 구성 블록이 있는 상태로 구성된 경우 일치하는 키가 있는 태그가 제공자 수준에서 정의된 태그를 덮어씁니다.

 

 

 

aws_iam_role_policy

 

resource "aws_iam_role_policy" "test_policy" {
  name = "test_policy"
  role = aws_iam_role.test_role.id

  # 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 = "*"
      },
    ]
  })
}

resource "aws_iam_role_policy" "test_policy" { } 블록내의 인수는 다음과 같습니다.

 

<필수>

policy : 인라인 정책 문서입니다. 이것은 JSON 형식의 문자열입니다. Terraform으로 IAM 정책 문서를 구축하는 방법에 대한 자세한 내용은 AWS IAM 정책 문서 안내서를 참조하시면 됩니다.

role : 정책에 연결할 IAM 역할의 이름입니다.

 

<선택 사항>

name : 역할 정책의 이름입니다. 생략하면 Terraform은 임의의 고유한 이름을 할당합니다.

name_prefix : 지정된 접두사로 시작하는 고유한 이름을 만듭니다. name과 상충합니다.

 

 

 

aws_iam_role_policy_attachment

 

resource "aws_iam_role_policy_attachment" "test-attach" {
  role       = aws_iam_role.role.name
  policy_arn = aws_iam_policy.policy.arn
}

resource "aws_iam_role_policy_attachment" "test-attach" { } 블록내의 인수는 다음과 같습니다.

 

<필수>

role : 정책을 적용해야 하는 IAM 역할의 이름 입니다.

policy_arn : 적용하려는 정책의 ARN 입니다.

 

 

 

오늘은 IAM user 과 IAM role을 Terraform 상으로는 어떻게 구성하는지, 어떤 리소스가 사용되는지 한번 알아보았는데요!

이번내용도 많은 도움이 되셨기를 바라며!! 다음주에 만나뵐게요~!

 

 

 

 

댓글