iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0

這邊不是要介紹AWS Security Group, 這邊先預設大家都知道什麼是 AWS Security Group 是幹嘛的,所以這邊就不多敘述

然而 Security Group 對於Machine Learning Engineer 再做 infrastructure 的時候,可幫助你的model endpoint 可以限制存取的來源

這篇主要會介紹的是

Which configuration is most important in Security Group?

egress 的部分必較單純,簡單來講就是內部出去的服務,這個大家都比較沒問題,大部分的情況下並不會去特別設置到。另外還有 ingress 的部分我們會在下一個part 來講怎麼設至 ingress

而這邊就簡單利用 resource 的功能來建立 security group,但是要特別注意的地方就是 vpc 的部分,因為 security group 需要 vpc 下面,所以這邊也可使用 depend_on VPC 的方式,等vpc 建立完成後再來建立自己的 security group。

resource "aws_security_group" "my_security_group" {
  name        = "my-security-group"
  description = "Security group for my service and endpoint"
  vpc_id      = module.vpc.vpc_id

	# 這邊就可以直接設定 egress & ingress rule 這邊稱之為 security rule
  egress {
    from_port        = 0
    to_port          = 0
    protocol         = "-1"
    cidr_blocks      = ["0.0.0.0/0"]
    ipv6_cidr_blocks = ["::/0"]
  }
}

這邊特別強調 security group 的原因,是因為在 AWS 裡面,如果你要存取自己的 service (MLFlow Dashboard) and model endpoints 的話,就需要把 Security Group 設置好,限制那些IP只能存取哪些服務,甚至過濾掉那些port number can be accessed,有時候沒設置好會造成恐慌,可能會懷疑自己是pod 沒建立起來,還是 security group 沒設置好,所以這塊的觀念要很紮實。

How to setting the Ingress and Egress through terraform ?

前面先透過 Terraform 來建立 AWS Security Group ,而這邊要搭配前幾天說的 Variable 的部分下去建立,所以再看到下方的 aws_security_group_rule 這可以看到 cidr_blocks 這邊設置把自己的 var.MY_IP 也直接帶入進去,當然這個 Rule 的部分一定要指定設置在哪個 Security group 上面,所以那邊有一個 Required 的參數就是 security_group_id

而 Security Group 跟 Security Group rule 是兩個不同的resource,所以可以分開來建立,因此我們這邊會額外來建立 Security Group Rule,這樣如果要改變IP的話,我就不用修改我的 Security Group 。

variable "MY_IP" {
	description = "this is my ip"
	default = "192.168.0.1/32"
}

resource "aws_security_group_rule" "ingress_allow_my_ip" {
  type              = "ingress"
  description       = "This is MY IP address"
  from_port         = 0
  to_port           = 0
  protocol          = "-1" # 
  cidr_blocks       = var.MY_IP
  security_group_id        = aws_security_group.my_security_group.id
  depends_on               = [aws_security_group.my_security_group]
}

resource "aws_security_group_rule" "ingress_allow_default_sg" {
  type                     = "ingress"
  description              = "This is taipei office IP address"
  from_port                = 0
  to_port                  = 0
  protocol                 = "-1"
  source_security_group_id = data.aws_security_group.default_sg.id
  security_group_id        = aws_security_group.my_security_group.id
  depends_on               = [aws_security_group.my_security_group]
}

這邊再補充一個觀念,因為 Terraform 是屬於 stateful 的形式,所以如果你把 Security Group 刪除後再建立,雖然名稱一樣,但是 Security Group ID 會完全不一樣,如果妳其他的有吃到這個原本ID當參數的話,這樣就要改動的範圍很大,甚至有可能服務都會需要關掉再重啟。所以這邊再設置的話需要謹慎操作

以上說明,大致如此


上一篇
{Day 12: Terraform variable tips- part 2}
下一篇
{Day 14: AWS 101 - EC2 & EBS }
系列文
Don't be a Machine Learning Engineer30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言