如何从AWS CLI中退出错误IAM用户配置并切换到可用配置文件
调用CreateFunction操作时发生错误(AccessDeniedException):User: arn:aws:iam::9999999999999:user/xxxxxxxxxxxxxx 无权在资源arn:aws:lambda:eu-west-1:99999999999:function:zzzzzzzzzzzzzz上执行lambda:CreateFunction操作。
清空用户目录下.aws/credentials仍未生效,是因为AWS CLI存在多维度的配置优先级,更高优先级的位置还保留了旧的错误配置,按以下步骤操作即可修复:
步骤1:确认当前生效的配置来源
运行以下命令查看当前使用的IAM身份:aws sts get-caller-identity
运行以下命令查看所有配置项的具体来源(环境变量/配置文件/实例角色等):aws configure list
步骤2:清除高优先级的错误配置
AWS CLI配置优先级从高到低为:命令行参数 > 环境变量 > 当前工作目录下的.aws配置 > 用户目录下的.aws配置 > 云服务实例绑定的IAM角色,按优先级从高到低排查清除:
- 检查并清除环境变量中的旧凭证:
- Linux/macOS:运行
env | grep AWS查看所有AWS相关环境变量,存在的话执行unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN AWS_PROFILE清除 - Windows:CMD运行
set AWS_查看,PowerShell运行Get-ChildItem Env:AWS_*查看,删除对应AWS开头的环境变量即可
- Linux/macOS:运行
- 检查当前执行命令的工作目录下是否存在
.aws文件夹,存在的话删除或移动到其他目录 - 如果是在EC2/ECS/Cloud9等AWS云服务环境内执行命令,检查是否绑定了错误的实例角色/任务角色
步骤3:切换到正确的IAM配置
提前添加正确的配置文件
如果还未将可用的IAM凭证添加到AWS配置中,运行以下命令创建命名配置文件(将可用配置名替换为你自定义的名称,比如prod/dev):aws configure --profile 可用配置名
按照提示依次输入Access Key、Secret Key、默认区域(比如eu-west-1)、默认输出格式(推荐json)即可。
临时切换(仅对单条命令生效)
执行AWS命令时增加--profile参数指定配置即可,示例:aws lambda create-function --function-name zzzzzzzzzzzzzz --profile 可用配置名
会话级切换(对当前终端窗口所有命令生效)
设置环境变量指定默认配置:
- Linux/macOS:
export AWS_PROFILE=可用配置名 - Windows CMD:
set AWS_PROFILE=可用配置名 - Windows PowerShell:
$Env:AWS_PROFILE = "可用配置名"
全局切换(对所有终端所有命令永久生效)
直接修改默认配置即可,运行aws configure不带--profile参数,输入正确的凭证信息,覆盖默认的[default]配置块。
内容的提问来源于stack exchange,提问作者James

