linux申请令牌错误,解决“请求中包含的安全令牌已过期”错误
在 Amazon EC2 上运行 Java 应用程序时,如何解决“The security token included in the request is expired”错误?
上次更新时间:2021 年 3 月 4 日
Amazon Elastic Compute Cloud (Amazon EC2) 实例上使用适用于 Java 的 AWS 开发工具包的 Java 应用程序接受到类似以下内容的异常:
com.amazonaws.AmazonServiceException: The security token included in the request is expired (Service: AmazonSQS; Status Code: 403; Error Code: ExpiredToken; Request ID: 12a345b6-78cd-901e-fg23-45hi67890jkl)
我如何解决此问题?
简短描述
必须使用 AWS 颁发的凭证对发送到 Amazon Web Services (AWS) 的所有应用程序 API 请求进行加密签名。
如果您的应用程序在创建 AWS 客户端时使用了临时凭证,则凭证在创建时指定的时间间隔后过期。您必须在凭证过期之前刷新凭证。
另一个过期原因是使用的时间不正确。对于许多服务器任务和进程来说,准确一致的时间参考非常重要。如果实例的日期和时间设置不正确,则 AWS 凭证会被拒绝。
如果您的应用程序运行在 Amazon EC2 实例上,最佳做法是使用分配给此实例的 AWS Identity and Access Management (IAM) 角色。使用 IAM 角色将允许使用默认服务构造函数。默认构造函数客户端按以下顺序使用默认凭证提供程序链搜索凭证:
系统环境变量:AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。
Java 系统属性:aws.accessKeyId 和 aws.secretKey。
默认凭证文件(在不同平台上该文件位于不同位置)。
实例配置文件凭证:包含在与 EC2 实例的 IAM 角色关联的实例元数据中。通过将实例配置文件附加到您的实例,可将实例配置文件凭证添加到默认凭证提供程序链。有关更多信息,请参阅使用 IAM 角色向在 Amazon EC2 实例上运行的应用程序授予权限。
如果有实例配置文件凭证可用,则默认客户端构造函数会使用 AWS 开发工具包 InstanceProfileCredentialsProvider 类的一个实例。AWS 使用此类来通过 AWS 凭证签署 API 请求,使用的是来自 Amazon EC2 实例元数据的临时安全凭证。
重要说明:如果您的应用程序使用 AWS 开发工具包 ProfileCredentialsProvider 类提供临时 AWS 凭证,则由您负责检查凭证并在过期前进行刷新。不检查或不刷新凭证会增加 ExpiredToken 错误引发应用程序故障的可能性。
解决方法
使用 Amazon Time Sync Service 或 NTP 源
在 Amazon EC2 实例上配置 Amazon Time Sync Service 或其他网络时间协议 (NTP) 源。这可以确保您的 Linux 实例具有一致且准确的时间参考。有关更多信息,请参阅设置 Linux 实例的时间或设置 Windows 实例的时间。
使用自定义临时 AWS 凭证
请在凭证过期前 5 分钟刷新临时凭证。
使用分配给实例的 IAM 角色
将实例配置文件附加到您的实例。有关更多信息,请参阅使用 IAM 角色向在 Amazon EC2 实例上运行的应用程序授予权限。验证未在您的代码或实例中指定其他凭证。实例配置文件凭证是默认凭证提供程序链搜索凭证的最后位置。如果您将凭证放置在搜索链中靠前的任何位置,则这些凭证将阻止使用 IAM。有关更多信息,请参阅使用 AWS 凭证。
要查看附加到实例的 IAM 角色的 AWS 凭证,请在 Linux shell 或 Windows PowerShell(v3.0 或更高版本)中运行以下命令。请务必将 examplerole替换为您的 IAM 角色的名称。
Linux
请使用 curl 命令查看 AWS 凭证:
$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/examplerole
此命令会返回类似以下内容的输出:
{
"Code" : "Success",
"LastUpdated" : "2016-04-26T16:39:16Z",
"Type" : "AWS-HMAC",
"AccessKeyId" : "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"Token" : "token",
"Expiration" : "2016-04-27T22:39:16Z"
}
注意:如果运行前面的 curl 命令返回 404 错误,请检查以下事项:
$ export NO_PROXY=169.254.169.254
2. 验证该实例没有发出多个并发请求和并行运行多个会话。多个并发请求和多个并行运行的会话可能会导致实例元数据服务 (IMDS) 限制。为了缓解这种情况,请使用缓存和通过指数回退方式重试。与任何服务一样,调用偶尔可能会失败。发生这种情况时,客户端将重试。有关更多信息,请参阅查询限制。
要执行重试,请修改 AWS_METADATA_SERVICE_NUM_ATTEMPTS。您可以在 ~/.aws/config 文件或用户的 botocore 会话中使用环境变量来设置选项。有关更多信息,请参阅 Boto3 DOCS 1.17.6 文档中的配置。
示例:
AWS_METADATA_SERVICE_TIMEOUT = 10
AWS_METADATA_SERVICE_NUM_ATTEMPTS = 5
3. 如果你在 Docker 容器中运行 curl 测试,请调整 instance-metadata-options http-put-response-hop-limit:
$ aws ec2 modify-instance-metadata-options --instance-id $(curl 169.254.169.254/latest/meta-data/instance-id) --http-put-response-hop-limit 2 --http-endpoint enabled
PS C:\> Invoke-RestMethod http://169.254.169.254/latest/meta-data/iam/security-credentials/examplerole
此命令会返回类似以下内容的输出:
Code : Success
LastUpdated : 2016-07-18T18:09:47Z
Type : AWS-HMAC
AccessKeyId : AKIAIOSFODNN7EXAMPLE
SecretAccessKey : wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Token : token
Expiration : 2016-04-27T22:39:16Z
使用上述命令检查实例的最新临时凭证。这些凭证在分配的临时凭证过期前约 5 分钟自动轮换或刷新。
相关信息
使用 AWS 凭证(适用于 Java 的 AWS 开发工具包)
使用凭证(适用于 Java 的 AWS 开发工具包 2.0)
这篇文章对您有帮助吗?
您是否需要账单或技术支持?
linux申请令牌错误,解决“请求中包含的安全令牌已过期”错误相关推荐
- Eclipse Android插件中的“调试证书已过期”错误
我正在使用Eclipse Android插件来构建项目,但是在控制台窗口中出现此错误: [2010-02-03 10:31:14 - androidVNC]Error generating final ...
- 解决C++中调用Python脚本的LNK2001错误
解决C++中调用Python脚本的LNK2001错误 当我们尝试在C++程序中调用Python脚本时,有时会遇到"LNK2001:无法解析的外部符号__imp_Py_Initialize&q ...
- 用友文件服务器不存在,用友T6软件备份提示超时已过期,错误'53'文件不存在
用友t6软件备份提示超时已过期,错误'53'文件不存在备份提示超时已过期,错误'53'文件不存在 备份提示超时已过期,错误'53'文件不存在 原因分析:后台表ua_log日志记录太多. 问题解答:清除 ...
- html中jsonp错误,解决jquery中jsonp格式跨域请求报parsererror的错误
在vs中创建一个空的mvc项目,在Controllers文件夹中添加一个控制器CommonController,并在该控制器下添加一个action用于获取服务器时间,代码如下: public Acti ...
- https返回400_HTTP请求中带有特殊字符|,返回400错误
Java平台,服务器是Tomcat8,前端ajax访问服务器时,F12返回400错误,经分析,URL地址中get传参值里面含有"|", Invalid character foun ...
- linux下载软件失败,解决Ubuntu Kylin文件包下载失败的错误
Ubuntu Kylin更新时出现错误是很常见的.下面大家将看到的是在Ubuntu Kylin下文件包下载失败的错误以及如何快速解决这个错误的技巧. 文件包下载失败的错误 这个错误并不仅限于Ubunt ...
- 解决密码中包含{},密码修改成功后, 查询分析器无法用此密码登录的问题
<iframe align="top" marginwidth="0" marginheight="0" src="http ...
- linux mysql 乱码怎么解决_MySQL_linux中解决mysql中文乱码方法,改默认编码:/etc/init.d/my - phpStudy...
linux中解决mysql中文乱码方法 改默认编码: /etc/init.d/mysql start (stop) 为启动和停止服务器 /etc/mysql/ 主要配置文件所在位置 my.cnf /v ...
- 错误:请求“ ..”中的成员“ ..”属于非类类型
我有一个带有两个构造函数的类,一个不带参数,而一个带一个参数. 使用接受一个参数的构造函数创建对象的工作符合预期. 但是,如果我使用不带参数的构造函数创建对象,则会出现错误. 例如,如果我编译此代码( ...
- [错误解决]centos中使用kubeadm方式搭建一个单master的K8S集群
安装步骤 参考该大佬博客 --------- [ningan@k8s-master pv]$ kubectl get pod The connection to the server localhos ...
最新文章
- 素数与量子物理的结合能带来解决黎曼猜想的新可能吗?
- 14.3.1 调用系统的拍照功能
- python学了可以干什么-学了Python都能干什么,哪个最赚钱?
- python啥意思-python是什么意思
- nginx 限制上传文件大小
- 【kafka】kafka /log_dir_event_notification的LogDir脱机事件通知
- jq获取下拉列表_jQuery下拉框操作系列$(option:selected,this) (锋利的jQuery)
- 炒股、投资免于恐惧的思考
- jenkins插件开发
- 论文赏析[EACL17]K-best Iterative Viterbi Parsing(K-best迭代维特比句法分析)
- Oracle宣布JDK 6死缓:计划赶不上变化
- 计算机在线考试报名系统软件,全国计算机软考报名官网
- Voxengo音频插件合集:Voxengo Total Bundle Mac
- 京东支付逻辑存在不安全因素
- HTTP 报文及作用
- CNtV电视直播解析PHP,电视直播
- java 12306 源码_java Web SpringMVC项目实现12306余票查询功能
- CF - 1156D - 0-1-Tree
- 指针进阶:函数指针的应用场景
- 基因编辑婴儿的意味着什么
热门文章
- 基于双边滤波的图像增强算法
- t检验怎么分析结果python_使用python 批量 配对t检验 医学 基础研究 数据分析
- 8.单链表实现与反转
- 2022身份识别技术大会 | 安全证件 | 可信身份认证 | 生物识别 | 公共安全安防身份技术展览会
- 计算机无法识别出硬件,电脑检测不到硬盘,电脑硬件故障检测工具
- TWS耳机什么值得买?入耳式蓝牙耳机排行榜10强!
- Excel的LOOKUP函数用法和实例以及与VLOOKUP的异同
- Word:一级标题行首段前距失效问题
- 计算机总自动开机 如何关闭,手把手教你win10电脑关机后自动开机怎么解决
- Java char类型介绍