Python 的 keyring 模块的 S3 后端
项目描述
S3 后端用于 Python 的 keyring
此模块为 Python 的 keyring 模块添加了一个 AWS S3 后端。S3 后端将在 S3 存储桶中存储密钥库凭证,并使用客户端和服务器端加密来确保凭证在传输和静止状态下的安全性。当您需要在多台机器上分发凭证时,此后端非常方便。可以使用 AWS IAM 策略对后端和加密密钥的访问进行精细调整。
安装
您可以从 Pypi 安装稳定版本
pip install s3keyring
或者您可以选择安装开发版本
pip install git+https://github.com/InnovativeTravel/s3-keyring
在 macOS El Capitan 及以后的版本中,运行 pip install 时可能会遇到权限问题。一种解决方案是使用以下方法安装 s3keyring:
sudo -H pip install --ignore-installed git+https://github.com/InnovativeTravel/s3-keyring
更好的解决方案是在 homebrew 中安装 Python,这样 pip install 就不会尝试在任何系统目录中安装包
brew install python
对于管理员:设置密钥库
如果您只是密钥库的用户,而其他人已经为您设置了密钥库,则可以跳过本节,直接跳转到本 README 的末尾的 对于密钥库用户:访问密钥库。请注意,您需要 AWS 账户的管理员权限才能设置新的密钥库,如下所述。
S3 存储桶
S3 密钥库后端要求您具有对 S3 存储桶的读写访问权限。如果您想使用存储桶 mysecretbucket 来存储您的密钥库,则需要将以下 IAM 策略附加到所有将具有读取和写入访问权限的 IAM 用户账户或角色。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::mysecretbucket", "Condition": {} }, { "Effect": "Allow", "Action": [ "s3:DeleteObject", "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::mysecretbucket/*" } ] }
如果您想创建一个只读访问密钥圈的策略,请从上面的策略中移除 s3:PutObject 和 s3:DeleteObject 操作。
加密密钥
您需要创建一个 KMS加密密钥。记下您创建的KMS密钥ID。您需要将此KMS密钥ID与密钥圈的用户共享。
重要:您需要授予每个需要访问密钥圈的IAM用户或角色的读取访问权限。
对于用户:访问密钥圈
一次性配置
如果您尚未这样做,您需要通过运行以下命令来配置您本地的AWS CLI安装:
aws configure
然后配置S3密钥圈
s3keyring configure
您的密钥圈管理员将为您提供KMS密钥ID、Bucket和Namespace配置选项。选项AWS profile允许您指定在访问密钥圈时用于签署所有请求的本地AWS CLI配置文件。大多数用户将希望使用默认配置文件。
重要:当在通过IAM角色授予密钥圈访问权限的EC2实例中部署s3keyring时,您不应在实例中配置s3keyring时指定自定义AWS配置文件。
您可以通过设置以下环境变量来不使用用户输入配置s3keyring模块:S3KEYRING_BUCKET、S3KEYRING_NAMESPACE、S3KEYRING_KMS_KEY_ID、S3KEYRING_AWS_PROFILE。如果正确设置了这些环境变量,则可以使用以下方式配置s3keyring模块:
s3keyring configure --no-ask
配置配置文件
您可以使用s3keyring将密钥存储(读取)在(来自)多个后端S3密钥圈中。一个典型的用例是为具有不同信任级别的不同用户组创建不同的密钥圈。例如,您的密钥圈管理员可能设置了一个只有具有管理员权限的IAM用户可以访问的S3密钥圈。使用您的密钥圈管理员提供的bucket、KMS密钥ID和命名空间,您可以配置一个单独的s3keyring配置文件来访问仅管理员可访问的密钥圈。
s3keyring --profile administrators configure
您的密钥圈管理员还可能设置了一个单独的S3密钥圈来存储需要由您参与的项目中的EC2实例作为后端工作进程访问的秘密。要访问该密钥圈,您将配置第二个s3keyring配置文件。
s3keyring --profile website-workers configure
然后,为了在管理员密钥圈中存储和检索秘密
s3keyring --profile administrators set SERVICE ACCOUNT PASSWORD s3keyring --profile administrators get SERVICE ACCOUNT
并且您可以使用选项--profile website-workers以相同的方式为website-workers密钥圈进行操作。
配置文件
默认情况下,s3keyring从~/.s3keyring.ini读取配置选项。您还可以使用以下方式在当前工作目录的.s3keyring.ini文件中存储配置:
s3keyring configure --local
s3keyring将始终首先从您当前工作目录下的.s3keyring.ini文件中读取配置。如果没有找到,则从~/.s3keyring.ini中读取。
用法
s3keyring模块提供了与Python的keyring模块相同的API。您可以从Python代码中以这种方式以编程方式访问您的S3密钥圈
from s3keyring.s3 import S3Keyring kr = S3Keyring() kr.set_password('groupname', 'username', '123456') assert '123456' == kr.get_password('groupname', 'username') kr.delete_password('groupname', 'username') assert kr.get_password('groupname', 'username') is None
您还可以从命令行使用密钥环
# Store a password s3keyring set groupname username 123456 # Retrieve it s3keyring get groupname username # Delete it s3keyring delete groupname username
推荐工作流程
这就是我在我的Python项目中使用 s3keyring 的方法。
假设我的项目根目录看起来像这样
setup.py my_module/ __init__.py
我在项目根目录下运行
s3keyring configure --local
我将生成的 .s3keyring.ini 文件作为项目源代码的一部分(即在版本控制下)。然后在我的项目代码中,我这样使用密钥环
from s3keyring.s3 import S3Keyring keyring = S3Keyring(config_file="/path/to/s3keyring.ini") keyring.set_password('service', 'username', '123456') assert keyring.get_password('service', 'username') == '123456'
联系方式
如果您有任何问题、错误报告、建议等,请在 GitHub 项目页面 上创建一个问题。
许可证
本软件根据 MIT 许可证 许可。
请参阅 许可证文件
© 2020 German Gomez-Herrero,以及 FindHotel。
变更日志
0.2.2
将 pycparser 版本固定,以防止 pycparser 2.15 中的错误
0.2.2
更改命名约定:秘密命名空间、组和密钥
0.2.0
如果 s3keyring 配置文件指出,不要使用本地密钥链
0.1.0
文档修正
添加了列出与服务关联的秘密的新密钥环方法
0.0.12
文档修正
处理项目特定配置的修正
0.0.2
文档和包数据的微小修正
0.0.1
初始发布(germangh)
项目详情
s3keyring-0.3.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a3d366e8d1603e978f94fdccd2fb5045640bd6a9127c36b6ec5d745d0e97d21e |
|
MD5 | 844298df03b18b8b682a25d779625a24 |
|
BLAKE2b-256 | fb5976d5d73f555d24a6fafaa3cce8fffffdc6e1a28fb7f137f8816146cdbc84 |