【问题标题】:How to *safely* install a python private package from github in an AWS EMR bootstrap script如何*安全*在 AWS EMR 引导脚本中从 github 安装 python 私有包
【发布时间】:2021-04-02 00:39:32
【问题描述】:

我想将一个 Python3 包从一个私有 Github 存储库安装到一个 AWS EMR Spark 集群上。

我知道如何通过硬编码凭据来以肮脏的方式执行此操作,但是推荐的安全执行此操作的最佳实践是什么?我不想在引导脚本中存储凭据...

提前致谢。

【问题讨论】:

    标签: amazon-web-services github pip amazon-emr


    【解决方案1】:

    警告:我没有使用过自定义 EMR 引导脚本,但我认为它们与常规用户数据脚本没有太大区别。

    有一些选择:

    1. Systems Manager Parameter Store: 这本质上类似于 AWS 中的 windows 注册表,一个区域键值存储。您可以在此处以 my/git/credentials 之类的名称存储您的凭据,甚至可以使用密钥管理服务对其进行加密。然后,在您的引导脚本中,您可以使用 AWS CLI 请求凭证并使用它们连接到私有 git 存储库。这要求集群的实例角色有权访问该参数(以及 KMS-Key,如果您已加密该值)
    2. Secrets Manager: 总体思路类似于 SSM 参数存储。机密管理器还允许您以安全的方式存储您的凭据,在这种情况下,加密是强制性的。它甚至提供生命周期挂钩,以便在您需要时定期更新凭据。您可以在引导脚本中使用我在选项 1) 中描述的相同技术。权限方面的要求类似,不过这里肯定要加上 KMS 权限和 Secrets Manger 权限。在这种情况下,您必须解析来自 Secrets Manager 的 JSON 响应。

    我个人会从选项 1 开始,它会更便宜。如果您有特定的审计/监管要求,我会考虑选项 2 - 它稍微复杂一些。

    【讨论】:

      【解决方案2】:

      感谢 Maurice,我按照他的选项 #2 成功实施了一个安全流程。

      1. 在 github 上使用读取凭据创建访问令牌。

      2. 将其存储在 AWS Secrets Manager 中。就我而言,我将这个秘密命名为“github-read-access”

      3. 将访问此密钥的权限授予要查询它的用户,或者在引导 EMR 脚本的情况下,授予 EMR 角色访问权限。

      4. 使用 aws CLI,我将令牌存储为环境变量,并使用以下命令安装包:

        export GITHUB_TOKEN=`aws secretsmanager get-secret-value --secret-id github-read-access |grep SecretString|cut -d ":" -f 3|cut -d '"' -f 2 |cut -d '\' -f1`
        sudo pip3 install git+https://${GITHUB_TOKEN}@github.com/<USER_NAME>/<REPO_NAME>.git 
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-05
        • 2020-06-28
        • 2015-10-10
        • 1970-01-01
        • 2014-03-29
        • 1970-01-01
        • 1970-01-01
        • 2013-01-18
        相关资源
        最近更新 更多