端到端全能加密平臺 - Phase
Phase
是一個開源(核心)的端到端可自託管的全能加密平臺,用於在你的基礎架構中供開發人員管理祕鑰和環境變量。
功能特性
-
控制檯:無縫創建、管理、輪換機密數據和環境變量的儀表盤
-
保護您的密鑰:通過 24 個單詞的助記符短語保持自己的根密鑰的自主性
-
密鑰管理:差異化、版本控制和時間點恢復
-
RBAC:每個應用程序、每個環境的細粒度、基於角色和密碼的訪問控制
-
服務令牌:使用細粒度範圍對 CI 運行器、構建工具和生產環境進行身份驗證
-
密碼引用:繼承密碼以創建複雜的配置
-
審計日誌:對每個更改和訪問事件完全可見
-
自託管:在自己的基礎設施上運行階段
-
KMS:零知識密鑰管理服務
-
SDK:使用幾行代碼加密 / 解密數據。
命令行工具
通過 Phase 的命令行工具可以在幾秒鐘之內將機密數據導入、加密並注入到你的應用程序中,無需修改任何代碼。
# Your existing secrets
> cat .env
AWS_ACCESS_KEY_ID="AKIA2OGYBAH63UA3VNFG"
AWS_SECRET_ACCESS_KEY="V5yWXDe82Gohf9DYBhpatYZ74a5fiKfJVx8rx6W1"
# Import your existing secrets
> phase secrets import .env
Successfully imported and encrypted 2 secrets.
To view them please run: phase secrets list
# View your secrets in Phase
> phase secrets list
KEY 🗝️ | VALUE ✨
----------------------------------------------------------------------------------------------------
AWS_ACCESS_KEY_ID | AKI**************NFG
AWS_SECRET_ACCESS_KEY | V5y**********************************6W1
🥽 To uncover the secrets, use: phase secrets list --show
# Get rid of your .env
> rm .env
# Seamlessly inject secrets during runtime
> phase run yarn dev
$ next dev
ready - started server on 0.0.0.0:3000, url: http://localhost:3000
-
Phase CLI 命令行工具可以獲取、解密祕密和環境變量並將其注入到您的應用程序中,不需要更改代碼。
-
注入
-
以
dotenv
格式導出機密數據 -
跨平臺:在 macOS、Ubuntu/Arch/Redhat/Alpine Linux、Windows、Docker 上輕鬆安裝 Phase CLI。
-
Keyring 集成 - 將密鑰和憑據安全地存儲在 macOS 鑰匙串、Windows Credential Locker、KDE 錢包、GNOME Keyring 等。
-
私鑰分片:通過祕密分割方案避免私鑰的單點泄露
安裝
最快、最可靠的開始方法是在 Phase Console 上創建一個新的免費帳戶:https://console.phase.dev/。
爲了滿足各種合規要求或僅僅是爲了保持對數據的控制,您可能希望自託管 Phase 而不是使用 Phase 雲服務。當您在自己的基礎架構上自託管 Phase 服務時,您將獨自承擔安全性、可靠性和可用性方面的責任。您需要設置有效的 TLS 證書、Web 應用防火牆、數據庫備份和複製、DDoS 保護、速率限制、SSO 等。目前支持如下幾種方式:
-
Docker Compose
-
AWS
-
Azure
-
Google Cloud Platform
-
DigitalOcean
最簡單的用於演示測試的當然是使用 Docker Compose 了,我們也可以選擇將 Phase 控制檯組件運行於託管服務(PaaS)上,或者使用 Kubernetes 等替代的容器編排工具,而不是使用 Docker Compose。考慮將 Phase 服務部署在 VPN 或 VPC 後面,而不是直接暴露在互聯網上。
1. 安裝 Docker
# Ubuntu
sudo apt update && sudo apt upgrade -y && sudo apt install -y docker-compose
2. 下載配置.env 模板:
wget -O .env https://raw.githubusercontent.com/phasehq/console/main/.env.example
Docker Compose 模板:
wget -O docker-compose.yml https://raw.githubusercontent.com/phasehq/console/main/docker-compose.yml
Nginx 配置:
mkdir nginx && wget -O ./nginx/default.conf https://raw.githubusercontent.com/phasehq/console/main/nginx/default.conf
Nginx Dockerfile:
wget -O ./nginx/Dockerfile https://raw.githubusercontent.com/phasehq/console/main/nginx/Dockerfile
3. 更新配置
根據自己的環境修改 .env
文件。
4. 啓動服務
docker-compose -f docker-compose.yml up -d
您的 Phase 控制檯部署將在 https://localhost 上可用。默認情況下,Phase 將使用 nginx 提供自簽名的 TLS 證書。在生產環境中,請使用有效的 TLS 證書。
使用
我們可以在很多平臺集成使用 Phase。
Kubernetes
我們可以使用 Phase 在運行時將私密數據注入到您的應用程序進程中。無需更改任何代碼或添加其他依賴項。可以通過內存中的初始化容器與 Kubernetes 工作負載輕鬆集成,並安全地注入密鑰。
首先創建一個包含 PHASE_SERVICE_TOKEN
的 Secret 對象:
kubectl create secret generic phase-token --from-literal=PHASE_SERVICE_TOKEN=<YOUR_PHASE_SERVICE_TOKEN>
然後在 initContainer 中通過 CLI 容器來獲取私密數據,如下所示:
apiVersion: v1
kind: Pod
metadata:
name: alpine-pod
spec:
volumes:
- name: secrets-volume
emptyDir:
medium: Memory
initContainers:
- name: fetch-secrets
image: phasehq/cli:latest
volumeMounts:
- name: secrets-volume
mountPath: /secrets
env:
- name: PHASE_SERVICE_TOKEN
valueFrom:
secretKeyRef:
name: phase-token
key: PHASE_SERVICE_TOKEN
command:
- /bin/sh
- -c
- phase secrets export > /secrets/secrets.env
containers:
- name: alpine-main
image: alpine:latest
volumeMounts:
- name: secrets-volume
mountPath: /secrets
command:
- /bin/sh
- -c
- source /secrets/secrets.env && printenv
通過這種方式有很多優勢:
-
責任分離:初始化容器使您能夠將設置環境的責任與主要容器的主要目的分開。通過僅使用初始化容器來獲取密鑰並填充內存卷,可以減少針對主應用程序的潛在攻擊面。
-
短暫性質:通過使用內存卷,數據不會在 Pod 的生命週期之外持久存在。當 Pod 終止時,數據將丟失。這降低了祕密數據被遺留下來的風險。
-
無持久存儲:由於獲取的密鑰並置於內存卷中的祕密數據不會寫入任何持久存儲,因此如果底層存儲受到侵害或被不正確停用,它們不會被暴露出來的風險。
Jenkins
此外我們還可以使用 Phase CLI 輕鬆地在 CI 流水線或任務中注入或暴露密鑰。比如下面的流水線代碼我們將 Docker 的認證信息通過 Phase 來獲取:
pipeline {
agent any
stages {
stage('Prepare') {
steps {
sh 'curl -fsSL https://pkg.phase.dev/install.sh | bash'
sh '''
phase secrets export --env prod DOCKERHUB_USERNAME DOCKERHUB_TOKEN
export $(phase secrets export --env prod DOCKERHUB_USERNAME DOCKERHUB_TOKEN | xargs)
'''
}
}
stage('Build and Push') {
steps {
sh '''
docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_TOKEN
docker build -t my-image .
docker push my-image:latest
'''
}
}
}
}
代碼集成
同樣我們還可以在很多應用程序開發框架中直接集成 Phase,使用 phase run
在運行時嚮應用程序過程中注入祕密。無需更改任何代碼或增加任何依賴項。比如:
phase secrets list --show
KEY 🗝️ | VALUE ✨
--------------------------------------------------------------------------------------
AWS_ACCESS_KEY_ID | AKIA2OGYBAH6QLWOYDVN
AWS_SECRET_ACCESS_KEY | 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
比如對於 Django 應用我們可以使用下面的方法來進行集成:
在項目根目錄下面初始化 phase:
phase init
使用 phase run 命令啓動應用:
phase run python manage.py runserver payments-api:8000
還可以鏈接多個命令:** 然後我們在應用程序中直接獲取環境變量即可:
import os
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
Github 倉庫: https://github.com/phasehq/console
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/ne-Oh40fHcoDJOrUUhOvbA