当前位置: 首页 > 知识库问答 >
问题:

可以将AWS CLI与凭据文件一起使用,但不能与环境变量一起使用

堵睿范
2023-03-14

我通常在设置配置文件后使用AWS CLI命令,使用环境变量AWS\u profile,使用~/。aws/凭证文件。这很有效。

我目前正在尝试通过环境变量设置访问权限。为此,我在中设置这些变量。bash_profile文件-我从凭证文件中复制了aws_access_key_idaws_secret_access_key条目,并将它们放在我的bash_profile文件中,名称为aws_access_key_idaws_secret_access_key

环境变量正在被正确设置,然而,当我试图访问AWS资源时(在这种情况下,我试图在桶上运行一个lsS3命令,所以区域并不重要),我得到了消息

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指南,并运行命令aws配置列表,在第一种情况下(仅有环境变量的情况),返回

      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_会话_令牌,我也尝试将其设置为环境变量,但没有成功。

我需要以这种方式访问AWS资源来模拟我的代码将在其中运行的环境,我不明白为什么这不会按照我想要的方式工作。

如果您有任何关于如何解决此问题的想法,我们将不胜感激。

共有2个答案

微生俊捷
2023-03-14

如果有人偶然发现了这一点,一个可能的罪魁祸首可能是AWS_SESSION_TOKENAWS_SECURITY_TOKEN环境变量。

如果您之前使用了不同的AWS\u ACCESS\u KEY\u IDAWS\u SECRET\u ACCESS\u KEY环境变量,并且直接或间接运行了AWS CLI命令,则在首次身份验证后,将设置上述两个令牌变量。在我们用新值覆盖现有的AWS\u ACCESS\u KEY\u IDAWS\u SECRET\u ACCESS\u KEY之后,较旧的令牌变量仍然保持原样,AWS CLI没有明确检查访问/密钥是否已更新,它继续使用较旧的令牌,导致在内部使用较旧的密钥,并将继续这样做,直到令牌过期。aws configure将继续显示新的访问密钥,但在内部,由于缓存的令牌,它将使用旧的访问密钥。

因此,如果您想在这些场景中继续使用环境变量,您需要取消两个包含令牌的环境变量,在您的情况下,还需要在设置新的访问/秘密后为两个令牌变量添加一个取消命令环境变量中的键。

unset AWS_SESSION_TOKEN
unset AWS_SECURITY_TOKEN

这种行为是人们更喜欢使用不同配置文件的原因之一,要么使用aws配置,要么编辑~/. aws/*文件,并在命令中使用--file显式指定它们,而不是使用环境变量。

按照AWS cli配置优先顺序,使用~/。aws/config文件位于aws CLI获取要使用的身份验证的优先顺序的顶部,因此它会覆盖令牌环境变量并在您的情况下工作。

司空镜
2023-03-14

你需要编辑你的~/。当您希望引用环境变量中的凭据而不是凭据文件时,请使用aws/config文件。

对于凭证文件中的AWS访问密钥,您必须将配置文件设置为,否则任何配置文件都没有此类source\u配置文件config:

[default]
source_profile = default

但是,如果要使用环境变量或bash_配置文件中设置的凭据,请将此设置更改/添加到配置文件中的每个配置文件:

[default]
credential_source = Environment

有了这个更改,它也应该与您的环境变量一起工作。

如果您在~/中有多个配置文件。aws/config文件,只需替换/添加文件=

 类似资料:
  • 我有一个简单的测试。bat文件,如下所示 当我运行这个批处理文件时,它列出了我的生产帐户中的实例。当我在C:\Users\testuser检查我的用户配置文件位置时。aws,凭据文件具有我的生产帐户的访问密钥和密钥。 我的问题是每个aws留档(http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)

  • 问题内容: 我已经使用Selenium和最初的PhantomJS开发了一些Python脚本。在走向自动下载时,我改用了(带头的)Firefox(运行了),然后选择了无头选项的Chrome,这样我就不会打开浏览器了。 我的第一个脚本访问一个页面和几个HTML元素,与无头Chrome完美搭配。 但是第二个 仅适用于带头的Chrome 。如果添加“无头”选项,它将不再起作用。当我尝试以无头模式打印HTM

  • 问题内容: 我已经在端口8080(默认)下启动并测试了Tomcat。现在,我将连接器端口更改为80,并重新启动了Tomcat,在最小的Debian 6.0安装中没有任何显示。现在,这里的窍门在哪里? 问题答案: 转到/ etc / default / tomcat6并更改为

  • 问题内容: 我对正则表达式很糟糕,但是我想知道是否可以将ng-pattern与变量一起使用 例如, 其中validationCode是控制器中附加到$ scope的变量 如果 则ng-pattern将是 但这不起作用,似乎我需要创建一个我真的不想要的自定义指令 问题答案: 需要一个正则表达式。 从Angular的文档中有关: 如果该值与模式表达式不匹配,则设置模式验证错误键。期望值用于内联模式或定

  • 我给你的是不可变的。试试看。我需要的是能够指定一个类,所以我定义了 由immutables生成的生成器不接受此选项 因为它需要一门课 用@Value注释类型。参数很好地创建了一个有效的方法 但结果是一个实例,而不是一个生成器,因此只能使用withers设置后续值。

  • 我有一个烧瓶服务器运行在http://127.0.0.1:5000和一个vuejs前端运行http://localhost:8080我已经做了api,并用postman测试了它,一切都如预期的那样工作:( > 将请求发布到/登录- (将请求发送至/登录)- 烧瓶API代码: 登录。vue: 指数vue 当我使用邮递员登录时,我得到的响应为;当我使用邮递员获取url/索引时,我得到响应。数据但当我使