使用AWS参数存储的机密管理器

psyml的Python项目详细描述


心理符号

buildPyPI versionCoveragelicense

yml文件的生命周期

用户将准备一个如下所示的yml文件:

path:/apps/superman/region:us-east-1kmskey:alias/supermantags:cost_center:team17project:supermanparameters:-name:api_versiondescription:The version of the API endpoint, not a secret.type:Stringvalue:2-name:api_tokendescription:The token used to communicate with the API endpoint, typically a secrettype:SecureStringvalue:5a5468-786448467a59-326436

注意这里所有的秘密都是纯文本的。为了将其保存到我们的代码库中,我们将文件另存为superman.nonprod.yml,从命令行登录到我们的AWS帐户,然后运行:

psyml encrypt superman.nonprod.yml

这将生成一个如下所示的文件:

^{pr2}$

请注意,我们添加了一个名为encrypted_with的额外字段,它是用于加密机密的KMS密钥(alias/psyml)的当前id。此外,参数的类型被更改为小写字符。在

这个yml文件的维护应该不会太困难。如果需要添加配置,只需将其添加到yml文件中即可。如果需要添加机密,请将映射添加到参数中,确保值为明文,类型为SecureString。之后,再次运行psyml encrypt filename.yml,这次,psyml将忽略所有加密的参数,只使用encrypted_with中的keyid对新参数进行加密。要删除条目,请先删除参数存储中的相关条目,然后再删除yml文件中的映射,这不是因为我们有任何依赖关系,而是因为很容易忘记清理过程。在

过程中使用的密钥

我们在这个工具中专门用了一个单独的部分来介绍KMS的使用,因为它确实可能有点混乱。在

为了清楚起见,我们使用了两组密钥,一组(alias/psyml)只用于本地加密,这样我们的秘密就可以安全地保存到我们的代码库中。另一个KMS密钥由用户在yml文件的kmskey字段中指定,用于实际的参数存储加密。因此,当我们运行psyml encrypt时,我们将使用alias/psyml对值进行加密。当我们运行psyml decrypt时,我们仍将使用alias/psyml来解密这些值。但是在psyml save中,我们将首先使用alias/psyml来解密内存中的值,然后使用kmskey来进行参数存储上载。在

密钥alias/psyml是在每个帐户中创建的,我们使用这个密钥加密yaml文件中的所有机密。此密钥不会用于ssm中的参数加密。我们不会为每个区域创建一个CMK,因为这是不必要的。这个键的默认区域是Sydney(ap-southeast-2),因为我们在澳大利亚,您可以通过将环境变量PSYML_KEY_REGION设置为us-east-2来改变这种行为。如果您不喜欢我们的别名,也可以使用环境变量PSYML_KEY_ALIAS将其设置为其他值。在

在这个工具中,当我们第一次运行encrypt并且没有alias/psyml键时,该工具将尝试为您创建它。请注意,由于权限问题,这可能会失败,如果是这种情况,请使用更强大的角色设置密钥和别名。在

所有可用行动的简短简介

命令行语法如下:

psyml [action] filename.yml,其中action可以是:

  • encrypt:用默认kms密钥(alias/psyml)加密yml文件。在

  • save:使用指定的KMS键将参数保存到参数存储中。在

  • nuke:删除yml文件中指定的所有参数存储项。在

  • decrypt:解密yml文件并将输出写入stdout。在

  • refresh:使用当前的alias/psyml加密yml文件。在

  • export:导出所有变量,以便可以对其进行源代码。在

  • diff:将参数存储中的参数与本地版本进行比较。在

  • sync:更新参数存储中的参数,使其与yml同步。在

已知限制

  • 有些命令(diff/sync)尚未实现。在
  • 尚不支持参数存储类型StringList。在
  • 我们正在使用KMS服务,请在继续之前检查the KMS pricing page。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
打印val在Java中可以用作变量吗?   java如何以矩阵格式存储2D数组(带逗号)   java获取空的响应正文,带有Inversion2>无法填充数据   java Jackson UnrecognizedPropertyException存在时引发   java为什么我可以在非公共类中拥有公共成员?   如何在Java中从外部库导入包?   java如何从不推荐使用的日期类型替换getDate()?   java如何将数据集转换为JavaPairDD?   如何在JavaSpring中创建3d数组   合法线程操作的java定义   如何从java文本文件中读取输入   从StringArray java中的标记/单词构建句子   将UDP从Java发送到Python不起作用   java显示组织。日食xsd。XSDSchema内容