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 来加密我的凭证。

你能检查你的 config 文件在 ~/.aws/config 下吗 - 你可能有一个名为 [myname] 的无效部分,类似于这样(这是一个例子)

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

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

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

使用如下

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

示例命令

aws --profile myname CMD opts

你真的设置了你的特定用户吗? AWS 中的演练设置指南解释了如何设置默认用户,以及如何设置其他用户。如果您没有完成完整设置,您将只有一个默认块,您的 myName 将不会被创建..

我认为 http://docs.aws.amazon.com/lambda/latest/dg/setup-awscli.html 中的 AWS 文档中缺少某些内容,它没有提到您应该编辑文件 ~/.aws/config 以添加您的用户名配置文件。有两种方法可以做到这一点:

  1. 编辑~/.aws/config

  2. aws configure --profile "your username"

遇到了类似的问题,发现下面 link 比此处提供的答案更有帮助。我想这是由于提供了答案后对 AWS CLI 进行了更新。

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

基本上它有助于创建两个不同的文件(即一个用于一般配置相关信息,第二个用于凭证相关信息)。

我 运行 在我搬到一台新机器时遇到了这个问题,带着我的 AWS_DEFAULT_PROFILE 环境变量,但不是我的 ~/.aws 目录。在取消设置该变量或正确配置命名配置文件之前,我无法使任何 awscli 命令起作用。但即使是 aws configure 命令也被破坏了,让事情变得有点棘手。假设你手边有一个类 Unix shell:

  • 要确定您的会话中可能有哪些特定于 AWS 的变量:env | grep AWS_
    • 如果您没有在此处看到 AWS_DEFAULT_PROFILEAWS_PROFILE,则此答案不适用于您。
  • 暂时删除默认配置文件:unset AWS_DEFAULT_PROFILE and/or unset AWS_PROFILE
  • 要配置有问题的配置文件:aws --profile foo configure
  • 重置默认配置文件变量:exec $SHELL
  • 测试您的新设置:aws iam get-user

对我来说,这是因为我的 .aws/config 文件看起来像这样:

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

我认为原因是我基于我的 .aws/credentials 文件,它需要 [profile myname] 用于 Zappa 和其他一些 aws/elastic beantalk 工具。

当我将 config 更改为此时,效果很好:

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

确保您处于正确的虚拟环境中。我更新了 PyCharm 并且出于某种原因不得不再次将我的项目指向我的 VE。打开终端,尝试更新 zappa 时我不在我的 VE 中(并收到此错误)。重启PyCharm,一切恢复正常

使用配置文件有点棘手。文档可在以下位置找到: https://docs.aws.amazon.com/cli/latest/topic/config-vars.html (但是你需要注意像AWS_PROFILE这样的环境变量)

通过 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

`

Env 变量 AWS_PROFILE 通知 AWS cli 要从 AWS 配置使用的配置文件。它不是配置文件的替代品,例如 AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY~/.aws/credentials.

另一个有趣的事实是,如果设置了 AWS_PROFILE 并且设置了 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 环境变量,那么 AWS_ACCESS_KEY_ID 和 [=15= 提供的凭据] 将覆盖 AWS_PROFILE.

提供的配置文件中的凭据

在我的例子中,我在具有旧值的环境变量上使用名为“AWS_PROFILE”的变量。

在我的例子中,我使用的是 AWS CLI 工具的 Docker 方法,但我没有仔细阅读说明来意识到我必须让我的凭据目录对 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)。

我必须这样做的原因是 运行ner 与所讨论的 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 Os 中,使用 sudo -s 或您在 gunicorn 中配置的相应用户以 root 用户身份登录 和 执行 aws configure

请注意,如果找不到正在启动服务的用户的 aws 配置文件,则可能会发生此问题。

对我来说,问题是服务正在启动 root 用户,因此它无法找到 AWS 配置文件。我通过使服务从非 root 用户启动来修复它,因为可以找到 AWS 配置。