使用AWS Secrets Manager命令创建.env文件时遇权限拒绝问题
问题原因
你的命令里,sudo仅作用于aws secretsmanager get-secret-value这一段,后面的管道(|)和重定向(>)操作是用当前普通用户权限执行的,而普通用户没有/srv/kingskidz/目录的写入权限,因此触发Permission denied错误。
解决方法
方法1:用sudo执行整个命令链
把整个命令用bash -c包裹,让所有操作都在sudo权限下执行:
sudo bash -c 'aws secretsmanager get-secret-value --secret-id "KingsKidzApplication-env" --region "ap-southeast-2" | jq -r '.SecretString' | jq -r "to_entries|map(\"\(.key)=\\\"\(.value|tostring)\\\"\")|.[]" > "/srv/kingskidz/.env"'
方法2:先输出到临时文件再移动
先将内容写入当前用户有权限的临时目录,再用sudo移动到目标位置,这种方式更直观且不易出错:
# 生成临时文件 aws secretsmanager get-secret-value --secret-id "KingsKidzApplication-env" --region "ap-southeast-2" | jq -r '.SecretString' | jq -r "to_entries|map(\"\(.key)=\\\"\(.value|tostring)\\\"\")|.[]" > /tmp/kingskidz_temp.env # 移动到目标目录 sudo mv /tmp/kingskidz_temp.env /srv/kingskidz/.env
额外说明
- 不需要调整
/srv/kingskidz/目录的权限(除非有其他需求),修改目录权限会带来不必要的安全风险。 - 你配置的EC2实例角色权限没问题,错误和Secrets Manager权限无关,完全是本地文件系统的权限问题。
内容的提问来源于stack exchange,提问作者Harlan Gray
相关产品推荐
相关产品推荐

