端到端全能加密平臺 - Phase

Phase 是一個開源(核心)的端到端可自託管的全能加密平臺,用於在你的基礎架構中供開發人員管理祕鑰和環境變量。

功能特性

命令行工具

通過 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 Console 上創建一個新的免費帳戶:https://console.phase.dev/。

爲了滿足各種合規要求或僅僅是爲了保持對數據的控制,您可能希望自託管 Phase 而不是使用 Phase 雲服務。當您在自己的基礎架構上自託管 Phase 服務時,您將獨自承擔安全性、可靠性和可用性方面的責任。您需要設置有效的 TLS 證書、Web 應用防火牆、數據庫備份和複製、DDoS 保護、速率限制、SSO 等。目前支持如下幾種方式:

最簡單的用於演示測試的當然是使用 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

通過這種方式有很多優勢:

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

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/ne-Oh40fHcoDJOrUUhOvbA