端到端全能加密平臺 - Phase
Phase 是一個開源(核心)的端到端可自托管的全能加密平臺,用于在你的基礎(chǔ)架構(gòu)中供開發(fā)人員管理秘鑰和環(huán)境變量。
功能特性
-
控制臺:無縫創(chuàng)建、管理、輪換機(jī)密數(shù)據(jù)和環(huán)境變量的儀表盤 -
保護(hù)您的密鑰:通過24個單詞的助記符短語保持自己的根密鑰的自主性 -
密鑰管理:差異化、版本控制和時間點恢復(fù) -
RBAC:每個應(yīng)用程序、每個環(huán)境的細(xì)粒度、基于角色和密碼的訪問控制 -
服務(wù)令牌:使用細(xì)粒度范圍對CI運行器、構(gòu)建工具和生產(chǎn)環(huán)境進(jìn)行身份驗證 -
密碼引用:繼承密碼以創(chuàng)建復(fù)雜的配置 -
審計日志:對每個更改和訪問事件完全可見 -
自托管:在自己的基礎(chǔ)設(shè)施上運行階段 -
KMS:零知識密鑰管理服務(wù) -
SDK:使用幾行代碼加密/解密數(shù)據(jù)。
命令行工具
通過 Phase 的命令行工具可以在幾秒鐘之內(nèi)將機(jī)密數(shù)據(jù)導(dǎo)入、加密并注入到你的應(yīng)用程序中,無需修改任何代碼。
# 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 命令行工具可以獲取、解密秘密和環(huán)境變量并將其注入到您的應(yīng)用程序中,不需要更改代碼。 -
注入 -
以 dotenv格式導(dǎo)出機(jī)密數(shù)據(jù) -
跨平臺:在 macOS、Ubuntu/Arch/Redhat/Alpine Linux、Windows、Docker 上輕松安裝 Phase CLI。 -
Keyring 集成 - 將密鑰和憑據(jù)安全地存儲在 macOS 鑰匙串、Windows Credential Locker、KDE 錢包、GNOME Keyring 等。 -
私鑰分片:通過秘密分割方案避免私鑰的單點泄露
安裝
最快、最可靠的開始方法是在 Phase Console 上創(chuàng)建一個新的免費帳戶:https://console.phase.dev/。
為了滿足各種合規(guī)要求或僅僅是為了保持對數(shù)據(jù)的控制,您可能希望自托管 Phase 而不是使用Phase云服務(wù)。當(dāng)您在自己的基礎(chǔ)架構(gòu)上自托管 Phase 服務(wù)時,您將獨自承擔(dān)安全性、可靠性和可用性方面的責(zé)任。您需要設(shè)置有效的 TLS 證書、Web 應(yīng)用防火墻、數(shù)據(jù)庫備份和復(fù)制、DDoS 保護(hù)、速率限制、SSO 等。目前支持如下幾種方式:
-
Docker Compose -
AWS -
Azure -
Google Cloud Platform -
DigitalOcean
最簡單的用于演示測試的當(dāng)然是使用 Docker Compose 了,我們也可以選擇將 Phase 控制臺組件運行于托管服務(wù)(PaaS)上,或者使用 Kubernetes 等替代的容器編排工具,而不是使用 Docker Compose??紤]將 Phase 服務(wù)部署在 VPN 或 VPC 后面,而不是直接暴露在互聯(lián)網(wǎng)上。
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.更新配置
根據(jù)自己的環(huán)境修改 .env 文件。**4.啟動服務(wù)
docker-compose -f docker-compose.yml up -d
您的 Phase 控制臺部署將在 https://localhost 上可用。默認(rèn)情況下,Phase 將使用 nginx 提供自簽名的 TLS 證書。在生產(chǎn)環(huán)境中,請使用有效的 TLS 證書。
使用
我們可以在很多平臺集成使用 Phase。
Kubernetes
我們可以使用 Phase 在運行時將私密數(shù)據(jù)注入到您的應(yīng)用程序進(jìn)程中。無需更改任何代碼或添加其他依賴項??梢酝ㄟ^內(nèi)存中的初始化容器與 Kubernetes 工作負(fù)載輕松集成,并安全地注入密鑰。
首先創(chuàng)建一個包含 PHASE_SERVICE_TOKEN 的 Secret 對象:
kubectl create secret generic phase-token --from-literal=PHASE_SERVICE_TOKEN=<YOUR_PHASE_SERVICE_TOKEN>
然后在 initContainer 中通過 CLI 容器來獲取私密數(shù)據(jù),如下所示:
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
通過這種方式有很多優(yōu)勢:
-
責(zé)任分離:初始化容器使您能夠?qū)⒃O(shè)置環(huán)境的責(zé)任與主要容器的主要目的分開。通過僅使用初始化容器來獲取密鑰并填充內(nèi)存卷,可以減少針對主應(yīng)用程序的潛在攻擊面。 -
短暫性質(zhì):通過使用內(nèi)存卷,數(shù)據(jù)不會在 Pod 的生命周期之外持久存在。當(dāng) Pod 終止時,數(shù)據(jù)將丟失。這降低了秘密數(shù)據(jù)被遺留下來的風(fēng)險。 -
無持久存儲:由于獲取的密鑰并置于內(nèi)存卷中的秘密數(shù)據(jù)不會寫入任何持久存儲,因此如果底層存儲受到侵害或被不正確停用,它們不會被暴露出來的風(fēng)險。
Jenkins
此外我們還可以使用 Phase CLI 輕松地在 CI 流水線或任務(wù)中注入或暴露密鑰。比如下面的流水線代碼我們將 Docker 的認(rèn)證信息通過 Phase 來獲?。?/p>
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
'''
}
}
}
}
代碼集成
同樣我們還可以在很多應(yīng)用程序開發(fā)框架中直接集成 Phase,使用 phase run 在運行時向應(yīng)用程序過程中注入秘密。無需更改任何代碼或增加任何依賴項。比如:
phase secrets list --show
KEY ??? | VALUE ?
--------------------------------------------------------------------------------------
AWS_ACCESS_KEY_ID | AKIA2OGYBAH6QLWOYDVN
AWS_SECRET_ACCESS_KEY | 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
比如對于 Django 應(yīng)用我們可以使用下面的方法來進(jìn)行集成:
在項目根目錄下面初始化 phase:
phase init
使用 phase run 命令啟動應(yīng)用:
phase run python manage.py runserver payments-api:8000
還可以鏈接多個命令:**然后我們在應(yīng)用程序中直接獲取環(huán)境變量即可:
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
