Alan's BLOG
  • archives
  • posts
  • tags
  • about
  • quote
  • search
Home » Tags

gcp

自動化SSL憑證監控與到期通知系統

👨‍💻簡介 最近因為憑證越來越多,需要監控什麼時候到期,當到期時發送到期通知,因此撰寫一個簡單的小程式來完成。 這次使用Python和Telegram Bot來監控SSL證書的到期時間並發送通知。並使用GCP工具,如CloudFunction和CloudScheduler做部署平台。 🛠️使用工具 Python 3.9 Telegram Bot(Webhook) CloudFunction CloudScheduler 📝功能需求 取得憑證到期時間 到期後發送通知 透過 Telegram Bot 發送訊息 讀取 yaml domain list 設定環境變數 CloudFunction 設定 CloudScheduler 排程設定 🎯Setup 1. 取得憑證到期時間 def get_ssl_cert_expiry_date(domain): """ 取得 SSL 證書的過期日期。 參數: domain (str): 需要檢查SSL證書過期時間的域名。 返回: datetime: SSL證書的過期日期,如果獲取失敗則返回None。 """ # 建立SSL上下文,建立一個安全的“環境”來管理SSL設定和操作 ssl_context = ssl.create_default_context() # 包裝socket對象,將基礎的socket通訊轉變為加密通訊 conn = ssl_context.wrap_socket(socket.socket(socket.AF_INET), server_hostname=domain) # 設定連接的超時時間為 3 秒,防止長時間等待 conn.settimeout(3.0) try: # 通過加密的連線嘗試連接到服務器的443端口(HTTPS) conn.connect((domain, 443)) # 取得服務器的SSL證書訊息 ssl_info = conn.getpeercert() # 解析證書中的過期時間 expire_date = datetime....

2024-04-07 · 4 min · 669 words · Alan

使用 Terraform 在 GCP 上建立 Cloud Armor

👨‍💻 簡介 本文說明如何在 Google Cloud Platform (GCP) 上使用 Terraform 配置 Google Cloud Armor 安全策略。 前提條件 Google Cloud Platform (GCP) 帳號:確保有一個有效的 GCP 帳號。 安裝 Terraform:還沒安裝可以參考 Terraform 安裝指南。 基礎 Terraform 知識:熟悉基本的 Terraform 命令和概念,如果需要,可參考Terraform 入門指南 。 🎯 設定 步驟 1:建立 provider.tf 定義 GCP 提供者和所需的 Terraform 版本。 terraform { required_providers { google = { source = "hashicorp/google" version = "5.7.0" } } } provider "google" { project = "your-project-id" region = "asia-east1" } 步驟 2:建立 main....

2023-12-09 · 3 min · 516 words · Alan

使用 Terraform 在 GCP 上建立外部和內部的全球 IP 地址

👨‍💻簡介 這篇文章將會說明如何快速在 Google Cloud Platform 上使用 Terraform 建立外部與內部的全球 IP 。 前提條件 Google Cloud Platform (GCP) 帳號: 確保有一個有效的 GCP 帳號。 安裝Terraform: 還沒安裝可以參考 Terraform 安裝指南 。 基礎 Terraform 知識: 瞭解基本的 Terraform 命令和概念,如果需要,可參考 Terraform 入門指南。 🎯setup 步驟 1:建立 provider.tf 定義GCP Provider 和所需的 Terraform 版本。 terraform { required_providers { google = { source = "hashicorp/google" version = "5.7.0" } } } provider "google" { project = "project-id" region = "asia-east1" } 步驟 2:建立 main.tf 在此檔案中定義全球 IP 地址資源。...

2023-11-28 · 3 min · 456 words · Alan

使用 Terraform 在 GCP 上建立外部和內部的區域 IP 地址

👨‍💻 簡介 這篇文章將會說明如何快速在 Google Cloud Platform 上使用 Terraform 建立外部和內部的區域 IP 。 前提條件 Google Cloud Platform (GCP) 帳號: 確保有一個有效的 GCP 帳號。 安裝 Terraform: 還沒安裝可以參考 Terraform 安裝指南 。 基礎 Terraform 知識: 瞭解基本的 Terraform 命令和概念,如果需要,可參考 Terraform 入門指南。 🎯setup 1:建立 provider.tf 定義 GCP Provider 和所需的 Terraform 版本。 terraform { required_providers { google = { source = "hashicorp/google" version = "5.7.0" } } } provider "google" { project = "project-id" region = "asia-east1" } 2:建立 main....

2023-11-25 · 1 min · 182 words · Alan

如何在GCP以及AWS設定 remote backend 管理 terraform 狀態檔

👨‍💻簡介 terraform在每次執行terraform plan或terraform apply時,是如何知道應該要管理哪些資源? 其實就是透過在每次執行terraform時,將建立或要變更的資源都記錄在terraform.state這份狀態檔,預設檔案使用JSON格式。 假設建立一個google cloud storage的resource,tf設定檔如下: resource "google_storage_bucket" "bucket" { name = "terraform-alan-test-bucket" location = "ASIA-EAST1" storage_class = "STANDARD" public_access_prevention = "enforced" force_destroy = true uniform_bucket_level_access = true } 建立後的terraform.tfstate的一小部分如下: { "version": 4, "terraform_version": "1.5.7", "serial": 3, "lineage": "abda0fda-b807-b8b3-0a36-8b0c2f92e3f5", "outputs": {}, "resources": [ { "module": "module.base-bucket", "mode": "managed", "type": "google_storage_bucket", "name": "bucket", "provider": "module.base-bucket.provider[\"registry.terraform.io/hashicorp/google\"]", "instances": [ { "schema_version": 1, "attributes": { "autoclass": [], "cors": [], "custom_placement_config": [], "default_event_based_hold": false, "effective_labels": {}, "encryption": [], "force_destroy": true, "id": "terraform-alan-test-bucket", "labels": null, "lifecycle_rule": [], "location": "ASIA-EAST1", "logging": [], "name": "terraform-alan-test-bucket", } } ] } ] } 可以看到id的屬性,當每次執行plan或是apply時,terraform就是拿這個屬性從本地terraform設定檔與雲上資源做比對。...

