Phase:一款超强大的端到端全能加密平台,支持 Kubernetes、Jenkins 等多种平台

公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

0fb1712c37d45cdea6500213b4fe948d.png

Phase 是一个开源(核心)的端到端可自托管的全能加密平台,用于在你的基础架构中供开发人员管理秘钥和环境变量。

功能特性

292e78e458c579a8910c12eef39cf913.png 647552c44e59d78fef837d1fe40190e4.png
  • 控制台:无缝创建、管理、轮换机密数据和环境变量的仪表盘

  • 保护您的密钥:通过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

本文转载自:「Github爱好者」,原文:https://url.hi-linux.com/w3qge,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

b559b82eed66782b816f7878d309addb.gif

最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。

c40693033e63c8522a288717d0c21f30.png

你可能还喜欢

点击下方图片即可阅读

3e85cdadb27d4ba306dd795abd02a36c.jpeg

一份超实用的 OOM 内存泄露速查备忘录

efd0d29bc76e26930a4e9a2060f9593d.png
点击上方图片,『美团|饿了么』外卖红包天天免费领

2110c84e7e1aa65ec1a805e6772a0fa7.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值