Amazon web services AWS ALB入口控制器出现IRSA授权错误
我正在尝试使用该方法而不是kube2iam设置AWS ALB入口控制器。然而,由于缺少一些文档,所以我走到了死胡同 到目前为止我所做的:Amazon web services AWS ALB入口控制器出现IRSA授权错误,amazon-web-services,kubernetes,kubernetes-ingress,amazon-eks,Amazon Web Services,Kubernetes,Kubernetes Ingress,Amazon Eks,我正在尝试使用该方法而不是kube2iam设置AWS ALB入口控制器。然而,由于缺少一些文档,所以我走到了死胡同 到目前为止我所做的: 为我的群集配置了OIDC提供程序 eksctl utils关联iam oidc提供程序--群集devops--批准 通过使用创建适当的策略 创建了将由入口控制器使用并与策略关联的IAM服务帐户 eksctl创建iamserviceaccount——名称alb ingress——命名空间默认值——集群devops——附加策略arn arn:aws:iam
- 为我的群集配置了OIDC提供程序
eksctl utils关联iam oidc提供程序--群集devops--批准
- 通过使用创建适当的策略
- 创建了将由入口控制器使用并与策略关联的IAM服务帐户
eksctl创建iamserviceaccount——名称alb ingress——命名空间默认值——集群devops——附加策略arn arn:aws:iam::112233445566:policy/eks-ingressController-iam-policy-ingressController-1111111——批准
- 提供了部署所需的rbac规则
kubectl apply-f rbac role.yaml
- 使用部署AWS入口控制器。已引起注意,因此
与我先前创建的服务帐户匹配服务帐户
我希望入口控制器pod需要适当的权限(通过使用服务帐户)来创建ALB,而不是节点。我在这里遗漏了什么吗?所以,万一有人遇到同样的问题 解决方案是,在创建rbac角色时,从rbac-role.yaml(如提供的)注释掉创建服务帐户的最后一部分
由于我们已经使用eksctl创建了一个服务帐户,并将aws策略附加到该帐户,因此我们还可以将rbac权限附加到该服务帐户。然后,该服务帐户可以在入口控制器pod中正常使用,以发挥其神奇作用。根据文档,需要CRUD ALB的许可。如果您想尝试只给ALB驱动程序Pod一个具有权限的角色,您可以创建ALB,但我还没有测试它,并且我不确定这是否重要,如果您的整个计划程序已被授予使用ALB驱动程序/Pod在AWS上创建这些对象的权限 我并没有使用EKS的3.0集群创建工具,相反,我有自己的CFT,因为我的组织有额外的安全要求,我用它来创建工人 我已经为需要创建ALB的员工创建并附加了bellow管理策略,并且它可以正常工作
ALBPolicy:
Type: "AWS::IAM::ManagedPolicy"
Properties:
Description: Allows workers to CRUD alb's
PolicyDocument:
Version: "2012-10-17"
Statement:
-
Effect: "Allow"
Action:
- "acm:DescribeCertificate"
- "acm:ListCertificates"
- "acm:GetCertificate"
Resource: "*"
-
Effect: "Allow"
Action:
- "ec2:AuthorizeSecurityGroupIngress"
- "ec2:CreateSecurityGroup"
- "ec2:CreateTags"
- "ec2:DeleteTags"
- "ec2:DeleteSecurityGroup"
- "ec2:DescribeAccountAttributes"
- "ec2:DescribeAddresses"
- "ec2:DescribeInstances"
- "ec2:DescribeInstanceStatus"
- "ec2:DescribeInternetGateways"
- "ec2:DescribeNetworkInterfaces"
- "ec2:DescribeSecurityGroups"
- "ec2:DescribeSubnets"
- "ec2:DescribeTags"
- "ec2:DescribeVpcs"
- "ec2:ModifyInstanceAttribute"
- "ec2:ModifyNetworkInterfaceAttribute"
- "ec2:RevokeSecurityGroupIngress"
Resource: "*"
-
Effect: "Allow"
Action:
- "elasticloadbalancing:AddListenerCertificates"
- "elasticloadbalancing:AddTags"
- "elasticloadbalancing:CreateListener"
- "elasticloadbalancing:CreateLoadBalancer"
- "elasticloadbalancing:CreateRule"
- "elasticloadbalancing:CreateTargetGroup"
- "elasticloadbalancing:DeleteListener"
- "elasticloadbalancing:DeleteLoadBalancer"
- "elasticloadbalancing:DeleteRule"
- "elasticloadbalancing:DeleteTargetGroup"
- "elasticloadbalancing:DeregisterTargets"
- "elasticloadbalancing:DescribeListenerCertificates"
- "elasticloadbalancing:DescribeListeners"
- "elasticloadbalancing:DescribeLoadBalancers"
- "elasticloadbalancing:DescribeLoadBalancerAttributes"
- "elasticloadbalancing:DescribeRules"
- "elasticloadbalancing:DescribeSSLPolicies"
- "elasticloadbalancing:DescribeTags"
- "elasticloadbalancing:DescribeTargetGroups"
- "elasticloadbalancing:DescribeTargetGroupAttributes"
- "elasticloadbalancing:DescribeTargetHealth"
- "elasticloadbalancing:ModifyListener"
- "elasticloadbalancing:ModifyLoadBalancerAttributes"
- "elasticloadbalancing:ModifyRule"
- "elasticloadbalancing:ModifyTargetGroup"
- "elasticloadbalancing:ModifyTargetGroupAttributes"
- "elasticloadbalancing:RegisterTargets"
- "elasticloadbalancing:RemoveListenerCertificates"
- "elasticloadbalancing:RemoveTags"
- "elasticloadbalancing:SetIpAddressType"
- "elasticloadbalancing:SetSecurityGroups"
- "elasticloadbalancing:SetSubnets"
- "elasticloadbalancing:SetWebACL"
Resource: "*"
-
Effect: "Allow"
Action:
- "iam:CreateServiceLinkedRole"
- "iam:GetServerCertificate"
- "iam:ListServerCertificates"
Resource: "*"
-
Effect: "Allow"
Action:
- "cognito-idp:DescribeUserPoolClient"
Resource: "*"
-
Effect: "Allow"
Action:
- "waf-regional:GetWebACLForResource"
- "waf-regional:GetWebACL"
- "waf-regional:AssociateWebACL"
- "waf-regional:DisassociateWebACL"
Resource: "*"
-
Effect: "Allow"
Action:
- "tag:GetResources"
- "tag:TagResources"
Resource: "*"
-
Effect: "Allow"
Action:
- "waf:GetWebACL"
Resource: "*"
使用此控制器的v1.1.8版时,我遇到了类似的错误(不完全相同):
kubebuilder/控制器“msg”=“对账器获取失败的错误“=” 用于负载平衡器的WAFv2 webACL arn:aws:ElasticLoadBalancement:…: AccessDeniedException:用户: arn:aws:sts:::假定角色/eks节点组角色/ 未授权对资源执行:wafv2:GetWebACLForResource: arn:aws:wafv2:us-east-2::区域/webacl/*\n\t状态代码: 400,请求id:…“
“控制器”=“alb入口控制器” “请求”={“名称空间”:“默认”,“名称”:“aws alb入口”} 我将添加它,因为我认为它可以帮助那些在相同错误消息下搜索的人 上述错误的原因是节点组角色中此控制器的版本不正确 (!)请注意,即使未使用wafv2批注,也需要新的IAM权限 解决方案1 将
wafv2
允许操作部分添加到策略:
{
"Effect": "Allow",
"Action": [
"wafv2:GetWebACL",
"wafv2:GetWebACLForResource",
"wafv2:AssociateWebACL",
"wafv2:DisassociateWebACL"
],
"Resource": "*"
}
解决方案2
如前所述,可以通过控制器标志禁用WAFV2支持
A) 如果通过kubectl安装,请将---feature gates=waf=false
添加到spec->containers->args
部分
B) 如果通过helm安装,请在helm upgrade命令中添加--设置外部参数。“功能门”='waf=false'
请注意,这个需求已经在工具中实现了(也在中进行了审查)
额外的
{
"Effect": "Allow",
"Action": [
"wafv2:GetWebACL",
"wafv2:GetWebACLForResource",
"wafv2:AssociateWebACL",
"wafv2:DisassociateWebACL"
],
"Resource": "*"
}