在ReadTheDocs配置AWS访问密钥:避免公开暴露的方案问询
我需要在.readthedocs.yaml文件的jobs.pre_build阶段从S3存储桶下载文件,该操作需在每个Pull Request构建时执行。目前的配置是在项目的ReadTheDocs高级设置中把IAM用户的访问密钥设为环境变量,代码片段如下:
jobs: pre_build: - pip install awscli - aws configure set aws_access_key_id ${aws_access_key_id} - aws configure set aws_secret_access_key ${aws_secret_access_key} - aws s3 cp s3://some_path some_file
其中aws_access_key_id和aws_secret_access_key已配置为ReadTheDocs的环境变量。根据官方文档,若要让Pull Request构建能访问环境变量需勾选Public选项,但我们不想公开AWS访问密钥,请问有无其他可行的配置方式?
可行的替代配置方式
限制私有环境变量的PR访问范围
如果你的PR仅来自仓库内部协作成员(而非外部提交者),可以在ReadTheDocs环境变量设置中保持变量为私有(不勾选Public),同时开启"允许来自Pull Request的构建"选项。该选项仅对仓库拥有者、协作者提交的PR生效,外部贡献者的PR无法访问这些私有变量,既满足内部PR的构建需求,又避免密钥公开。使用IAM OIDC角色获取临时凭证
放弃长期IAM访问密钥,通过AWS OIDC身份提供商让ReadTheDocs构建服务临时获取权限:- 在AWS IAM中创建指向ReadTheDocs OIDC端点的身份提供商
- 创建IAM角色,信任该OIDC提供商,并赋予仅允许下载目标S3路径文件的最小权限(遵循权限最小化原则)
- 在
.readthedocs.yaml中无需配置密钥,直接运行aws s3 cp命令,AWS CLI会自动通过OIDC流程获取临时访问凭证,无需存储敏感信息。
使用预构建镜像嵌入文件
如果下载的文件更新频率较低,可以将文件打包到自定义Docker镜像中,在.readthedocs.yaml的build.image字段指定使用该镜像作为构建环境。ReadTheDocs启动构建时直接使用包含目标文件的镜像,无需在构建阶段访问S3,彻底规避密钥问题。通过仓库CI前置同步文件
借助GitHub Actions、GitLab CI等仓库自带的CI工具,在PR提交时自动将S3文件同步到仓库的指定目录(如docs/assets)。ReadTheDocs构建时直接从仓库读取文件,无需在构建阶段连接S3。这种方式需要确保同步流程的时效性,适合文件更新不频繁的场景。
内容的提问来源于stack exchange,提问作者Neelasha Sen

