服务帐户的 eks iam 角色不起作用
eks iam roles for services account not working
我正在尝试使用服务帐户的 iam 角色来保护自动调用程序。但我似乎错过了什么。精度不高我正在使用 terraform 来创建集群。
我遵循了这些文档:
- https://aws.amazon.com/blogs/opensource/introducing-fine-grained-iam-roles-service-accounts/
- https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html
所以我创建了一个角色而不是节点角色,并将自动调节程序的策略应用于这个新角色。这部分是基本的,没有问题。
我还在 terraform 中激活了 openid 提供程序:
resource "aws_iam_openid_connect_provider" "example" {
client_id_list = ["sts.amazonaws.com"]
thumbprint_list = []
url = aws_eks_cluster.eks.identity.0.oidc.0.issuer
}
没问题集群正在毫无问题地自行创建。
不,我为自动缩放添加了注释到服务帐户:
---
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::ID:role/terraform-eks-autoscaller
labels:
k8s-addon: cluster-autoscaler.addons.k8s.io
k8s-app: cluster-autoscaler
name: cluster-autoscaler
namespace: kube-system
我的问题是它似乎不起作用并且 pod 仍在尝试使用新的 IAM 角色但仍在使用节点角色:
Failed to create AWS Manager: cannot autodiscover ASGs: AccessDenied: User: arn:aws:sts::ID:assumed-role/terraform-eks-node/i-ID is not authorized to perform: autoscaling:DescribeTags
有人知道我在这里漏掉了什么步骤吗?
在此先感谢您的帮助 ;)
所以答案很简单。您的 OIDC 提供商配置缺少指纹。 Iam 的正确工作至关重要。
通常,如果您在 AWS 控制台中创建 OIDC 提供程序,指纹会自动填充,但是当您通过 terraform 执行此操作时情况并非如此。
我也被这个问题困扰了,所以我写了一篇关于这个的博客,你可以在这里找到:https://medium.com/@marcincuber/amazon-eks-with-oidc-provider-iam-roles-for-kubernetes-services-accounts-59015d15cb0c
要解决您的问题,只需添加以下内容:
9E99A48A9960B14926BB7F3B02E22DA2B0AB7280
以上是哈希根 CA,10 年以上都不会改变,所有地区都一样。如何获取,可以看我上面加link的博客
此外,请确保使用与您的 kubernetes 版本匹配的最新自动缩放器版本。此外,尝试使用 fsGroup 添加安全上下文:65534。这是使 OIDC 对某些应用程序正常工作的当前解决方法。
我也使用 terraform 创建集群,我检查过我有指纹,
但我犯了这个错误:
Failed to regenerate ASG cache: cannot autodiscover ASGs: WebIdentityErr: failed to retrieve credentials
caused by: ValidationError: Request ARN is invalid
我通过手动重新输入指纹(大写)来解决它,它有效,我发现 terraform 模块默认值是小写,不确定是不是问题所在
我正在尝试使用服务帐户的 iam 角色来保护自动调用程序。但我似乎错过了什么。精度不高我正在使用 terraform 来创建集群。
我遵循了这些文档:
- https://aws.amazon.com/blogs/opensource/introducing-fine-grained-iam-roles-service-accounts/
- https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html
所以我创建了一个角色而不是节点角色,并将自动调节程序的策略应用于这个新角色。这部分是基本的,没有问题。
我还在 terraform 中激活了 openid 提供程序:
resource "aws_iam_openid_connect_provider" "example" {
client_id_list = ["sts.amazonaws.com"]
thumbprint_list = []
url = aws_eks_cluster.eks.identity.0.oidc.0.issuer
}
没问题集群正在毫无问题地自行创建。
不,我为自动缩放添加了注释到服务帐户:
---
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::ID:role/terraform-eks-autoscaller
labels:
k8s-addon: cluster-autoscaler.addons.k8s.io
k8s-app: cluster-autoscaler
name: cluster-autoscaler
namespace: kube-system
我的问题是它似乎不起作用并且 pod 仍在尝试使用新的 IAM 角色但仍在使用节点角色:
Failed to create AWS Manager: cannot autodiscover ASGs: AccessDenied: User: arn:aws:sts::ID:assumed-role/terraform-eks-node/i-ID is not authorized to perform: autoscaling:DescribeTags
有人知道我在这里漏掉了什么步骤吗?
在此先感谢您的帮助 ;)
所以答案很简单。您的 OIDC 提供商配置缺少指纹。 Iam 的正确工作至关重要。 通常,如果您在 AWS 控制台中创建 OIDC 提供程序,指纹会自动填充,但是当您通过 terraform 执行此操作时情况并非如此。
我也被这个问题困扰了,所以我写了一篇关于这个的博客,你可以在这里找到:https://medium.com/@marcincuber/amazon-eks-with-oidc-provider-iam-roles-for-kubernetes-services-accounts-59015d15cb0c
要解决您的问题,只需添加以下内容:
9E99A48A9960B14926BB7F3B02E22DA2B0AB7280
以上是哈希根 CA,10 年以上都不会改变,所有地区都一样。如何获取,可以看我上面加link的博客
此外,请确保使用与您的 kubernetes 版本匹配的最新自动缩放器版本。此外,尝试使用 fsGroup 添加安全上下文:65534。这是使 OIDC 对某些应用程序正常工作的当前解决方法。
我也使用 terraform 创建集群,我检查过我有指纹,
但我犯了这个错误:
Failed to regenerate ASG cache: cannot autodiscover ASGs: WebIdentityErr: failed to retrieve credentials
caused by: ValidationError: Request ARN is invalid
我通过手动重新输入指纹(大写)来解决它,它有效,我发现 terraform 模块默认值是小写,不确定是不是问题所在