如何为Elastic Beanstalk不同环境设置不同私有密钥?
Elastic Beanstalk 多环境对应私钥配置实现方案
直接用「S3按环境分路径存储 + .ebextensions动态路径匹配」的方案就能实现,不用给每个环境单独打不同的部署包,具体操作如下:
- 先按环境维度拆分S3上的私钥存储路径,不要把所有环境的私钥混存在同一目录。推荐路径规则为
s3://<你的EB关联S3桶>/<应用标识>/<EB环境名>/private.key,比如生产环境私钥存s3://your-eb-bucket/payment-service/prod/private.key,测试环境存s3://your-eb-bucket/payment-service/test/private.key。记得给EB环境绑定的EC2实例角色配置对应路径的最小读权限,不要开放整个S3桶的访问权限。 - 在项目根目录的
.ebextensions文件夹下新建私钥拉取配置文件(比如命名为01_fetch_tls_key.config),配置里直接引用EB内置的${AWS::EnvironmentName}环境变量,自动匹配当前部署环境对应的S3私钥路径,不需要手动写死环境标识。配置参考如下:
files: # 私钥在EC2实例上的实际存放路径,可根据你的服务配置调整 "/etc/pki/tls/private/custom.domain.key": mode: "000600" owner: root group: root # 自动拼接当前环境名,拉取对应环境的私钥文件 source: "https://s3.<你部署的区域>.amazonaws.com/<你的桶名>/<应用名>/${AWS::EnvironmentName}/private.key" authentication: S3AccessAuth # 声明S3访问所用的身份,默认用EB自带的EC2实例角色即可 Resources: S3AccessAuth: Type: AWS::S3::Authentication Properties: RoleName: "aws-elasticbeanstalk-ec2-role"
- 如果安全要求比较高,可以给不同环境配置独立的EC2实例角色,每个角色仅授予当前环境对应私钥路径的S3读权限,从权限层面杜绝测试、预发等低安全级别环境拉取生产私钥的可能。
注意事项
- 存储在S3上的私钥必须开启服务端加密,禁止配置公网可读权限
- 拉取到实例上的私钥权限必须设置为
000600,仅root用户可读可写,避免被其他非授权进程读取 - 后续如果需要轮换私钥,直接替换S3对应路径下的文件后,触发EB环境的实例刷新或者重新部署配置即可,不需要修改业务代码重新发版
内容的提问来源于stack exchange,提问作者Shunya Watanabe
相关产品推荐
相关产品推荐

