Terraform & AWS IoT Core

스마트팩토리 v2.0 프로젝트를 좀 더 클라우드 네이티브하게 발전시켜 보기로 했다. 물론 웹 콘솔을 이용해 서비스들을 구축해도 되겠지만, Terraform의 편리함에 눈을 떴기 때문에 Terraform으로 구축할 것이다. 따라서 사용해야 할 리소스들을 정리해보려고 한다.

AWS IoT Thing

연결하려는 디바이스는 aws_iot_thing이라는 리소스로 관리된다.

resource "aws_iot_thing" "example" {
  name = "example"

  attributes = {
    First = "examplevalue"
  }
}

name은 필수, 나머지는 옵션이다.

AWS IoT Thing Group

resource "aws_iot_thing_group" "parent" {
  name = "parent"
}

Thing Group으로 그룹화하여 사용할 수도 있다. 역시 name은 필수

AWS IoT Certificate

resource "aws_iot_certificate" "cert" {
  active = true
}

csr을 사용할 수도 있고 사용하지 않을 수도 있다. 당연히 csr을 사용하는 것이 보안측면에서는 더 좋은 선택이 될 것이다.

ca_certificate 리소스를 사용해서 자체 ca를 사용할 수도 있다. 대규모공장에서 자체인증서를 관리한다면 해당 리소스를 사용하면 될 것 같다.

이처럼 csr을 사용하지 않으면 aws쪽에서 생성한 키와 인증서를 다운로드 받아야 한다. Terraform의 local_file 리소스를 통해 지정해주면 된다.

AWS IoT Policy

resource "aws_iot_policy" "pubsub" {
  name = "PubSubToAnyTopic"

  # Terraform's "jsonencode" function converts a
  # Terraform expression result to valid JSON syntax.
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = [
          "iot:*",
        ]
        Effect   = "Allow"
        Resource = "*"
      },
    ]
  })
}

aws_iot_policy 리소스로 권한 설정도 필수적이다. 다른 aws 서비스들과 비슷하게 json형식으로 설정해주면 된다. 언제나 그렇지만 정책 부분은 예시와 aws 문서를 적극적으로 참고하면 좋다. 보안을 위해 발행자와 구독자별로 권한을 부여하는것은 필요할 것 같다.

AWS IoT Policy Attachment

data "aws_iam_policy_document" "pubsub" {
  statement {
    effect    = "Allow"
    actions   = ["iot:*"]
    resources = ["*"]
  }
}

resource "aws_iot_policy" "pubsub" {
  name   = "PubSubToAnyTopic"
  policy = data.aws_iam_policy_document.pubsub.json
}

resource "aws_iot_certificate" "cert" {
  csr    = file("csr.pem")
  active = true
}

resource "aws_iot_policy_attachment" "att" {
  policy = aws_iot_policy.pubsub.name
  target = aws_iot_certificate.cert.arn
}

작성했던 권한을 연결할 때 사용하는 리소스이다. policy에 연결하고 싶은 정책을 리소스로 연결해도 되고, 직접 json형식으로 입력해 관리할 수도 있다.

여기까지가 필수적인 리소스이다. 직접 실행해보고 필요한 부분은 덧붙여나가면 될 것 같다.

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다