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

Kil*_*esk 38 amazon-web-services amazon-iam aws-cli

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 
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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

我在"用户"中有1个"用户".该用户已被分配以下权限:

IAMFullAccess IAMReadOnlyAccess IAMUserSSHKeys
Run Code Online (Sandbox Code Playgroud)

我已下载此用户的凭据并将其放入我的用户变量中

AWS_ACCESS_KEY ****
AWS_SECRET_KEY ****
Run Code Online (Sandbox Code Playgroud)

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

小智 23

尝试转到帐户页面上的安全凭据:点击右上角的名称 - >我的安全凭据

然后在那里生成访问密钥并在凭证文件中使用这些访问密钥(aws configure)

  • 单击右上角的用户名时,我没有看到“我的安全凭证”。我看到的只是“帐户”、“组织”、“服务配额”、“计费仪表板”、“切换角色”、“注销”。 (3认同)

ewa*_*lel 18

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

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

> aws configure
Run Code Online (Sandbox Code Playgroud)

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

> aws sts get-caller-identity
Run Code Online (Sandbox Code Playgroud)

应该返回新的设置凭据


Duc*_*tro 13

如果您也获得了会话令牌,那么您需要在以下之后手动设置它configure

aws configure set aws_session_token "<<your session token>>"
Run Code Online (Sandbox Code Playgroud)

  • @DuckMaestro 只是提到“&lt;&lt;your session token&gt;&gt;”没有任何意义,您必须按照 Nachokhan 的要求解释获取会话令牌的过程 (11认同)
  • 我如何获得该令牌? (7认同)

Pra*_*uis 12

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

  • “get-session-token”对我来说失败了,因为我仍然设置了环境变量“AWS_SESSION_TOKEN”和“AWS_SECURITY_TOKEN”。这些应该首先“取消设置”,否则 AWS 将尝试隐式使用它们并失败,因为它们无效。 (8认同)
  • 如果运行“get-session-token”导致相同的错误(InvalidClientTokenId),您会建议什么? (4认同)

Pat*_*ron 12

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

unset AWS_SESSION_TOKEN # unset the environment variable
Run Code Online (Sandbox Code Playgroud)


cod*_*ash 10

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


Fed*_*ico 9

与 Pat 的回复类似,请检查您的环境变量。特别是AWS_SESSION_TOKEN“与”AWS_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=...
Run Code Online (Sandbox Code Playgroud)


小智 8

我有同样的错误,即使在重新运行后aws configure,并输入一个新的AWS_ACESS_KEY_IDAWS_SECRET_ACCESS_KEY.

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

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


Kun*_*til 6

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

我希望这有帮助。

干杯,库纳尔


小智 5

  1. 在顶部导航中单击您的用户名,我的安全凭证
  2. 单击访问密钥选项卡,新建,复制密钥和秘密。
  3. 从终端运行$ aws configure并使用新的密钥和秘密。
  4. 再次运行命令:

    serverless invoke local --function create --path mocks/create-event.json
    
    Run Code Online (Sandbox Code Playgroud)


Eri*_*ric 5

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

工作代码示例(在 kotlin 中)

        val identityUserPoolProviderClient = AWSCognitoIdentityProviderClientBuilder
            .standard()
            .withCredentials(AWSStaticCredentialsProvider(BasicSessionCredentials("accessKeyId", ""secretAccessKey, "sessionToken")))
            .build()
Run Code Online (Sandbox Code Playgroud)


sup*_*ova 5

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

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

vi ~/.aws/credentials
Run Code Online (Sandbox Code Playgroud)

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

[default-long-term]
aws_access_key_id = ...
aws_secret_access_key = ...
aws_mfa_device = ...
Run Code Online (Sandbox Code Playgroud)