在 Python 中管理机密的四种方法
我们生活在一个应用程序用于做任何事情的世界,无论是股票交易还是预订沙龙,但在幕后,连接是使用秘密完成的。必须适当管理机密,例如数据库密码、API 密钥、令牌等,以避免任何泄露。
管理机密的需求对任何组织都至关重要。机密可以通过多种方式泄露,包括通过版本控制系统(切勿对代码中的任何机密进行硬编码)、私人消息、电子邮件和其他通信渠道。如果机密泄露,可能会导致信任、信誉甚至业务的丧失。在某些情况下,泄露的机密也可能导致法律诉讼。这就是为什么制定管理机密的计划如此重要的原因。
在本文中,我们将讨论在 Python 中有效管理机密的四种不同方法。
先决条件
在开始之前,请记住以下几点,以避免以后出现任何问题:
- Python和pip安装在你的机器上。
- 了解 Python 和 CLI。
- Python IDE,如 PyCharm 或 VS Code。
- 对云有基本的了解。
我们将为此设备使用 MacOS。请根据您的操作系统使用这些命令。
在 Python 中管理机密的四种方法
在本节中,我们将讨论在 Python 中管理机密的四种不同方法:
- 从文件
使用 .env 文件
该文件是用于在Python中存储环境变量的文件。环境变量是在 Python 代码之外设置的变量,用于配置 Python 代码。该文件通常用于存储密钥和密码。.env
我们将使用该包来访问文件的内容。若要开始,请首先使用以下命令安装包:python-dotenv.env
$ pip install python-dotenv
创建用于测试目的的文件并粘贴以下机密:.env
API_KEY=test-key
API_SECRET=test-secret
当然,此文件不应提交到您的 git 存储库。否则,即使您删除它,它也将被版本控制和可读。
将此行添加到您的文件中:.gitignore
.env
完成后,创建一个文件并粘贴下面提到的代码片段。在此代码中,我们使用函数从文件加载内容:main.pyload_dotenv().env
from dotenv import load_dotenv
import osload_dotenv()api_key = os.getenv("API_KEY")
api_secret = os.getenv("API_SECRET")print("API_KEY: ", api_key)
print("API_SECRET: ", api_secret)
我们还可以使用该函数,它将机密转换为字典。可以使用以下代码片段访问机密:dotenv_values()
from dotenv import dotenv_valuessecrets = dotenv_values(".env")def main():print(secrets["API_KEY"])print(secrets["API_SECRET"])if __name__ == "__main__":main()
处理大型项目时,您可能会发现需要多个文件。例如,您可能有一个用于本地开发环境的文件和一个用于云开发生产环境的文件。如果您有多个文件,以下代码片段可能会有所帮助:.env.env.env.dev.env
from dotenv import dotenv_valuessecrets = dotenv_values(".env")
local_secrets = dotenv_values(".env.dev")def main():print(secrets["API_KEY"])print(local_secrets["API_SECRET"])if __name__ == "__main__":main()
使用 JSON 文件
若要使机密更有条理,还可以使用 JSON 文件。让我们创建一个文件并将以下机密粘贴到其中:secrets.json
{"db": {"host": "localhost","port": 27017,"name": "test"},"server": {"host": "localhost","port": 3000}
}
与上述相同,请勿提交此文件。
现在我们已经准备好了 JSON 文件,让我们编写一个函数来访问文件中的机密:
import jsondef get_value_from_json(json_file, key, sub_key):try:with open(json_file) as f:data = json.load(f)return data[key][sub_key]except Exception as e:print("Error: ", e)print(get_value_from_json("secrets.json", "db", "host")) # prints localhost
- 使用环境变量 环境变量是由操作系统或特定用户设置的变量,程序使用它来确定各种设置。我们可以使用这些变量来存储我们的秘密,然后在我们的程序中访问它们。您可以使用以下语法在 macOS 或 Linux 计算机中创建环境变量:
$ export variable_name=value
$ export API_KEY_TEST=dummykey
在 Windows 计算机上,可以使用 GUI 添加环境变量或使用以下命令添加变量:
$ setx [variable_name] “[value]”
可以使用操作系统包访问操作系统环境变量。下面提到的是示例代码:
import os# Get the secret key from the environment
secret_key = os.environ.get('api_key_test')
print(secret_key) // prints dummykey
命令行中的机密也应特别小心地处理。
- 使用云机密管理器 大多数云服务提供商都提供内置的密钥管理器,可用于跨云基础架构创建和使用密钥。以下云提供商提供的秘密管理器:
- AWS 密钥管理器
- Secret Manager (By Google Cloud)
- Azure Key Vault
AWS Secrets Manager 在整个行业中广泛使用。让我们编写一个函数来使用 Boto3 在 AWS 中创建和访问密钥:
import boto3def fetch_secret_from_aws(secret_name):try:session = boto3.session.Session()client = session.client(service_name='secretsmanager', region_name='us-east-1')get_secret_value_response = client.get_secret_value(SecretId=secret_name)return get_secret_value_response['SecretString']except Exception as e:print(e)return Nonedef create_secret_in_aws(secret_name, secret_value):try:session = boto3.session.Session()client = session.client(service_name='secretsmanager', region_name='us-east-1')client.create_secret(Name=secret_name, SecretString=secret_value)return Trueexcept Exception as e:print(e)return False
- 使用 KMS KMS 是用于管理加密密钥的密钥管理系统。它通常在组织中用于集中管理和保护密钥。KMS 可用于生成、存储和分发密钥。它还可用于吊销密钥和监视密钥使用情况。
KMS 是集中管理应用程序和服务使用的密钥的便捷方法,有助于确保只有授权用户才能访问这些密钥。
Hashicorp Vault 是市场上最好的开源 KMS 之一,它提供了许多功能和优势,包括跨多个环境管理密钥和密钥的能力、强大的安全控制和良好的可扩展性。
让我们编写一个函数来读取机密并将其写入保管库中的特定路径。
注意:请确保您已安装 hvac(适用于 Vault 的 Python 客户端)并设置了 Hashicorp Vault:
import hvacdef read_secret_from_vault(secret_path, token, secret_name):try:client = hvac.Client(url='<http://localhost:8200>',token=token,)read_response = client.secrets.kv.read_secret_version(path=secret_path)return read_response['data']['data'][secret_name]except Exception as e:print(e)return Nonedef write_secret_to_vault(secret_path, token, secret_name, secret_value):try:client = hvac.Client(url='<http://localhost:8200>',token=token,)create_response = client.secrets.kv.v2.create_or_update_secret(path=secret_path,secret={secret_name: secret_value},)return create_responseexcept Exception as e:print(e)return None
总结
管理机密是应用程序开发的重要组成部分。当开发人员将明文机密硬编码到他们的应用程序中时,会产生潜在的安全漏洞。如果发现敏感数据,攻击者可以使用这些机密访问这些数据。
此处建议的方法的另一种替代方法是将机密签入源代码,并与加密的团队共享。如果您学习如何利用Mozilla SOPS等工具,这可能是一个非常灵活的解决方案。
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
在 Python 中管理机密的四种方法
我们生活在一个应用程序用于做任何事情的世界,无论是股票交易还是预订沙龙,但在幕后,连接是使用秘密完成的。必须适当管理机密,例如数据库密码、API 密钥、令牌等,以避免任何泄露。 管理机密的需求对任何组织都至关重…...
![](https://www.ngui.cc/images/no-images.jpg)
全国青少年信息素养大赛Python编程挑战赛初赛试题说明
Python 编程挑战赛初赛采用线上考试比赛形式,分为小学组和初中组。不同组别的考核重难点略有不同,考核内容主要是 Python 基础知识,共 30 题,均为单选题,具体考核如下: 小学组考核内容主要是 Python 基础知识,包括输入输出,变量,条件结构,计次循环和无限循环,海龟库…...
![](https://img-blog.csdnimg.cn/0fc52e80716941e39883a0f07379def2.gif)
无需魔法打开即用的 AI 工具集锦
作者:明明如月学长, CSDN 博客专家,蚂蚁集团高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者。 热门文章推荐…...
![](https://img-blog.csdnimg.cn/img_convert/38111bed7d48ddec74973dc8a560b9b1.jpeg)
如何进行SEO站内优化,让你的网站更易被搜索引擎收录
我们了解了 SEO 的流程,知道了哪些元素对 SEO 的效果会产生关键影响,接下来,我们就该正式开始动手,打造一个让搜索引擎“爱不释手”的网站。 为了方便理解与记忆,我们将网站划分为几个模块,告诉你优化网站…...
![](https://img-blog.csdnimg.cn/72bd3cc0237a478ca73e8960c5d7ed58.png)
组件内部watch后切换数据报错Error in callback for watcher “xxxx“
报错信息: 报错代码: 百度了一下是因为这里写了箭头函数,导致this指向为父级作用域上下文,不是vue实例导致 修改为: progressData: {handler: function(newValue, oldValue) {this.setChartData(newValue)},deep: …...
![](https://img-blog.csdnimg.cn/img_convert/12cc64701b7d90b0147d887aa1cf05b7.png)
VMware ESXi 7.0 U3l macOS Unlocker OEM BIOS (标准版和厂商定制版)
VMware ESXi 7.0 U3l macOS Unlocker & OEM BIOS (标准版和厂商定制版) 提供标准版和 Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科) 定制版镜像 请访问原文链接:https://sysin.org/blog/vmware-esxi-7-u3-oem/,查看最新版…...
![](https://img-blog.csdnimg.cn/1ee0f3cd67e34c419dee6962561abfea.png)
华为阿里版ChatGPT横空出世,谁的成效更好呢?
“你训练的大模型涌现了吗?”“还没有。好难受。”一时间成为了最近AI赛道玩家的一个爆热梗。 不管承不承认,相信每个玩家都不愿意输掉这场激烈的竞争。自百度成为国内“第一个吃螃蟹的人”后,又有两大中国科技巨头做好了准备——华为和阿里…...
![](https://www.ngui.cc/images/no-images.jpg)
【云原生之Docker实战】使用docker部署kooteam在线团队协作工具
【云原生之Docker实战】使用docker部署kooteam在线团队协作工具 一、kooteam介绍1.kooteam介绍2.kooteam的技术选型二、检查本地docker环境1.检查Docker版本2.检查Docker状态三、下载kooteam镜像四、部署kooteam文档管理系统1.创建安装目录2.创建mysql数据库3.新建kooteam数据库…...
![](https://www.ngui.cc/images/no-images.jpg)
ITSS认证是什么认证,itss资质认证
一、ITSS是什么 ITSS根据英文翻译信息技术服务标准(InformationTechnologyServiceStandards,简称ITSS),它既是一套成体系和综合配套的标准库,又是一套选择和提供IT服务的方法学,对企业IT服务而言࿰…...
![](https://img-blog.csdnimg.cn/04fa4675a5224f8e8fe7be574b611135.png)
FTP-----局域网内部远程桌面
此文包含详细的图文教程。有疑问评论区留言。博主第一时间解决。 目录 一、被远程桌面的电脑 1.开启远程权限 2.添加账户,有本地账户跳过这步 3.帐号隶属于 远程桌面 4.帐号隶属于 本地用户组 二、本地电脑连接远程桌面 前提条件: 1.两台电脑在…...
![](https://img-blog.csdnimg.cn/4bd81624e3bc4f95bcb8e805777eddec.png#pic_center)
Learning C++ No.18【STL No.8】
引言: 北京时间:2023/3/18/21:47,周末,不摆烂,但是欠钱终于还是遭报应了,导致坐牢7小时(上午3.5,下午3.5),难受,充分意识到行哥是那么的和蔼可亲…...
![](https://img-blog.csdnimg.cn/ee84c80280ff476cbcd7e6218fca7092.png)
pytorch搭建ResNet50实现鸟类识别
🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍦 参考文章地址: 365天深度学习训练营-第J1周:ResNet-50算法实战与解析 🍖 作者:K同学啊 理论知识储备 深度残差网络ResNet(dee…...
![](https://img-blog.csdnimg.cn/a41638877cc6437995168433ebba65c8.png#pic_center)
Node.js -- npm与包
1.包 Node.js中的第三方模块又叫做包 就像电脑和计算机指的是相同的东西,第三方模块和包指的是同一概念,只不过叫法不同。 包的来源: 包是由第三方或者个人团队开发出来的,免费供个人使用。 国外有一家IT 公司,叫做n…...
![](https://img-blog.csdnimg.cn/74a9837ebcb444c686de2c274844d888.jpeg#pic_center)
二 、Locust自定义用户(场景)
二 、自定义用户(场景) 一个用户类代表了你系统中的一种用户/场景。当你做一个测试运行时,你指定你想模拟的并发用户的数量,Locust将为每个用户创建一个实例。你可以给这些类/实例添加任何你喜欢的属性,但有一些属性对…...
![](https://img-blog.csdnimg.cn/7d2aaf8d51d14a8e829095c8280a0398.png)
1~3年的测试工程师薪资陷入了瓶颈期,如何突破自己实现涨薪?
对于技术人员而言,职业规划一般分为两个方向:做技术、做管理。进入软件测试行业的新人都会从最基础的执行开始,然后是基本的功能测试。 随后大家会根据个人职业发展来进一步细化,有的走管理路线,成为主管、经理、项目…...
![](https://www.ngui.cc/images/no-images.jpg)
springboot项目前端ajax 07进阶优化,使用jQuery的ajax
使用官网https://jquery.com/ 在下载那里,选择Download the compressed, production jQuery 3.6.4(版本不一样),而后在打开的网页中,选择另存为,就下载好了js文件。 > function doAjax(){ …...
![](https://www.ngui.cc/images/no-images.jpg)
东数西存场景的探索与实践
“东数西算”是通过构建数据中心、云计算、大数据一体化的新型算力网络体系,将东部算力需求有序引导到西部,对优化数据中心建设布局,提升国家整体算力水平,促进绿色发展,扩大有效投资,具有重要意义。 在实…...
![](https://www.ngui.cc/images/no-images.jpg)
[图神经网络]PyTorch简单实现一个GCN
Pytorch自带一个PyG的图神经网络库,和构建卷积神经网络类似。不同于卷积神经网络仅需重构__init__( )和forward( )两个函数,PyTorch必须额外重构propagate( )和message( )函数。 一、环境构建 ①安装torch_geometric包。 pip install torch_geometric …...
![](https://img-blog.csdnimg.cn/d7c28023f39d435681d633efb9673696.png)
Elasticsearch(黑马)
初识elasticsearch . 安装elasticsearch 1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: docker network create es-net 1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的…...
![](https://www.ngui.cc/images/no-images.jpg)
oracle数据库调整字段类型
oracle数据库更改字段类型比较墨迹,因为如果该字段有值,是不允许直接更改字段类型的。另外oralce不支持在指定的某个字段后面新增一个字段,但是mysql数据可以向指定的字段后面新增一个字段。 mysql向指定字段后面新增一个字段: al…...
![](https://img-blog.csdnimg.cn/e2fe2f2649c54c608fe6c150837009c3.gif)
面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码)
面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码) 目录 面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码) 1.面部表情识别方法 2.面部表情识别数据集 (1)表情识别数据集说明 (2&…...
![](https://img-blog.csdnimg.cn/img_convert/22f0529f04212c69cc4773cb607a6a5f.png)
赛效:如何在线给图片加水印
学会给图片加水印是一个非常实用的技能,可以让你的图片更具保护性和个性化。说到加水印,很多人不知道怎么操作。其实,给图片加水印非常简单,不用下载任何程序,在线就能完成。今天,我将介绍如何使用改图宝在…...
![](https://img-blog.csdnimg.cn/img_convert/d7f5fc50455382017acebbee5ed28fae.png)
动力节点杜老师Vue笔记——Vue程序初体验
一、Vue程序初体验 我们可以先不去了解Vue框架的发展历史、Vue框架有什么特点、Vue是谁开发的,这些对我们编写Vue程序起不到太大的作用,更何况现在说了一些特点之后,我们也没有办法彻底理解它,因此我们可以先学会用,使…...
![](https://img-blog.csdnimg.cn/20974e3d29fa446dbaa3a8a4cc5213b8.png)
ajax上传图片存入到指定的文件夹并回显
html代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"js/jquery-2.1.0.js"></script> </head> <body> <form…...
![](https://www.ngui.cc/images/no-images.jpg)
cesium加载cesiumlab切的影像切片和标准TMS瓦片的区别
1.加载cesiumlab切的影像 var labImg viewer.scene.imageryLayers.addImageryProvider( new Cesium.UrlTemplateImageryProvider({url:http://192.168.1.25:8080/DOMtms/{z}/{x}/{y}.png,fileExtension : "png"})); 2.标准TMS瓦片 var labImg viewer.scene.im…...
![](https://img-blog.csdnimg.cn/5de72c299d62427ab9d7aa9e780c7798.png)
第二周P9-P22
文章目录第三章 系统总线3.1、总线的基本概念一、为什么要用总线二、什么是总线三、总线上信息的传送四、总线结构的计算机举例1、单总线结构框图2、面向CPU的双总线结构框图3、以存储器为中心的双总线结构图3.2、总线的分类1、片内总线2、系统总线3、通信走线3.3、总线特性及性…...
![](https://www.ngui.cc/images/no-images.jpg)
java反射
文章目录何为反射?反射的应用场景了解么?谈谈反射机制的优缺点优点缺点反射实战获取 Class 对象的四种方式1. 知道具体类的情况下可以使用TargetObject.class:2. 通过 Class.forName()传入类的全路径获取:3. 通过对象实例instance…...
![](https://www.ngui.cc/images/no-images.jpg)
307 Temporary Redirect 解决办法(临时重定向)
背景:java后台服务请求python服务端 java服务报错:Unexpected response status:307 python服务端报错:307 Temporary Redirect 解决:查了好久找不到什么原因,请求路径问题 请求url:http//:w…...
![](https://img-blog.csdnimg.cn/c0df94fdf0ef412d8da47086d594866a.png)
SpringBoot案例
SpringBoot案例5,案例5.1 创建工程5.2 代码拷贝5.3 配置文件5.4 静态资源目标 基于SpringBoot的完成SSM整合项目开发 5,案例 SpringBoot 到这就已经学习完毕,接下来我们将学习 SSM 时做的三大框架整合的案例用 SpringBoot 来实现一下。我们完…...
![](https://www.ngui.cc/images/no-images.jpg)
Android 10.0 系统framework发送悬浮通知的流程分析
1.前言 在android10.0rom定制化开发中,在原生系统的systemui中,状态栏通知,和闹钟,wifi等悬浮通知也是很重要的, 悬浮通知也是系统通知的一种,也是在frameworks中发送出来的通知,接下来就分析下10.0中的悬浮通知的发送 流程,然后就可以实现自己自定义悬浮通知的相关功…...
![](https://img-blog.csdnimg.cn/20210203142225866.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhY2t6a2Fx,size_16,color_FFFFFF,t_70)
哪种语言网站建设/seo站长查询
更多黑客技能 公众号:暗网黑客 作者:掌控安全学员-happy0717这是一则招聘信息,有SRC提交证明的优先。 如果像我一样大专学历,没有工作经验那一定需要某种方法来证明自己是就业的水平。 我想漏洞盒子的公益SRC上榜应该是最简单的…...
![](/images/no-images.jpg)
做下载类型网站怎样划算/百度收录申请
转自:http://www.cnblogs.com/kernel-style/p/3339102.html 一、Eclipse如何打开Android工程 1.你可以在file->new->other->android object选择选项:create object from exists source 通过browser 打到你所下载的目录即可. 2.如果放在设定的Workspace目…...
![](https://images.cnblogs.com/cnblogs_com/server126/201112/20111230114511684.png)
好一点的网站建设公司/品牌营销策划案例
上一篇简单说了一下使用加密数据传输的好处,这一篇说一下如何使用使用X509证书方式(部署IIS) (system :windows server2008 r2) 如何创建证书: makecert.exe -sr LocalMachine -ss My -a sha1 -n CNJiangServer -sky exchange -p…...
![](/images/no-images.jpg)
江苏建设纸质考试网站/在线培训课程
首先关于生成器的那些事:1.通常的for…in…循环中,in后面是一个数组,这个数组就是一个可迭代对象,类似的还有链表,字符串,文件。它的缺陷是所有数据都在内存中,如果有海量数据的话将会非常耗内存…...
![](https://img-blog.csdnimg.cn/img_convert/7af842274ba2441e0a84980270f65f6d.png)
wordpress 多功能主题/小程序定制开发公司
为什么要优化 Ngin HTTPS 延迟 Nginx 常作为最常见的服务器,常被用作负载均衡 (Load Balancer)、反向代理 (Reverse Proxy),以及网关 (Gateway) 等等。一个配置得当的 Nginx 服务器单机应该可以 期望承受住 50K 到 80K 左右 [1] 每秒的请求,…...
![](/images/no-images.jpg)
顺德网站开发/西安百度seo推广电话
OpenCV中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage。 一、Mat类型:矩阵类型,Matrix。 在openCV中,Mat是一个多维的密集数据数组。可以用来处理向量和矩阵、图像、直方图等等常见的多维数据。 Mat有3个重要的方法&…...