在运行 aws iam 上传-服务器-证书时,如何解决“请求中包含的安全令牌无效”错误?

cd导入所有 pem/key 文件所在的目录,并运行以下命令:

aws iam upload-server-certificate
--server-certificate-name certificate_name
--certificate-body file://webservercertificate.pem
--private-key file://server.key
--certificate-chain file://certificate_chain_file.pem

我得到以下错误:

方法时发生客户端错误(InvalidClientTokenId) 中包含的安全令牌 请求无效。

我在“用户”中有1个“用户”。该用户已被分配以下权限:

IAMFullAccess IAMReadOnlyAccess IAMUserSSHKeys

我已经下载了这个用户的凭据,并将它们放入我的用户变量中

AWS_ACCESS_KEY ****
AWS_SECRET_KEY ****

我在我的弹性豆茎 aws-elasticbeanstalk-ec2-role上有1个角色

493020 次浏览

尝试转到您帐户页面上的安全凭据: 在右上角点击你的名字-> 我的安全凭证

然后在那里生成访问密钥,并在凭据文件中使用这些访问密钥(awsconfigure)

您以某种方式使用了错误的 AWS 帐户的 AWS 凭据(AccessKey 和 Secretariat Key)。因此,确保它们是正确的,否则你需要创建新的并使用它们——在这种情况下,@Prakash 的回答可能对你有好处

如果使用 CLI硕士学位,则必须将会话令牌 此外设置为设置访问和密钥。请参阅本文: Https://aws.amazon.com/premiumsupport/knowledge-center/authenticate-mfa-cli/

我犯了同样的错误,但是是由另一个问题引起的。

在 AWS 上更改了凭据,但是我仍然使用一个缓存的 MFA 会话令牌作为配置文件。

~/.aws/cli/cache/下的每个配置文件都有一个缓存文件,其中包含会话标记。

删除缓存文件,重新发出命令,并输入一个新的 MFA 令牌和它的好去。

我觉得你可以通过无签名请求程序来避免这种情况,就像这样:

aws --region us-west-2 --no-sign-request --endpoint-url=http://192.168.99.100:4572 \
s3 mb s3://mytestbucket
  1. 点击你的用户名在顶部导航,我的安全凭证
  2. 单击 Access Key Tab,创建 New,复制密钥和 secret。
  3. 从终端运行 $ aws configure并使用新的密钥和 secret。
  4. 再次运行命令:

    serverless invoke local --function create --path mocks/create-event.json
    

这发生在我使用 java sdk 的时候。对我来说,问题是我没有使用假定角色的会话令牌。

工作代码示例(在 kotlin 中)

        val identityUserPoolProviderClient = AWSCognitoIdentityProviderClientBuilder
.standard()
.withCredentials(AWSStaticCredentialsProvider(BasicSessionCredentials("accessKeyId", ""secretAccessKey, "sessionToken")))
.build()

尝试导出正确的配置文件,即 $ export AWS_PROFILE="default" 如果只有默认配置文件,请确保键是正确的,然后重新运行 aws configure

在我的例子中,有两个不同的“ AWS _ secret T _ ACCESS _ KEY”和“ AWS _ ACCESS _ KEY _ ID”值,一个是通过 Windows 环境变量设置的,一个是通过命令行设置的。

因此,使用命令行更新这两个和 default _ region

> aws configure

按回车键并按照步骤填写正确的 AWS_SECRET_ACCESS_KEYAWS_DEFAULT_REGION

> aws sts get-caller-identity

应该返回新的设置凭据

我能够使用 AWS cli 进行完全身份验证,所以对我来说问题肯定在 terraform 内。我尝试了以上所有的步骤,但都没有成功。一个重新启动为我修复它,一定有一些缓存在地形的某个地方,是造成这个问题。

如果你也得到了一个会话令牌,那么你需要在 configure之后手动设置它:

aws configure set aws_session_token "<<your session token>>"

在我的情况下,问题是由 作为管理员运行 powershell引起的,所以它在管理员用户的根目录中查找 aws凭据。可能有一个更好的方法来解决这个问题,但是对我来说最有效的方法是 在管理员用户的根目录中重新创建我的.aws 文件夹

这很奇怪,但是在我的例子中,每当我想要通过键入 aws configure重新键入访问 ID 和密钥时。

在位于 ~/.aws/credentials的文件中添加 id 访问总是会导致访问 id 条目混乱(见图)The messed access id

我已经删除了这个混乱,只留下了访问 ID。错误已经解决。

为了在运行 AWS CLI 命令时消除这个错误,我必须指定使用 --profile default的 AWS 配置文件。虽然我不能理解,为什么它没有自动拾取这个配置文件,因为只有 [dafault]配置文件在我的 awsconfig 和凭证文件。

希望这个能帮上忙。

干杯, Kunal

在弹性 Bean}上部署 django 应用程序时,我遇到过类似的问题,当我尝试各种方法时,在 ~/中的配置文件中创建了一个 eb-cli 配置文件。Aws/文件夹,所以一旦我摆脱了一切工作正常! !.

如果从使用临时 IAM 角色凭据切换到使用 IAM 用户凭据,不要忘记确保仅用于临时凭据的 AWS_SESSION_TOKEN不再具有值:

unset AWS_SESSION_TOKEN # unset the environment variable

即使在重新运行 aws configure并输入一个新的 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY之后,我还是出现了同样的错误。

对我来说,修复它的方法是删除我的 ~/.aws/credentials文件并重新运行 aws configure

看起来我的 ~/.aws/credentials文件有一个附加值: aws_session_token,它导致了这个错误。在使用命令 aws configure删除和重新创建 ~/.aws/configure之后,现在只有 aws_access_key_idaws_secret_access_key的值。

