【问题标题】:botocore.exceptions.InvalidConfigError: The source profile "default" must have credentialsbotocore.exceptions.InvalidConfigError:源配置文件“默认”必须具有凭据
【发布时间】:2020-09-13 01:04:24
【问题描述】:

下面的代码在s3 = boto3.client('s3')行中失败,返回错误botocore.exceptions.InvalidConfigError: The source profile "default" must have credentials.

def connect_s3_boto3():
    try:
        os.environ["AWS_PROFILE"] = "a"
        s3 = boto3.client('s3')
        return s3
    except:
        raise

我已经使用aws configure 设置了密钥和秘密

我的文件vim ~/.aws/credentials 看起来像:

[default]
aws_access_key_id = XXXXXXXXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

我的文件vim ~/.aws/config 看起来像:

[default]
region = eu-west-1
output = json

[profile b]
region=eu-west-1
role_arn=arn:aws:iam::XX
source_profile=default

[profile a]
region=eu-west-1
role_arn=arn:aws:iam::YY
source_profile=default

[profile d]
region=eu-west-1
role_arn=arn:aws:iam::EE
source_profile=default

如果我运行aws-vault exec --no-session --debug a 它返回:

aws-vault: error: exec: Failed to get credentials for a9e: InvalidClientTokenId: The security token included in the request is invalid. status code: 403, request id: 7087ea72-32c5-4b0a-a20e-fd2da9c3c747

【问题讨论】:

  • 删除以下行会发生什么情况:os.environ["AWS_PROFILE"] = "a"?
  • AWS CLI 是否在同一系统中工作?
  • ~/.aws/credentials 中不应该也有匹配的[a] 吗?
  • @JamesShapiro 它返回 botocore.exceptions.NoCredentialsError: Unable to locate credentials
  • 让我们从简单的开始。您可以将 AWS CLI 与 [default] 配置文件一起使用吗?例如:aws s3 lsAWS_PROFILE 环境变量中没有任何内容)。

标签: python python-3.x amazon-web-services docker boto3


【解决方案1】:

使用 docker 卷将您的凭证文件传递到容器中: https://docs.docker.com/storage/volumes/

将凭据添加到容器映像中不是一个好主意,因为使用此映像的任何人都将拥有并使用您的凭据。 这被认为是一种不好的做法。

有关如何正确处理机密的更多信息,请参阅https://docs.docker.com/engine/swarm/secrets/

【讨论】:

    【解决方案2】:

    最后的问题是 Docker 没有凭据。尽管通过 bash 连接并添加它们,但它不起作用。

    所以,我在dockerfile 中添加了:

    ADD myfolder/aws/credentials /root/.aws/credentials
    

    使用aws configure 将我通过aws cli 添加的本地主机凭据文件移动到泊坞窗。然后,我再次构建 docker,它可以工作了。

    【讨论】:

      【解决方案3】:

      我注意到您用“docker”标记了这个问题。您是否有可能从没有 AWS 凭证的 Docker 容器中运行代码?

      【讨论】:

      • 是的,我从 docker 容器中运行它,但我使用 docker exec -it name bash 所以我运行的每条语句都在 docker 中
      • 是的,但您的凭据似乎无法从您的容器中访问。从 Docker 容器内部运行“aws s3 ls”会发生什么?
      • 它说凭据不存在,但如果我运行 aws configure 那么它可以工作。如果在那之后我重试它,它仍然失败......
      • 据我所知,它应该自动在本地工作:stackoverflow.com/questions/22409367/…
      • 听起来当你“重试”它时,你正在清除你的凭据,所以每次重试它都会失败。您链接到的问题在这里似乎不相关。
      猜你喜欢
      • 1970-01-01
      • 2019-10-04
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      相关资源
      最近更新 更多