**问题:**
在使用 AWS CLI 时,出现报错信息:“fatal error: Unable to locate credentials”,提示无法找到凭证。该问题常见于初次配置或环境变更后的 AWS CLI 使用过程中,导致无法正常调用 AWS 服务。解决此问题需确保正确配置了访问凭证,包括 Access Key ID 和 Secret Access Key。常见原因包括未配置凭证、配置文件路径错误、权限设置不当或使用了错误的配置文件。本文将介绍排查和修复该错误的几种常用方法,如配置 `aws configure`、检查环境变量、确认凭证文件权限等。
1条回答 默认 最新
白萝卜道士 2025-09-04 02:30关注一、问题背景与初步排查
在使用 AWS CLI 时,出现报错信息:
"fatal error: Unable to locate credentials",表示 AWS CLI 无法找到有效的凭证信息。这通常发生在以下几种场景:- 首次配置 AWS CLI,尚未设置凭证;
- 环境变量未设置 AWS 凭证;
- 凭证文件路径错误或文件名拼写错误;
- 权限配置不当导致无法读取凭证文件;
- 使用了错误的配置文件或配置名称。
二、凭证查找顺序与机制分析
AWS CLI 查找凭证的顺序如下,优先级由高到低:
- 环境变量:
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_DEFAULT_REGION; - CLI 配置文件:
~/.aws/credentials和~/.aws/config; - EC2 实例元数据服务(仅限 EC2);
- 容器或 Lambda 环境中的 IAM 角色(如适用)。
查找方式 适用场景 是否推荐 环境变量 临时测试、CI/CD 环境 推荐用于自动化 配置文件 本地开发、多账户管理 推荐用于日常使用 EC2 实例角色 EC2 实例内部使用 AWS 服务 推荐用于 EC2 环境 三、解决方法详解
以下是几种常见且有效的排查与修复方法:
1. 使用
aws configure命令配置凭证执行以下命令,输入 Access Key ID、Secret Access Key 和默认区域:
aws configure AWS Access Key ID [None]: YOUR_ACCESS_KEY AWS Secret Access Key [None]: YOUR_SECRET_KEY Default region name [None]: us-east-1 Default output format [None]: json该命令会将凭证信息写入到
~/.aws/credentials和~/.aws/config文件中。2. 检查环境变量是否设置正确
查看当前终端会话中是否设置了 AWS 凭证环境变量:
echo $AWS_ACCESS_KEY_ID echo $AWS_SECRET_ACCESS_KEY若未设置,可在 shell 中临时设置:
export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY export AWS_DEFAULT_REGION=us-east-13. 检查凭证文件是否存在及权限是否正确
检查凭证文件是否存在:
ls -la ~/.aws/确保
~/.aws/credentials文件权限为 600:chmod 600 ~/.aws/credentials4. 使用多个配置文件与命名配置
在
~/.aws/credentials文件中可以定义多个配置,例如:[default] aws_access_key_id = DEFAULT_ACCESS_KEY aws_secret_access_key = DEFAULT_SECRET_KEY [dev-account] aws_access_key_id = DEV_ACCESS_KEY aws_secret_access_key = DEV_SECRET_KEY使用时指定配置名称:
aws s3 ls --profile dev-account四、高级排查与流程图
当基础方法无效时,可以使用更系统化的排查流程,如下图所示:
graph TD A[开始] --> B{是否设置了环境变量?} B -->|是| C[使用环境变量凭证] B -->|否| D{是否配置了 ~/.aws/credentials?} D -->|是| E[检查文件权限] D -->|否| F[运行 aws configure 配置凭证] E --> G{权限是否为600?} G -->|是| H[尝试调用 AWS API] G -->|否| I[chmod 600 ~/.aws/credentials] H --> J{是否成功?} J -->|是| K[问题解决] J -->|否| L[检查是否使用了错误的 profile]本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报