簡體   English   中英

AWS:找不到配置文件 (MyName)

[英]AWS : The config profile (MyName) could not be found

每次我想用 AWS 配置某些東西時,我都會收到以下錯誤:

"The config profile (myname) could not be found"

比如:aws 配置

我正在使用 Python 3.4,我想使用 AWS CLI Keyring 來加密我的憑證。

我認為http://docs.aws.amazon.com/lambda/latest/dg/setup-awscli.html 中的 AWS 文檔中缺少一些內容,它沒有提到您應該編輯文件~/.aws/config以添加您的用戶名配置文件。 兩種方法可以做到這一點:

  1. 編輯~/.aws/config

  2. aws configure --profile "your username"

當我搬到一台新機器上時遇到了這個問題,我帶着我的 AWS_DEFAULT_PROFILE 環境變量,但不是我的 ~/.aws 目錄。 在我取消設置該變量或正確配置命名配置文件之前,我無法使用任何 awscli 命令。 但即使是aws configure命令也被破壞了,讓事情變得有點棘手。 假設您有一個方便的類 Unix 外殼:

  • 要確定您的會話中可能有哪些特定於 AWS 的變量: env | grep AWS_ env | grep AWS_
    • 如果您沒有看到此處列出的 AWS_DEFAULT_PROFILE,則此答案不適用於您。
  • 臨時刪除默認配置文件: unset AWS_DEFAULT_PROFILE
  • 要配置該默認配置文件: aws --profile foo configure
  • 重置默認配置文件變量: exec $SHELL
  • 測試您的新設置: aws iam get-user

你能在~/.aws/config下檢查你的config文件 - 你可能有一個名為 [myname] 的無效部分,像這樣(這是一個例子)

[default]
region=us-west-2
output=json

[myname]
region=us-east-1
output=text

只需刪除 [myname] 部分(包括此配置文件的所有內容),您就可以再次運行aws cli

使用配置文件有點棘手。 文檔可以在以下位置找到: https ://docs.aws.amazon.com/cli/latest/topic/config-vars.html(但您需要注意像 AWS_PROFILE 這樣的 env 變量)

將配置文件與 aws cli 一起使用需要一個配置文件(默認在~/.aws/config或使用AWS_CONFIG_FILE設置)。 供參考的示例配置文件:`

[profile PROFILE_NAME]
 output=json
 region=us-west-1
 aws_access_key_id=foo
 aws_secret_access_key=bar

`

環境變量AWS_PROFILE通知 AWS cli 有關要從 AWS config 使用的配置文件的信息。 它不是配置文件的替代品,如AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY用於~/.aws/credentials

另一個有趣的事實是,如果AWS_PROFILE設置和AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY環境變量設置,然后通過提供的憑據AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY將覆蓋位於所提供的配置文件的憑據AWS_PROFILE

使用如下

[profilename]
region=us-east-1
output=text

示例命令

aws --profile myname CMD opts

就我而言,我在具有舊值的環境變量上使用了名為“AWS_PROFILE”的變量。

在此處輸入圖片說明

你真的設置了你的特定用戶嗎? AWS 中的演練設置指南解釋了如何設置默認用戶,以及如何設置其他用戶。 如果您沒有完成完整的設置,您將只有一個默認塊,而您的 myName 將不會被創建。

面臨類似的問題,發現下面的鏈接比此處提供的答案更有幫助。 我猜這是由於提供了答案后對 AWS CLI 進行了更新。

https://serverfault.com/questions/792937/the-config-profile-adminuser-could-not-be-found

從本質上講,它有助於創建兩個不同的文件(即一個用於一般配置相關信息,第二個用於憑據相關信息)。

確保您在正確的 VirtualEnvironment 中。 我更新了 PyCharm,出於某種原因不得不再次將我的項目指向我的 VE。 打開終端,嘗試 zappa 更新時我不在我的 VE 中(並出現此錯誤)。 重啟PyCharm,一切恢復正常。

就我而言,我將 Docker 方法用於 AWS CLI 工具,但我對說明的閱讀不夠深入,無法意識到我必須使我的憑證目錄對 docker 容器可見。 https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-docker.html

代替

docker run --rm -it amazon/aws-cli:latest command args...

我需要做:

docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli:latest command args...

以防萬一有人試圖在無頭服務器上執行此操作(在我的情況下為 CI 運行程序,將 EKS 集群配置添加到 kubeconfig)。

我必須這樣做的原因是,運行程序位於與相關 EKS 集群不同的 AWS 賬戶中(並且 aws eks 命令看起來在同一個賬戶中)。

我確實有一種方法可以對正確的 AWS 帳戶進行身份驗證,該帳戶會使用有效憑據填充 ~/.aws/credentials。

首先我進行身份驗證以填充 ~/.aws/credentials 然后

cp ~/.aws/credentials ~/.aws/config
sed -i 's/profilename/profile profilename/g' ~/.aws/config

然后當我運行時它會起作用

aws eks update-kubeconfig --name cluster-name --profile profilename --region us-east-1

在 Nginx 和 Gunicorn 中部署 Flask 應用程序時,我遇到了同樣的問題。

這可能對與我面臨同樣問題的人有所幫助

我的案例:使用 AWS 憑證生成 rds AUTH 令牌

在開發模式下它工作正常並且能夠從.aws文件夾中獲取 AWS Config

當我嘗試通過Nginx-Gunicorn運行它時,它失敗了,即使我為相應的文件夾和服務授予了所有 root 權限。

我已將 AccessKey 和 SecretKey 存儲在環境變量中並使用這些憑據創建身份驗證令牌

import boto3,os
S3_KEY=os.environ['aws_access_key']
S3_SECRET=os.environ['aws_secret_access_key']
def generate_iam_rds_token(server,region,port,user,S3_KEY,S3_SECRET):
   s3_conn = boto3.client('rds', region_name=region,
                       aws_access_key_id=S3_KEY,
                       aws_secret_access_key=S3_SECRET)
   pwd = s3_conn.generate_db_auth_token(server, port, user, Region=region)
   return pwd
#call the method to get a token
server='https://example.com'
region='ap-west-3'
port='port_number'
user='db_user_name'
pwd_token=generate_iam_rds_token(server,region,port,user,S3_KEY,S3_SECRET)

SQLALCHEMY_DATABASE_URI = 'postgresql+psycopg2://{user}:{pwd}@{host}:{port}/{db}'.format(user=user,host=host,port=port,db=db,pwd=pwd)

注意:在 Ubuntu 操作系統中,使用sudo -s或您在 gunicorn 中配置的相應用戶並執行aws configure以 root 用戶身份登錄

請注意,如果未找到啟動服務的用戶的 aws 配置文件,則可能會發生此問題。

對我來說,問題是該服務正在啟動 root 用戶,因此無法找到 AWS 配置文件。 我通過從非 root 用戶啟動服務來修復它,所以可以找到 AWS 配置。

如果您使用 Windows 並通過 Windows Note 應用程序編寫配置/憑據,該應用程序會生成一個擴展名為“.txt”的文件。 因此,您可以刪除文件擴展名。 就我而言,它奏效了。

對我來說,這是因為我的.aws/config文件看起來像這樣:

[profile myname]
aws_access_key_id = ....
aws_secret_access_key = ....
region=us-west-1

我認為原因是我基於我的.aws/credentials文件,這需要 Zappa 的[profile myname]以及其他一些 aws/elastic beanstalk 工具。

當我將config更改為此時,效果很好:

[myname]
aws_access_key_id = ....
aws_secret_access_key = ....
region=us-west-1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM