将IAM角色从EKS中的Pod附加到Serviceaccount

SSF

我正在尝试将IAM角色从EKS的POD中附加到吊舱的服务帐户。

kubectl annotate serviceaccount -n $namespace $serviceaccount eks.amazonaws.com/role-arn=$ARN

的当前角色$serviceaccount概述如下:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: common-role
rules:
  - apiGroups: [""]
    resources:
      - event
      - secrets
      - configmaps
      - serviceaccounts
     verbs:
      - get
      - create

但是,当我执行kubectl命令时,我得到以下信息:

error from server (forbidden): serviceaccounts $serviceaccount is forbidden: user "system:servi...." cannot get resource "serviceaccounts" in API group "" ...

我的角色正确吗?为什么我不能修改服务帐户?

托马斯

默认情况下,Kubernetes将运行service account: default没有正确权限的Pod 由于我无法确定您要使用哪个Pod,因此只能假定您使用的是默认容器或您创建的其他容器。在这两种情况下,该错误均表明您用于运行Pod的服务帐户没有适当的权限。

如果使用服务帐户类型default运行此Pod,则将为其添加适当的权限。另一种方法是使用为此目的创建的另一个服务帐户来运行您的pod。这是一个例子:

apiVersion: v1  
kind: ServiceAccount  
metadata:  
   name: run-kubectl-from-pod 

然后,您将必须创建适当的角色(您可以在此处找到动词的完整列表):

apiVersion: rbac.authorization.k8s.io/v1  
kind: Role  
metadata:  
  name: modify-service-accounts
rules:  
  - apiGroups: [""]  
    resources:  
      - serviceaccounts 
    verbs:  
      - get  
      - create 
      - patch 
      - list

我在这里使用更多的动词作为测试。Get并且Patch对于此用例就足够了。我提到这是因为其最佳做法是提供尽可能少的权利。

然后相应地创建您的角色:

apiVersion: rbac.authorization.k8s.io/v1  
kind: RoleBinding  
metadata:  
name: modify-service-account-bind 
subjects:  
- kind: ServiceAccount  
  name: run-kubectl-from-pod 
roleRef:  
  kind: Role  
  name: modify-service-accounts 
  apiGroup: rbac.authorization.k8s.io

现在,您在运行pod时仅引用了该服务帐户:

apiVersion: v1  
kind: Pod  
metadata:  
  name: run-kubectl-in-pod 
spec:  
  serviceAccountName: run-kubectl-from-pod  
  containers:  
    - name: kubectl-in-pod  
      image: bitnami/kubectl 
      command: 
      - sleep 
      - "3600" 

完成后,您只需执行到pod中:

➜  kubectl-pod kubectl exec -ti run-kubectl-in-pod sh  

然后注释服务帐户:

$ kubectl get sa 
NAME                   SECRETS   AGE
default                1         19m
eks-sa                 1         36s
run-kubectl-from-pod   1         17m

$ kubectl annotate serviceaccount eks-sa eks.amazonaws.com/role-arn=$ARN
serviceaccount/eks-sa annotated

$ kubectl describe sa eks-sa 
Name:                eks-sa
Namespace:           default
Labels:              <none>
Annotations:         eks.amazonaws.com/role-arn: 
Image pull secrets:  <none>
Mountable secrets:   eks-sa-token-sldnn
Tokens:              <none>
Events:              <none>

如果遇到拒绝请求的任何问题,请先检查请求属性确定适当的请求动词

您也可以使用以下kubectl auth can-i命令检查访问权限

kubectl-pod kubectl auth can-i patch serviceaccount 

API服务器将使用简单yes响应no


请注意,如果要修补服务帐户以使用IAM角色,则将删除并重新创建与服务帐户相关联以应用凭据环境变量的任何现有吊舱。您可以在此处了解更多信息


本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Terraform:将AWS托管策略附加到角色的正确方法?

将多个IAM角色与CloudFormation中的AWS :: IAM :: InstanceProfile关联

如何将IAM角色添加到AWS中的现有实例?

如何使用Terraform将多个IAM策略附加到IAM角色?

将角色附加到用户-Laravel

如何将IAM角色附加到EC2实例,以便它们可以从Terraform中的ECR中提取特定图像

python boto3将IAM角色附加/替换为ec2

无法将ClusterRoleBinding附加到Kubernetes ServiceAccount

自动将imagePullSecrets添加到ServiceAccount

附加到实例“无法定位凭据”的IAM角色-无法访问元数据终结点

EKS IAM服务帐户角色不起作用

创建IAM角色并将策略附加到该角色时出错

使用cloudformation附加IAM角色

将IAM策略绑定添加到Google Pub / Sub主题需要扮演什么角色?

如何使用ServiceAccount创建AWS IAM角色并将其附加到Kubernetes DaemonSet

是否可以防止EKS上的kubernetes pod承担节点的IAM角色?

将图像附加到砌体网格中

将键值对附加到 Javascript 中的数组

如何将 EKS 卷直接附加到 EKS Pod

如何将 AWS 托管策略附加到 cloudformation 和对流层中的角色

使用 Terraform 将现有 IAM 角色添加到 EC2 实例

将 API 数据附加到数组中

使用 terraform 和 apex 将单个 IAM 策略附加到两个不同区域(同一账户)中的两个不同角色

使用 Ansible 将 IAM 角色附加到 AWS RDS 实例

将字典中的数据附加到列表

如何通过 Terraform 将现有隐私政策附加到 IAM 角色

如何将多个 IAM 角色附加到 AWS 上的实例配置文件?

AWS:限制不同的 IAM 用戶可以將哪些 IAM 角色附加到 EC2 實例

我可以在免费试用中将 IAM 角色和安全组附加到 AWS RedShift 吗?