如何通过Amazon Linux 2钩子配置Elastic Beanstalk访问私有Git仓库
解决方案
以下是基于Amazon Linux 2平台钩子实现pipenv访问私有Git仓库依赖的完整方案:
步骤1:准备部署密钥并安全存储
- 生成专门用于私有包仓库访问的SSH密钥对,将公钥配置为对应GitHub/Bitbucket仓库的只读访问密钥
- 将生成的私钥文件上传到你管控的私有S3存储桶中,关闭该私钥文件的公共访问权限,示例存储路径为
s3://你的私有桶名/eb-secrets/shared_package_deploy_key
步骤2:配置EB实例访问权限
找到Elastic Beanstalk环境对应的EC2实例角色(默认角色名为aws-elasticbeanstalk-ec2-role),为其添加如下权限策略,允许实例读取S3上存储的私钥:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::你的私有桶名/eb-secrets/shared_package_deploy_key" } ] }
步骤3:编写prebuild平台钩子
Amazon Linux 2的prebuild阶段钩子会在依赖安装流程之前执行,刚好可以提前配置好SSH访问环境:
- 在项目根目录下创建层级目录
.platform/hooks/prebuild/ - 在该目录下新建脚本
01_configure_private_repo_ssh.sh,内容如下:
#!/bin/bash set -e # 创建root用户的SSH配置目录(EB安装依赖默认使用root身份执行) mkdir -p /root/.ssh chmod 700 /root/.ssh # 从S3拉取私有仓库部署私钥 aws s3 cp s3://你的私有桶名/eb-secrets/shared_package_deploy_key /root/.ssh/shared_package_deploy_key chmod 600 /root/.ssh/shared_package_deploy_key # 配置SSH访问规则 cat > /root/.ssh/config << EOF Host bitbucket.org IdentityFile /root/.ssh/shared_package_deploy_key EOF # 添加Git托管平台主机公钥到授信列表,避免主机验证失败 ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts
如果你使用的是GitHub私有仓库,将上述配置中的
bitbucket.org替换为github.com即可。
- 本地为该脚本添加可执行权限:
chmod +x .platform/hooks/prebuild/01_configure_private_repo_ssh.sh
步骤4:部署验证
你项目中原有的Pipfile配置无需修改,将新增的.platform目录和项目代码一起打包部署到EB环境即可,pipenv将可以正常通过SSH拉取私有仓库的依赖包。
注意:禁止将部署私钥直接提交到项目代码仓库,必须通过S3+IAM权限管控的方式分发,避免密钥泄露。
内容的提问来源于stack exchange,提问作者djvg
相关产品推荐
相关产品推荐

