繁体   English   中英

运行 aws iam upload-server-certificate 时如何解决“请求中包含的安全令牌无效”错误?

[英]How can I resolve the error "The security token included in the request is invalid" when running aws iam upload-server-certificate?

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 

我收到以下错误:

调用 UploadServerCertificate 操作时发生客户端错误 (InvalidClientTokenId):请求中包含的安全令牌无效。

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

IAMFullAccess IAMReadOnlyAccess IAMUserSSHKeys

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

AWS_ACCESS_KEY ****
AWS_SECRET_KEY ****

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

尝试转到您帐户页面上的安全凭证:单击右上角的您的姓名 -> 我的安全凭证

然后在那里生成访问密钥并在您的凭据文件中使用这些访问密钥(aws 配置)

如果您将 CLI与 MFA 结合使用,则除了设置访问密钥和密钥外,您还必须设置会话令牌。 请参考这篇文章: https : //aws.amazon.com/premiumsupport/knowledge-center/authenticate-mfa-cli/

就我而言,有两种不同的“AWS_SECRET_ACCESS_KEY”和“AWS_ACCESS_KEY_ID”值,一种是通过 Windows 环境变量设置的,一种是通过命令行设置的。

因此,使用命令行更新这两个和 default_region

> aws configure

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

> aws sts get-caller-identity

应该返回新的设置凭据

如果您还获得了会话令牌,则需要在configure后手动设置它:

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

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

unset AWS_SESSION_TOKEN # unset the environment variable

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

即使在重新运行aws configure并输入新的AWS_ACESS_KEY_IDAWS_SECRET_ACCESS_KEY之后,我也遇到了同样的错误。

为我修复的是删除我的~/.aws/credentials文件并重新运行aws configure

似乎我的~/.aws/credentials文件有一个附加值: aws_session_token导致错误。 使用命令aws configure删除并重新创建~/.aws/configure aws configure ,现在只有aws_access_key_idaws_secret_access_key值。

我必须指定 AWS 配置文件以显式使用--profile default以在运行 AWS CLI 命令时消除此错误。 我不明白为什么它没有自动选择这个配置文件,因为我的 aws 配置和凭据文件中只有[dafault]配置文件。

我希望这有帮助。

干杯,库纳尔

  1. 在顶部导航中单击您的用户名,我的安全凭证
  2. 单击访问密钥选项卡,新建,复制密钥和秘密。
  3. 从终端运行$ aws configure并使用新的密钥和秘密。
  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()

您不知何故使用了 AWS 账户的错误 AWS 凭证(AccessKey 和 SecretKey)。 因此,请确保它们是正确的,否则您需要创建新的并使用它们 - 在这种情况下,@Prakash 答案可能对您有好处

我有同样的错误,但由不同的问题引起。

AWS 上的凭证已更改,但我仍在使用缓存的 MFA 会话令牌作为配置文件。

~/.aws/cli/cache/下的每个配置文件都有一个包含会话令牌的缓存文件。

删除缓存文件,重新发出命令并输入新的 MFA 令牌,一切顺利。

禁用 MFA 时也会发生这种情况。 AWS 凭证中将有一个旧的长期条目。

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

vi ~/.aws/credentials

然后删除[default-long-term]部分。 作为最小设置的结果,应该有一个部分[default]留下实际凭据。

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

与 Pat 的响应类似,请检查您的环境变量。 特别是AWS_SESSION_TOKENAWS_SECURITY_TOKEN

尝试unset VAR_NAMEunset VAR_NAME

要查看设置了哪些变量,请尝试env | grep AWS env | grep AWS并期待以下内容:

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

我认为您可以通过传递 --no-sign-request 参数来避免它,如下所示:

aws --region us-west-2 --no-sign-request --endpoint-url=http://192.168.99.100:4572 \
 s3 mb s3://mytestbucket

在我的情况下,问题是由于以admin身份运行 powershell ,所以它在我的管理员用户的根目录中寻找 aws 凭据。 可能有更好的方法来解决这个问题,但对我来说快速有效的是在我的 admin 用户的根目录中重新创建我的 .aws 文件夹

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

这里的游戏有点晚了,但这可能对某人有所帮助。 使用 Windows。 我已经从一个帐户切换到另一个帐户。 在第一个帐户工作之前,我跑了

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

当我切换到第二个帐户时,我运行了以下内容。 第二个帐户不需要 session 令牌:

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=清除了 session 令牌变量,然后我能够进行身份验证。 请注意,等号之前没有空格。

我能够使用完全经过身份验证的 AWS cli,所以对我来说问题肯定在 terraform 中。 我尝试了上述所有步骤,但没有成功。 重新启动为我修复了它,在导致此问题的 terraform 某处必须有一些缓存。

这很奇怪,但就我而言,每当我想通过键入aws configure重新键入访问 ID 和密钥时。

添加 id 访问最终总是在位于~/.aws/credentials的文件中的访问 id 条目中出现混乱(见图) 混乱的访问ID

我已经删除了这个烂摊子,只留下了访问 ID。 并且错误解决了。

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

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

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

我是这样配置的。

# 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--profile收到此错误。

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

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

对于在 Cloud9 编辑器上使用 AWS 开发工具包时遇到此错误的任何人,问题可能是由于 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 开发工具包/CLI。

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

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

对我来说没有任何意义,但似乎需要检查你是否有这个问题。

有类似的问题,我不得不重新配置我的 aws

为我解决这个问题的是重置环境变量

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

就我而言,我自动创建了 Api 密钥,然后使用 Assume 角色直接使用它们。 使用 sts 假设角色时,它们不起作用。

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

在我的情况下,此错误是由于错误的 AWS 凭证而发生的。 在重试之前尝试验证。

打开我的 ~/.aws/credentials 文件,发现密钥与我的访问 ID 奇怪地互换了,切换它解决了问题

就我而言,我在尝试使用 SDK 使用AWS SES发送电子邮件时遇到此错误。 我必须重新启动应用程序(使用 docker-compose 的 Docker 中的 .NET 6)才能由应用程序重新加载凭据,因此加载后必须缓存它们。

在我的例子中,我对 .aws/credentials 文件、环境变量、命令行参数、项目配置等进行了三次检查,但仍然在某处找到了一些旧的凭证。

最后,它是我用来调用 API 的 Postman 中配置的旧身份验证令牌标头。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM