Python AWS Boto3无凭证错误IAM角色K8S

Python AWS Boto3无凭证错误IAM角色K8S,python,amazon-web-services,kubernetes,boto3,amazon-iam,Python,Amazon Web Services,Kubernetes,Boto3,Amazon Iam,我在K8s集群中有一个python脚本,每隔几分钟作为K8s Cronjob运行一次。该脚本检查集群中的节点,如果节点不健康超过5分钟,则终止该节点。 要连接到AWS,我使用Boto3。 requirement.txt boto3==1.16.11 botocore==1.19.11 权限作为pod注释传递 Annotations: iam.amazonaws.com/role: arn:aws:iam::123456789:role/k8s-nodes-monitoring-role I

我在K8s集群中有一个python脚本,每隔几分钟作为K8s Cronjob运行一次。该脚本检查集群中的节点,如果节点不健康超过5分钟,则终止该节点。 要连接到AWS,我使用Boto3。 requirement.txt

boto3==1.16.11
botocore==1.19.11
权限作为pod注释传递

Annotations:  iam.amazonaws.com/role: arn:aws:iam::123456789:role/k8s-nodes-monitoring-role
IAM角色具有
arn:aws:IAM::aws:policy/AmazonEC2FullAccess
策略和有效的信任策略

{
   "Version": "2012-10-17",
   "Statement": [
{
  "Effect": "Allow",
  "Principal": {
    "Service": "ec2.amazonaws.com"
  },
  "Action": "sts:AssumeRole"
},
{
  "Sid": "",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::123456789:role/nodes.my-domain.com"
  },
  "Action": "sts:AssumeRole"
}
]
}
我面临的问题是,在某些情况下,脚本抛出
NoCredentialsError('无法定位凭据')
错误。这种行为并不一致,因为在大多数情况下,脚本已成功终止不健康节点,我可以对照AWS CloudTrail事件对其进行交叉检查。 我可以在kub2iam日志中看到Get请求接收200,而Put请求接收403

ime="2020-12-21T12:50:16Z" level=info msg="GET /latest/meta-data/iam/security- 
credentials/k8s-nodes-monitoring-role (200) took 47918.000000 ns" req.method=GET 
req.path=/latest/meta-data/iam/security-credentials/k8s-nodes-monitoring-role 
req.remote=100.116.203.13 res.duration=47918 res.status=200
time="2020-12-21T12:52:16Z" level=info msg="PUT /latest/api/token (403) took 19352999.000000 
ns" req.method=PUT req.path=/latest/api/token req.remote=100.116.203.14 
res.duration=1.9352999e+07 res.status=40

如果您有任何关于如何调试的帮助或想法,我们将不胜感激。

我不知道kube2iam的详细信息,但也许您应该改用AWS的原生方式,称为IRSA(服务帐户的IAM角色)。你可以在这篇博文中找到所有必要的信息:

有一些与IMDSv2有关的戏剧;您是否有比此更新的版本,并且您是否已经遵循了他们的故障排除步骤?谢谢,我们将对此进行研究并提供更新。