端到端全能加密平台 - 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