当您禁用 MFA 时也会发生这种情况。

手动编辑文件与编辑器的选择,在这里使用 vi (请备份之前) :

vi ~/.aws/credentials

然后删除 [违约-长期]部分。作为一个最小的设置,应该有一个部分 [默认]留下实际凭据。

[default-long-term]
aws_access_key_id = ...
aws_secret_access_key = ...
aws_mfa_device = ...

我把密钥和访问密钥搞混了:)

类似于帕特的反应,检查您的环境变量。 特别是 AWS_SESSION_TOKENAWS_SECURITY_TOKEN

试着取消它们: unset VAR_NAME

要查看设置了哪些变量,请尝试 env | grep AWS并期望类似下面的操作:

AWS_REGION=ap-southeast-2
AWS_PAGER=
AWS_SECRET_ACCESS_KEY=...
AWS_ACCESS_KEY_ID=...
AWS_SESSION_TOKEN=...
AWS_SECURITY_TOKEN=...

我在使用 cli 上传证书时遇到了类似的问题。 我需要使用来自新创建的 iam 用户的编程访问(使用它自己的密钥)。 当我使用 AWS configure 命令和新的 iam 用户凭证进行编程访问时,我用于向 AWS 帐户中的 AWS 控制台(web)进行身份验证的 MFA 会产生干扰。在新的凭据文件(从 awsconfigure 命令创建)中,来自 MFA 日志的会话令牌以某种方式保存了下来。在我的情况下,手动从凭据文件中删除会话令牌。

谢谢你,我用你的建议解决了我的问题。

我是这样配置的。

# aws configure

但是,我遇到了这个错误。

# aws iam list-users




An error occurred (InvalidClientTokenId) when calling the ListUsers operation: The security token included in the request is invalid.


# aws sts get-caller-identity


An error occurred (InvalidClientTokenId) when calling the GetCallerIdentity operation: The security token included in the request is invalid.

我喜欢你的建议。

# aws configure set aws_session_token "<<your session token>>"

我解决了,谢谢。

经过这么多的研究,我发现我的 AWS 帐户被暂停,由于付款。

所以,请确认您的帐户没有被暂停。

在我的例子中,我们同时使用 AWS CN 和 COM,即使我有有效的密钥和配置/凭据文件,甚至在命令中指定导出和 --profile,我也会得到这个错误。

修复: ERROR: NotAuthorizedError - Operation Denied. The security token included in the request is invalid.

我还将 --region添加到命令中。

对于在 Cloud9编辑器上使用 AWS SDK 时出现这个错误的任何人,问题可能是由于 AWS 管理的临时凭证可能会限制身份(AWS 为您设置的 AWS 管理的临时凭证)可以执行的操作。

如果您运行 cat ~/.aws/credentials,您将看到一个已经为您创建的配置文件,并且该配置文件还列出了会话标记。注意: 这是由 AWS 管理的,不能被修改/删除。

一种解决办法是关闭 AWS 管理的临时凭证。这里有一些关于如何管理这些临时凭证以及如何关闭它们的信息: https://docs.aws.amazon.com/cloud9/latest/user-guide/security-iam.html#auth-and-access-control-temporary-managed-credentials。一旦停止使用 AWS 管理的凭据,并重新运行上面的命令(cat ~/.aws/credentials) ,就会注意到文件是空的。现在,您必须手动设置一个概要文件,并将此概要文件用于 AWS SDK/CLI。

要配置配置文件,您需要运行: aws configure <name-of-the-profile>。如果不为配置文件传递名称,它将默认为 违约(并随后覆盖此默认配置文件)。在配置文件集中,将此配置文件与 AWS SDK/CLI/API 一起使用。

如果这可以帮助任何人,我有同样的问题,最终我发现,这是因为我的 AWS 配置文件区域是 eu-south-1。通过将其设置为 us-west-2,它起作用了。

这对我来说没有任何意义,但似乎这是一些检查,如果你有这个问题。

有过类似的问题,我不得不重新配置我的法律

对我来说,解决这个问题的方法是重置环境变量

export AWS_ACCESS_KEY=<key>
export AWS_SECRET_ACCESS_KEY=<key>

在我的示例中,我自动创建了 Api 键,然后直接使用 Asume role 使用它们。当使用 st take-role 时,它们不起作用。

在创建 api 密钥之后,我睡了大约10秒钟,这解决了我的问题。

在我的情况下,此错误是由于错误的 AWS 凭据造成的。请在重试之前进行验证。

打开我的 ~/。Aws/凭证文件,并看到秘密密钥与我的访问 ID 进行了奇怪的交换,切换它解决了问题

现在说这个有点晚了,不过这个可能对某些人有帮助。使用视窗。我从一个账户转到了另一个账户。在第一个帐户工作之前,我跑步

SET AWS_ACCESS_KEY_ID=ABCDE....
SET AWS_SECRET_ACCESS_KEY=12345...
SET AWS_SESSION_TOKEN=a1b2c3...

当我切换到第二个帐户时,我运行以下命令。第二个帐户不需要会话令牌:

SET AWS_ACCESS_KEY_ID=FGHIJ....
SET AWS_SECRET_ACCESS_KEY=67890...

当我试图连接时,我收到了错误消息:

An error occurred (InvalidClientTokenId) when calling the GetCallerIdentity operation: The security token included in the request is invalid

我通过运行 set AWS_SESSION_TOKEN=清除了会话 toke 变量,然后就能够进行身份验证了。注意,等号前面没有空格。

在我的例子中,我在尝试使用 SDK 发送带有 AWS SES的电子邮件时遇到了这个错误。我必须重新启动应用程序(。NET 6在 Docker 中使用 Docker-compose) ,以便应用程序重新加载凭据,因此一旦加载就必须缓存这些凭据。