我们的记录中不存在AWS Access Key Id

kau*_*kdr 46 amazon-s3 amazon-web-services aws-cli

我创建了一个新的Access Key,并在AWS CLI中对其进行了配置aws configure.它创建了.ini文件~/.aws/config.当我运行aws s3 ls它时给出:

调用ListBuckets操作时发生客户端错误(InvalidAccessKeyId):您提供的AWS Access Key ID在我们的记录中不存在.

AmazonS3FullAccess策略也附加到用户.如何解决这个问题?

Man*_*shi 33

可能正在发生的是您通过env变量(bash_profile)导出旧密钥,并且因为env变量优先于凭证文件,所以它给出错误"访问密钥ID不存在".

从bash_profile中删除旧密钥,你会很高兴.

我早些时候发生过这样的事情,当我忘了我在bash_profile中有证书并且让我头疼了很长一段时间:)

  • 如何检查 bash_profile ?那里有钥匙吗?请帮忙 (4认同)

小智 25

看起来已经为环境变量AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY设置了一些值.

如果是这样,您可以在执行以下命令时看到一些值.

echo $AWS_SECRET_ACCESS_KEY
echo $AWS_ACCESS_KEY_ID
Run Code Online (Sandbox Code Playgroud)

如果使用aws configure,则需要重置这些变量

要重置,请执行以下命令.

unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
Run Code Online (Sandbox Code Playgroud)


小智 15

需要补充说明的 aws_session_token凭证,连同 aws_access_key_idaws_secret_access_key

  • 您可以提供 aws_session_token 的示例吗? (5认同)

小智 11

您可能已正确配置 AWS 凭证,但使用这些凭证,您可能会连接到某些特定的 S3 端点(就像我的情况一样)

而不是使用:

aws s3 ls
Run Code Online (Sandbox Code Playgroud)

尝试使用:

aws --endpoint-url=https://<your_s3_endpoint_url> s3 ls
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助那些面临类似问题的人。


mar*_*mor 9

对我来说,我依赖于IAM EC2 roles为我们的机器提供特定资源的访问权限。

我什至不知道 处有一个credentials文件~/.aws/credentials,直到我在 IAM 控制台上旋转/删除了一些 accessKeys 以加强我们的安全性,这突然使其中一个脚本停止在一台计算机上运行。

删除该credentials文件为我解决了这个问题。


小智 6

没有一个投票的答案对我有用。最后,我使用客户端 API 在 python 脚本中传递凭据。

import boto3
client = boto3.client(
's3',
aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY,
aws_session_token=SESSION_TOKEN)
Run Code Online (Sandbox Code Playgroud)

请注意 aws_session_token 参数是可选的。不推荐用于公共工作,但可以让简单的试用生活更轻松。

  • 如果您使用的是 EC2/Lambda/等。您将获得 [临时安全凭证](http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#UsingTemporarySecurityCredentials) 这意味着您需要使用 `AWS_SESSION_TOKEN` 环境变量并传递它到 boto3。我很确定它不是可选的,因为省略它会立即抛出 `InvalidAccessKeyId`。 (8认同)

Riv*_*omo 5

我犯了用引号设置变量的错误,如下所示:

AWS_ACCESS_KEY_ID="..."
Run Code Online (Sandbox Code Playgroud)


raf*_*_pe 5

我一直在寻找有关此问题的信息,并找到了这篇文章。我知道它已经过时了,但我想留下这篇文章,以防有人遇到问题。

好的,我已经安装了AWS CLI并打开:

AWS 命令​​行界面

看来您需要运行aws configure来添加当前凭据。更改后,我可以访问


Dus*_*jic 1

看起来~/.aws/credentials没有创建。尝试使用以下内容手动创建它:

[default]
aws_access_key_id = sdfesdwedwedwrdf
aws_secret_access_key = wedfwedwerf3erfweaefdaefafefqaewfqewfqw
Run Code Online (Sandbox Code Playgroud)

(在我的测试盒上,如果我aws在没有凭据文件的情况下运行命令,错误是Unable to locate credentials. You can configure credentials by running "aws configure".)您可以尝试从您尝试运行的同一个 shell 运行这两个命令吗aws

$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
$ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Run Code Online (Sandbox Code Playgroud)

然后尝试aws命令。

  • @DusanBajic accesskeyid“我们的记录中不存在”是我在测试过程中遇到的错误,当时我在尝试模拟各种失败时故意修改签名 URL 中的密钥值。这意味着确实使用了某个密钥,但 IAM 声称该密钥不存在。假设没有复制/粘贴错误,此响应对我来说表明,由于凭证是新创建的,那么 IAM 可能正在/正在经历短暂的复制延迟,该延迟将通过等待而不是自行解决配置文件丢失。 (4认同)
  • 所以一定是复制延迟。当我将 AWS_DEFAULT_REGION 更改为 us-east-1 时,它开始工作。 (4认同)