【问题标题】:Boto3 NoCredentialsError when trying to pull from DynamoDb on EKS with Fargate尝试使用 Fargate 从 EKS 上的 DynamoDb 提取时出现 Boto3 NoCredentialsError
【发布时间】:2025-11-23 07:40:01
【问题描述】:

我有一个带有用于计算的 Fargate 配置文件的 EKS 集群。我已在 Fargate 配置文件上使用 2 个托管策略配置了 Pod 执行角色

  1. AmazonEKSFargatePodExecutionRolePolicy
  2. AmazonDynamoDBFullAccess

代码作为 CronJob 运行,首先从 DynamoDb 中提取配置:

dynamodb = boto3.resource('dynamodb', region_name=region)

table = dynamodb.Table(table_name)

response = table.get_item(
Key = {
  'Id': config_id
})

当代码到达这一点时,它总是会出现异常:

引发 NoCredentialsError()
botocore.exceptions.NoCredentialsError:无法找到凭据

我知道我可以在初始化 boto3 客户端时直接传递 AWS 凭证,但出于安全原因我不想这样做。

我最初使用自动扩展组中的 EC2 实例而不是 Fargate 来测试代码以进行计算。

如何解决此错误?

【问题讨论】:

    标签: python amazon-web-services kubernetes amazon-eks aws-fargate


    【解决方案1】:

    按照本指南中的所有 3 个步骤解决了该问题。

    https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html

    问题在于在我的 pod 中执行代码的服务帐户。

    您需要将角色附加到服务帐户本身。在我的实现中,我创建了一个新的服务帐户,理论上我可以有一个单独的服务帐户,每个 pod 具有不同的权限。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: your-custom-service-account
      namespace: default
      annotations:
        eks.amazonaws.com/role-arn: arn:aws:iam::12345678910:role/CustomServiceAccountRole
        eks.amazonaws.com/sts-regional-endpoints: 'true'
    

    然后确保该帐户是与 pod 关联的服务帐户。

    spec:
      serviceAccountName: your-custom-service-account
    

    如果您没有为您的 pod 指定服务帐户,则它默认为集群中存在的“默认”服务帐户。

    【讨论】:

      最近更新 更多