能否在本地项目目录创建/模拟AWS凭证文件实现按项目匹配对应凭证?
需求可行性说明
首先明确:AWS官方的CLI/SDK默认不支持自动读取当前项目目录下的.aws配置,默认只会读取~/.aws下的全局配置、以及环境变量中指定的凭证/配置参数,所以你直接在项目下放.aws目录默认不会生效,命名profile确实需要手动切换AWS_PROFILE变量,没法自动适配目录。
你的需求完全可以实现,以下是两种无额外感知的自动适配方案:
方案1:使用direnv实现自动加载(推荐)
direnv是shell的目录上下文自动加载工具,完全满足你无感切换的需求,配置步骤:
- 先通过brew安装:
brew install direnv - 在你的shell配置文件(/.zshrc如果用zsh,/.bash_profile如果用bash)末尾加一行:
eval "$(direnv hook zsh)",对应自己的shell类型调整参数即可,配置完成后重启终端或执行source ~/.zshrc生效 - 到每个项目目录下,新建
.envrc文件,两种配置方式选一种:- 如果你用全局命名profile,直接加一行:
export AWS_PROFILE=你的项目对应profile名 - 如果你想把配置存在项目本地的
.aws目录,就加这两行:export AWS_CONFIG_FILE=$PWD/.aws/config export AWS_SHARED_CREDENTIALS_FILE=$PWD/.aws/credentials
- 如果你用全局命名profile,直接加一行:
- 首次进入该目录时执行一次
direnv allow .授权,之后每次cd进入该目录,direnv会自动加载对应的环境变量,退出目录自动撤销,完全无感。
方案2:自定义shell chpwd钩子(无需额外安装工具)
如果你不想装第三方工具,用Mac默认zsh自带的目录切换钩子也能实现:
- 打开~/.zshrc,添加以下代码:
chpwd() { # 检查当前目录是否有.aws文件夹 if [ -d "$PWD/.aws" ]; then export AWS_CONFIG_FILE="$PWD/.aws/config" export AWS_SHARED_CREDENTIALS_FILE="$PWD/.aws/credentials" # 回到没有.aws的目录就恢复全局配置 else unset AWS_CONFIG_FILE AWS_SHARED_CREDENTIALS_FILE fi }
- 执行
source ~/.zshrc生效,之后cd到有本地.aws目录的项目时会自动切换到本地配置,离开自动恢复全局。
注意事项
- 如果选择把
.aws放在项目目录下,一定要把.aws加入项目的.gitignore,避免凭证误提交到代码仓库造成泄漏 - 本地
.aws目录的权限建议设置为只有当前用户可读:chmod 700 .aws && chmod 600 .aws/*
内容的提问来源于stack exchange,提问作者Dilapidus
相关产品推荐
相关产品推荐

