sops加密
参考:https://blog.csdn.net/xcswswswws/article/details/130962490
使用age加密
使用其他加密方式,见https://www.jianshu.com/p/d66909e4915b
1.安装age
age是一个简单,现代和安全的文件加密工具,格式和Go库。
它具有显式小键、无配置选项和unix风格的可组合性。
1.1安装choco包管理器
参考:https://blog.csdn.net/omaidb/article/details/120028664
安装choco
参考: https://chocolatey.org/install
查看Get-ExecutionPolicy是否受限制
查看PowerShell会话的执行策略设置
Get-ExecutionPolicy
如果它返回Restricted,则运行下面的语句(3选1即可)
Restricted:这是 Windows 客户端的默认设置。在此策略下,不允许执行任何脚本。
AllSigned:在此策略下,只有签名脚本才能运行,并且在运行之前必须由用户确认。
RemoteSigned:在此策略下,所有从本地来源启动的脚本和配置文件都可以运行。但从互联网下载的脚本必须有一个可信任发行者的数字签名才能运行。
Unrestricted:没有限制,可以运行所有脚本和配置文件。从互联网下载的脚本会在运行前提醒用户。
Bypass:绕过执行策略,允许所有脚本运行,不提供任何警告或提示。
Undefined:没有设置执行策略。如果在计算机、用户或会话范围内未定义执行策略,则会使用更一般范围内的设置。
脚本和配置文件都需要签名,且需要用户确认才能运行
设为AllSigned策略提高安全性 admin用户下执行
脚本和配置文件都需要签名,且需要用户确认才能运行
Set-ExecutionPolicy AllSigned
下载的脚本必须有可信签名才能执行
。。。
这里使用的官方的安装方式:
https://docs.chocolatey.org/en-us/choco/setup
#管理员权限的powershell https://docs.chocolatey.org/en-us/choco/setup#install-with-powershell.exe
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(‘https://community.chocolatey.org/install.ps1’))
choco -v
2.2.2
1.2 安装age
choco install age.portable
通过age-keygen -o key.txt 命令产生一个public key”SOPS_AGE_RECIPIENTS"和private key"SOPS_AGE_KEY", 你可以找到这两个值在你当前目录下的key.txt文件中。
age-keygen -o key.txt
PS C:\WINDOWS\system32> cat .\key.txt
created: 2024-05-26T20:31:55+08:00
public key: age180dtv0ynlrqtfpmpkscm7p8tfg7lvrxcm90m778uytg4q984scaspwvy92
AGE-SECRET-KEY-1TGJ6LHDP2WV4Y5J5YJSPHEJA8M2S3HMEF8JY8QKPG06Y4DLGMK5SM867RK
2.安装sops
你可以在这里Releases · mozilla/sops · GitHub的readme中找到适合您系统的安装方式。
我在windons上还是使用的choco install sops进行的安装
sops/README.rst at master · mozilla/sops · GitHub 这里可以查看age加密方式的一些说明
二、本地加密及测试
key.txt默认内容:
created: 2024-05-26T20:31:55+08:00
#公钥
public key: age180dtv0ynlrqtfpmpkscm7p8tfg7lvrxcm90m778uytg4q984scaspwvy92
#私钥:以AGE开头的都是私钥
AGE-SECRET-KEY-1TGJ6LHDP2WV4Y5J5YJSPHEJA8M2S3HMEF8JY8QKPG06Y4DLGMK5SM867RK
以下流程描述了如何在本地local进行加密
设置环境变量
export SOPS_AGE_RECIPIENTS=xxxx ##在key.txt中 #公钥
export SOPS_AGE_KEY=xxxxx ##在key.txt中 #私钥
windows配置方式为:
在Windows系统中,您可以通过以下几种方式来设置环境变量:
方式一:临时设置(仅限当前命令提示符会话)
打开命令提示符窗口(CMD)或PowerShell。
使用set命令来设置环境变量,例如:
Cmd
set SOPS_AGE_RECIPIENTS=age180dtv0ynlrqtfpmpkscm7p8tfg7lvrxcm90m778uytg4q984scaspwvy92
set SOPS_AGE_KEY=AGE-SECRET-KEY-1TGJ6LHDP2WV4Y5J5YJSPHEJA8M2S3HMEF8JY8QKPG06Y4DLGMK5SM867RK
这种设置只在当前命令行会话中有效,关闭窗口后设置就会丢失。
方式二:通过PowerShell设置环境变量
临时设置
打开PowerShell(推荐使用管理员权限运行)。
使用[Environment]::SetEnvironmentVariable方法来设置永久环境变量,例如:
Powershell
$env:SOPS_AGE_RECIPIENTS = “age180dtv0ynlrqtfpmpkscm7p8tfg7lvrxcm90m778uytg4q984scaspwvy92”
$env:SOPS_AGE_KEY = “AGE-SECRET-KEY-1TGJ6LHDP2WV4Y5J5YJSPHEJA8M2S3HMEF8JY8QKPG06Y4DLGMK5SM867RK”
永久设置
[Environment]::SetEnvironmentVariable(“SOPS_AGE_RECIPIENTS”, “age180dtv0ynlrqtfpmpkscm7p8tfg7lvrxcm90m778uytg4q984scaspwvy92”, “User”)
[Environment]::SetEnvironmentVariable(“SOPS_AGE_KEY”, “1TGJ6LDP2WV4Y5YJ5YJSPHEJA8M2S3HMEF8JY8QKPG06Y4DLGMK5SM867RK”, “User”)
在 [Environment]::SetEnvironmentVariable 方法中,User参数指的是环境变量的作用域。在PowerShell中设置环境变量时,你可以指定变量是针对当前用户的(User)还是系统级别的(Machine)。当你写入User时,你是在说这个环境变量只对当前登录用户生效,不会影响其他用户。
方式三:通过系统设置界面
打开“控制面板” -> “系统和安全” -> “系统” -> “高级系统设置” -> “环境变量”。
在“用户变量”或“系统变量”区域点击“新建”,分别输入变量名(SOPS_AGE_RECIPIENTS 和 SOPS_AGE_KEY)和对应的值。
确单击“确定”保存更改。
这种方式设置的环境变量需要重启应用程序或甚至重启计算机才能让所有程序感知到变更。
选择适合您需求的方法设置好环境变量后,即可在后续的操作中使用这些变量,比如运行SOPS命令时,它会自动读取这些环境变量作为密钥。
例如我有一个examplefile-sensitive.yaml的文件内容如下
mysql_accout: root
mysql_password: adasdsewqweqwasd!@3
加密
#箭头前后要有空格,配置了公钥的环境变量,这里可以不用-a指定公钥
sops -a age180dtv0ynlrqtfpmpkscm7p8tfg7lvrxcm90m778uytg4q984scaspwvy92 -e examplefile-sensitive.yaml > examplefile-sensitive.enc.yaml
查看加密后的文件内容:
C:\Users\ma\Desktop\examplefile-sensitive.enc.yaml
mysql_accout: ENC[AES256_GCM,data:QFOwrQ==,iv:Fv+7098ql2hMTrF4E6yXF5e4yTIKVdEoahNr3xF2H5Q=,tag:ZbbLO5npKpWwCyW0dfFBNQ==,type:str]
mysql_password: ENC[AES256_GCM,data:vpThp972tmBBvUNtIT0BvLYmwA==,iv:uxRkfpAQ0fM7CgGUw+5clMZ6f3vjCpWe9e6I+TwbbRU=,tag:4eYzaoyLFkZpS7JRoE2KKw==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age180dtv0ynlrqtfpmpkscm7p8tfg7lvrxcm90m778uytg4q984scaspwvy92
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnemtab1dabkVvSy9jQWdp
eThXVHhZU3d3VW8za3dCeVU3cEFYM1AwNmcwCmhhMmQxZlgwMXBDUnJvMG4rU0o3
U3B4SzJVL3V3WjBaaE1oYjdoODVWYWsKLS0tIFlEL1R2eHV0cHp3TUZ6RkpwMXpw
cDZmTVVheEFhTWhoMEJnUEQ1RFhrRUEKbi+EdYwytFKth9b8P36LrSSknsja6fMf
UR9z67Y8ggm0AWeaKBLfeihXOEVmg4enVdgeGkHsEMSnsLaqsib/OA==
-----END AGE ENCRYPTED FILE-----
lastmodified: “2024-05-26T13:05:51Z”
mac: ENC[AES256_GCM,data:eqgW3k1XAFZCDUcVwC0rDSDRHMbOu28KullZh7sp0pFR8FJD4p8io5onlRqG9E2t0mByCWgYvgzfF6qiWjIi4vrPrF0tfqYg+jAx82k2p7BinRmpl/gSYjwHKA8zak0u9uh8c7ZKAxk027Vb6+ZWnXEumFipxZL6I3D8eTlJSiE=,iv:sMQNSzFy9qBT0U7nWjMXcSiL9P1cyr7fWXUkMILzDCY=,tag:x5Sscw2NoV9YW4GvHwGg1Q==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.8.1
解密
sops -d examplefile-sensitive.enc.yaml > examplefile-sensitive.yaml
三:sops与terraform的集成
在terraform中引用sops,可以参照GitHub - carlpett/terraform-provider-sops: A Terraform provider for reading Mozilla sops files
terraform {
required_providers {
sops = {
source = “carlpett/sops”
version = “~> 0.7.0”
}
}
}
可以在terraform的官网看一下sops_file(即你的加密文件)的写法Terraform Registry
data “sops_file” “demo-secret” {
source_file = “demo-secret.enc.json”
}
您可以通过以下的方式来将敏感信息上传并存储到terraform 的variable中
resource “tfe_variable” “example” {
for_each = nonsensitive(toset([for k, v in data.sops_file.demo-secret.data : k]))
key = each.key
value = data.sops_file.demo-secret.data[each.key]
sensitive = true
category = “terraform”
variable_set_id = tfe_variable_set.example_workspace.id
}
当然我们需要在terraform的variable中手动先配置变量SOPS_AGE_KEY
————————————————
原文链接:https://blog.csdn.net/xcswswswws/article/details/130962490