跳到主要內容

發表文章

DevSecOps:如何使用 Ansible Vault 在 GitLab CI/CD 中安全管理秘密資訊

DevSecOps:如何使用 Ansible Vault 在 GitLab CI/CD 中安全管理秘密資訊 前言 以下是關於如何在 **GitLab CI/CD** 中使用 **Ansible Vault** 建立安全的 CI/CD 管道的詳細步驟。這將指導你從加密秘密資訊開始,到設置管道進行部署的完整過程。 準備 1. GitLab 帳戶 :確保已擁有一個 GitLab 帳戶並且已經設置好一個 repository。 2. 本地安裝 Ansible :需要在本地安裝 Ansible 來加密/解密秘密文件。 第一步:設置 Ansible 並創建加密的文件 1. 安裝 Ansible :    首先,確保已在本地機器上安裝了 Ansible。在 Ubuntu 上運行以下命令來安裝它:    ```bash    sudo apt-get install ansible    ```    如果使用其他操作系統,請參考官方的 [Ansible 安裝指南](https://docs.ansible.com/ansible/latest/installation_guide/index.html)。 2. 創建一個秘密文件:    在本地的工作目錄中,創建一個包含敏感資訊的 YAML 文件,例如:    ```yaml    # secret_vars.yml    db_username: myuser    db_password: supersecurepassword    api_key: someAPIkey12345    ``` 3. 使用 Ansible Vault 加密文件:    運行以下命令來加密 `secret_vars.yml` 文件:    ```bash    ansible-vault encrypt secret_vars.yml    ```    系統會提示你輸入一個密碼。記住這個密碼,因為你需要在 GitLab  Pipeline 中使用它。    你會看到 `secret_vars.yml` 文件已經被加密,內容看起來像這樣:    ```yaml    $ANSIBLE_VAULT;1.1;AES256    663336393839626139623061656136353937303330376437346539383266
最近的文章

Kubernetes中的TLS應用

  Kubernetes中的TLS應用 隨著資訊傳遞速度的快速增加和數據的廣泛使用,保障資料安全性已成為一個至關重要的議題。特別是在大規模應用中,例如容器化環境下的 Kubernetes(k8s)集群,通信安全性無疑是一個極為重要的環節。而透過 Transport Layer Security(TLS)技術的應用,我們能夠有效地保障通信的安全性。 Transport Layer Security(TLS)技術的應用 在資訊傳輸中,若敏感資料如使用者帳號和密碼以明文形式傳送,這對駭客來說是易於竊取的。因此,我們採用加密技術來保護這些敏感資訊,將其加密後再傳送給伺服器進行解密(即對稱加密)。 然而,在傳送加密金鑰的過程中,金鑰本身可能被竊取,這樣一來駭客就有可能用偷來的金鑰來解密敏感資訊。為了解決此問題,伺服器會生成一對公鑰(Public Key)和私鑰(Private Key)。公鑰會傳送給瀏覽器,瀏覽器使用公鑰將金鑰加密後再傳送回伺服器。伺服器可以使用私鑰解密獲取金鑰,這樣一來就能保障金鑰在傳遞過程中的安全性(即非對稱加密)。 然而,即使使用了非對稱加密,駭客仍然有可能透過釣魚網站的方式誘使使用者交出金鑰,因此我們需要確認連線對象是否是合法的網站。 建立連線時,瀏覽器會要求伺服器提供證書以驗證其身份。此證書包含了伺服器的公鑰以及發行機構的訊息。通過驗證這個證書,我們可以確認公鑰的合法性,從而判斷連線對象是否是合法的網站。 然而,駭客也有可能偽造證書,因此為了避免這種情況的發生,各個證書授權機構會生成一對公私鑰。在發出證書之前,證書授權機構會使用私鑰對證書進行加密。這樣一來,瀏覽器在獲得證書後可以使用內建的公鑰對其進行解密,以驗證證書的合法性。 TLS 在 Kubernetes 中的重要性 在 Kubernetes 集群中,無論是 API Server、Pod 之間的通信,還是其他組件之間的通信,都需要得到安全保護。TLS 技術的應用使得這些通信變得安全可靠,有效地防止了敏感信息的泄露和不良攻擊的發生。 為了識別各個元件的身份,我們在 Kubernetes 環境中設置了相應的 client certificate 和 server certificate。 舉例來說,System admin user、Kube Scheduler、Kube Controll Mana

Kubernetes 系統中 ETCD 備份還原教學

Kubernetes 系統中 ETCD 備份還原教學 在 Kubernetes 系統中,ETCD 是一個關鍵的組件,負責存儲系統中的所有配置資料。為了確保在災難發生時可以快速恢復系統狀態,定期備份和還原 ETCD 是至關重要的。以下是一個簡單的教學,介紹了如何在 Kubernetes 系統中進行 ETCD 的備份和還原。 備份 ETCD 1. 使用以下指令查找 ETCD 對外的連接端點: bash kubectl describe pods -n kube-system etcd-controlplane | grep advertise-client-urls    獲取到 Endpoint,例如:https://10.1.218.16:2379。 2. 使用以下指令查找憑證位置: bash kubectl describe pods -n kube-system etcd-controlplane | grep pki    確定憑證位置,例如:    - Cert File: /etc/kubernetes/pki/etcd/server.crt    - Key File: /etc/kubernetes/pki/etcd/server.key    - CA Cert File: /etc/kubernetes/pki/etcd/ca.crt 3. 使用以下指令備份 ETCD 資料庫: bash ETCDCTL_API=3 etcdctl \ --endpoints=https://10.1.220.8:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key snapshot save /opt/cluster1.db 還原 ETCD 1. 使用以下指令還原 ETCD 資料庫: bash ETCDCTL_API=3 etcdctl \ --endpoints=https://10.1.220.8:2379 \ --cacert=/etc/etcd/pki/ca.pem \ --cert=/etc/etcd/pki/etcd.pem

深入理解 Docker 網路設置:Bridge 模式原理與實現

深入理解 Docker 網路設置:Bridge 模式原理與實現 在使用 Docker 建立容器並指定網路為 Bridge 模式時,Docker 使用了多項技術來實現容器與Host的網路通信。以下將深入探討這些技術的原理以及如何實現,幫助大家更好地理解 Docker 網路設置。 使用 Veth Pair 實現容器與Host的通信 Docker 在建立容器時使用了 veth pair 技術。這是一種在容器的 Network Namespace 和Host之間建立虛擬網路介面的方法。其中一端連接到容器的 Network Namespace 中,另一端連接到Host的 docker0 介面(虛擬交換機),從而實現容器與 Host 的網路通信。 bash # Docker 在安裝過程中會建立一個 docker0 的網路介面 ip link add docker0 type bridge # 設定作為 Network Namespace 與Host通訊的 Gateway IP ip addr add 172.17.0.1/16 dev docker0 做完以上的動作後,會生成 172.17.0.0/16 的網路環境,接下來 Docker 會執行以下的動作,將容器的網路與 Host 間的網路通道給建立起來: 1. 創建 Veth Pair: bash # Docker 在安裝過程中會建立一個 docker0 的網路介面 ip link add eth0@if? type veth peer name veth????@if? 其中,eth0@if? 是容器內的網路介面名稱,veth????@if? 則是連接到 Host 的虛擬交換機(docker0)的介面名稱。(? 是一串隨機字元) 2. 將網路介面(eth0@if?)加入容器的 Network Namespace 中: bash ip link set eth0@if? netns ${CONTAINER-NAMESPACE} 3. 將另一端的介面(veth????@if?) 加入到 Host 的虛擬交換機(docker0)中: bash ip link set veth????@if? master docker0 4. 在容器的 Network Namespace 中,為 eth0@if? 介面設置 IP 地