【发布时间】:2021-01-15 14:49:25
【问题描述】:
我通常在使用环境变量 AWS_PROFILE 和 ~/.aws/credentials 文件设置配置文件后使用我的 AWS CLI 命令。这行得通。
我目前正在尝试做的是通过环境变量设置访问权限。为此,我将这些变量设置在我的 .bash_profile 文件中 - 我从凭证文件中复制了 aws_access_key_id 和 aws_secret_access_key 条目并将它们放入我的 bash_profile 文件中,名称为 AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY。
环境变量设置正确,但是,当我尝试访问 AWS 资源时(在这种情况下,我尝试在存储桶上运行 ls S3 命令,因此区域无关紧要),我收到消息
An error occurred (InvalidAccessKeyId) when calling the ListObjectsV2 operation: The AWS Access Key Id you provided does not exist in our records
这对我来说很奇怪,因为键完全一样。为了确认这一点,我使用AWS_PROFILE 环境变量切换到我的凭据配置文件,然后该命令正常工作。
我怀疑,不知何故,我设置了错误的环境变量,或者类似的东西。然后,我阅读了这个AWS guide,并运行了命令aws configure list,在第一种情况下(仅使用环境变量的情况)返回了
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************AAAA env
secret_key ****************AAAA env
region us-east-1 env ['AWS_REGION', 'AWS_DEFAULT_REGION']
对于第二种情况(使用配置文件集),它返回
Name Value Type Location
---- ----- ---- --------
profile dev-staging manual --profile
access_key ****************AAAA shared-credentials-file
secret_key ****************AAAA shared-credentials-file
region us-east-1 env ['AWS_REGION', 'AWS_DEFAULT_REGION']
换句话说,环境变量设置正确,AWS CLI 承认它们,它们的值与通过凭证文件设置时的值相同,但是,由于某种原因,它不起作用方式。
我认为这可能是由于我也尝试将其设置为环境变量的 aws_session_token 造成的,但无济于事。
我需要以这种方式访问 AWS 资源来模拟我的代码将在其中运行的环境,但我不明白为什么这不能按我的预期方式工作。
感谢任何关于如何解决它的想法。
【问题讨论】:
-
"把它们放在我的 bash_profile" - 你是怎么把它们放的?你是从那里导出的吗?
-
是的,我导出了它们。它们已正确设置,我可以从新的终端会话中访问它们。他们甚至出现在
aws configure list上进行新会话,所以这部分正在工作...... -
你为什么说
aws_session_token?这仅适用于临时凭证。我猜,如果您使用 IAM 用户凭据,为什么会有它? -
嗯,到那时,所有合乎逻辑的解释都已经用尽了,我只是在尝试一些我认为可以解释正在发生的事情的随机事情。无论如何,这无关紧要,有没有。事实上,我仍然不明白为什么如果凭证相同,我无法访问 AWS 资源,只是它们的来源不同。
-
根据您的描述,您的设置是正确的,理论上应该可以工作。您能否在控制台中运行
env | grep AWS并验证凭据是否正确导出、没有丢失单个字符或没有被其他导出覆盖?
标签: amazon-web-services amazon-s3 aws-cli