스마트팩토리 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형식으로 입력해 관리할 수도 있다.
여기까지가 필수적인 리소스이다. 직접 실행해보고 필요한 부분은 덧붙여나가면 될 것 같다.
답글 남기기