2023-10-28 · 6 min · 1143 words · Alan

GCP Cloud NAT:Overview

服務上雲後有時會需要固定一組IP主動對外發出連線,這時要考慮安全性與獨立性的問題,在爬文後發現了GCP推出的Cloud NAT,本篇文章簡單介紹一下這個工具的使用。 什麼是Cloud NAT GCP Cloud NAT是GCP上的一種服務,它提供了一個管理和部署Google Cloud上的NAT(Network Address Translation)的解決方案。 GCP Cloud NAT能夠讓使用者在不公開VM或GKE的外網IP情況下,透過共用一組IP對外溝通,外部服務無法直接存取Cloud NAT 閘道後的任何資源,確保了服務的安全性。 什麼時候使用Cloud NAT 在需要使用私有IP地址與外網連接時,可以使用Cloud NAT。 例如:在Pod訪問外網時需要固定Public IP的情境下會使用到。 如何使用Cloud NAT 準備環境 設定gcloud至正確專案 gcloud config set project <PROJECT_ID> 建立VPC網路與子網路 建立一台無外網的vm,region選asia-east1 ,zone選asia-east1-b,網路選剛剛建立的nat-network,子網選nat-subnet-192 建立防火牆並允許35.235.240.0/20網段,允許tcp 22 port,目標為無外網的vm 到IAP頁面並選擇SSH和TCP資源設定權限 到剛剛建立的vm curl httpbin.org/ip,此時應該是無法連線到外部 設定NAT 到Cloud NAT建立NAT gateway,並選擇稍早創建的VPC以及創建Router 這時候在curl一次就會有一組對外ip了,此ip即為nat自動幫我們創建的外部ip 有了 Cloud NAT ,可以在不使用外部ip的情況下,與外網連線且同時阻擋了由外部的存取,增加了不少安全性,降低主機被攻擊的風險。 Reference Cloud NAT overview | Google Cloud Set up Cloud NAT with Compute Engine | Google Cloud 利用 Cloud NAT 維持雲端的獨立性與安全性 - PeerOne Technology 皮偶玩互動科技 - Medium

2023-04-12 · 1 min · 76 words · Alan

gcp遠端連線的幾種方式

Intro🧑‍💻 紀錄有哪些方式可以ssh到gce機器 放key到中繼資料 Compute Enging -> 中繼資料 -> 安全殼層金鑰 使用TCP Tunneling gcloud compute start-iap-tunnel --project project-id --zone vm-zone --local-host-port 127.0.0.1:10001 vm-host 22 使用gcloud ssh gcloud compute ssh --zone vm-zone vm-host --tunnel-through-iap --project project-id 可編寫tunnel的script ## dev gcloud compute start-iap-tunnel dev-border 22 --local-host-port 127.0.0.1:10120 --zone asia-east1-b --project gcp-project & ## test gcloud compute start-iap-tunnel test-border 22 --local-host-port localhost:10121 --zone asia-east1-b --project gcp-project & ## prod gcloud compute start-iap-tunnel prod-border 22 --zone asia-east1-b --local-host-port 127....

2023-02-09 · 1 min · 100 words · Alan

在 GCP 環境下使用 Ansible 自動化建立 ELK Stack

📔心得 最近,我在探索 Ansible 自動化工具的過程中,決定運用它來建立 ELK Stack,這是我之前使用 Docker 建立的經驗的延伸。在這個過程中,我想分享一下我的學習心得。 尋找資源 我開始了解 ELK Stack 的安裝過程,首先閱讀了官方文件,熟悉了整個設置流程。接著,我尋找 Ansible 中相關的模組,這讓我更好地理解如何在 Ansible 中實現相同的步驟。 目錄結構的重要性 在撰寫 Ansible Playbook 過程中,我學到了良好的目錄結構是多麼重要。我從最初只有一個主要的 main.yml 開始,逐漸分解出根目錄下的多個 .yml 檔案,然後使用 include 來引入任務。這種結構讓整個 Playbook 更加模組化,易於管理。 使用模板和變數 在創建模板時,我發現了 Jinja2 語法的威力。我可以直接套用變數,這讓我的模板在複製到目標主機時能自動載入所需的參數。此外,我還學會了如何根據我的主機清單(inventory)來動態設定這些參數,這真是強大的功能。 感謝凍仁大的指南 我要特別感謝凍仁大(作者)的 Ansible 教程,我從他的 Ansible GitBook 中學到了許多寶貴的資訊。他的教程簡潔明瞭,對於初學者也非常友好。他的教程甚至提供了 Ansible 在使用 Docker Compose 方面的實際練習,這讓我能更好地掌握 Ansible 的操作技巧。另外,使用 Jupyter Notebook 執行 Ansible 模組也讓我的學習過程更加便利。 如果你對於 Ansible 自動化配置技巧感興趣,我推薦你閱讀這份凍仁大的 Ansible 指南,連結在下方: 🔗凍仁大ansible指南 –> 現代 IT 人一定要知道的 Ansible 自動化組態技巧 此外,我還將我使用 Ansible 建立 ELK Stack 的 Playbook 放在了以下的 GitHub 倉庫,歡迎參考:...

2022-10-17 · 2 min · 338 words · Alan
© 2024 艾倫的程式之旅 Powered by Hugo & PaperMod