Python AWS Boto3无凭证错误IAM角色K8S
我在K8s集群中有一个python脚本,每隔几分钟作为K8s Cronjob运行一次。该脚本检查集群中的节点,如果节点不健康超过5分钟,则终止该节点。 要连接到AWS,我使用Boto3。 requirement.txtPython 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
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有关的戏剧;您是否有比此更新的版本,并且您是否已经遵循了他们的故障排除步骤?谢谢,我们将对此进行研究并提供更新。