2017-07-06 166 views
1

有没有办法在笔记本中存储机密/访问秘密/密码?我有一个api端点,我从中提取数据,我不想将apiKey公开给可以查看笔记本的所有人。在Jupyter笔记本中存储密码

+1

你真的需要封装的API访问您的自己的安全服务。 –

+1

感谢Kenny ......我最终这样做了......创建了一个exe文件来读取机器商店中的秘密,执行特权命令并返回输出 - 我把这个exe文件从笔记本电脑 – sargeMonkey

回答

1

将您的凭证存储在JSON或YAML中,让笔记本解析必要的部分。

import json 

with open('credentials.json') as f: 
    data = json.load(f) 
    username = data['username'] 
    password = data['password'] 

您应该避免在单元输出中打印秘密,否则任何您选择的技术都将被挫败。

+1

嗯......这个有效的隐藏它从平淡的看法,但问题是,访问笔记本的人仍然可以获得秘密。我猜没有办法阻止访问笔记本的人访问秘密...... – sargeMonkey

1

您可以使用keyring软件包将敏感信息存储在系统特定的受保护存储区中。
它可以通过pippypi安装。

+0

有什么办法可以阻止访问笔记本的人访问秘密? – sargeMonkey

+1

不是我能想到的。如果脚本(笔记本)可以访问秘密进行身份验证,则笔记本用户可以使用相同的方法查看秘密。 – cco

1

cco's answer is good,但如果你正在寻找一个更简单的解决方案,许多人使用环境变量来保持秘密与源代码隔离。

例如,你可以在shell执行你的脚本时,为他们提供:

$ API_TOKEN=abc123 python script.py 

在你的源代码:

import os 
API_TOKEN = os.environ.get("API_TOKEN") 

为了您Jupyter笔记本电脑,您可以使用python-dotenv或类似的包来“检索”一个.env文件,该文件包含项目的秘密并且被版本控制系统忽略。

一旦你创建了.env文件(手动或使用the package's command line tool),你可以像这样在Jupyter(或IPython中)使用python-dotenv

%load_ext dotenv 
%dotenv 
import os 
os.environ.get("API_TOKEN") 
+1

有什么办法可以阻止访问笔记本的人访问这个秘密? – sargeMonkey

+0

@sargeMonkey秘密将在命令行或'.env'文件中提供。如果它在'.env文件中,你根本不会把这个文件给其他人。 –

+1

是的,但具有笔记本访问权限的人可以通过简单地执行os.environ.get(“API_TOKEN”)来访问密钥,对吧? – sargeMonkey