端到端全能加密平台 - Phase

共 11172字,需浏览 23分钟

 ·

2023-11-12 08:45




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    | 6ACbdYki5FISnaiWYZwwyQcAEcnKmNrULTCXw+RQ


比如对于 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








浏览 277
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报