2017-07-06 165 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