Ajudar a melhorar esta página
Para contribuir com este guia de usuário, escolha o link Editar esta página no GitHub, disponível no painel direito de cada página.
Configuração de permissões do kro
Ao contrário do ACK e do Argo CD, o kro não requer permissões do IAM. O kro opera inteiramente no cluster do Kubernetes e não faz chamadas de API da AWS. Controle o acesso aos recursos do kro usando o RBAC padrão do Kubernetes.
Funcionamento de permissões com o kro
O kro usa dois tipos de recursos do Kubernetes com escopos diferentes:
ResourceGraphDefinitions: recursos com escopo de cluster para a definição de APIs personalizadas. Geralmente, esses recursos são gerenciados por equipes responsáveis pela plataforma que projetam e mantêm os padrões organizacionais.
Instâncias: recursos personalizados com escopo de namespace criados com base em ResourceGraphDefinitions. Podem ser criados por equipes responsáveis pela aplicação com as permissões de RBAC apropriadas.
Por padrão, a funcionalidade do kro tem permissões para gerenciar ResourceGraphDefinitions e as respectivas instâncias por meio da política de entrada de acesso AmazonEKSKROPolicy. No entanto, o kro requer permissões adicionais para criar e gerenciar os recursos subjacentes do Kubernetes definidos em suas ResourceGraphDefinitions (como Deployments, Services ou recursos do ACK). Você deve conceder essas permissões por meio de políticas de entrada de acesso ou de RBAC do Kubernetes. Para detalhes sobre a concessão dessas permissões, consulte a seção Permissões de recursos arbitrários do kro.
Permissões da equipe responsável pela plataforma
As equipes responsáveis pela plataforma precisam de permissões para criar e gerenciar ResourceGraphDefinitions.
Exemplo de ClusterRole para as equipes responsáveis pela plataforma:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kro-platform-admin rules: - apiGroups: ["kro.run"] resources: ["resourcegraphdefinitions"] verbs: ["*"]
Vincule aos membros da equipe responsável pela plataforma:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: platform-team-kro-admin subjects: - kind: Group name: platform-team apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: kro-platform-admin apiGroup: rbac.authorization.k8s.io
Permissões da equipe responsável pela aplicação
As equipes responsáveis pela aplicação precisam de permissões para criar instâncias de recursos personalizados em seus namespaces.
Exemplo de perfil para as equipes responsáveis pela aplicação:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: kro-app-developer namespace: my-app rules: - apiGroups: ["kro.run"] resources: ["webapps", "databases"] verbs: ["create", "get", "list", "update", "delete", "patch"]
Vincule aos membros da equipe responsável pela aplicação:
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: app-team-kro-developer namespace: my-app subjects: - kind: Group name: app-team apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: kro-app-developer apiGroup: rbac.authorization.k8s.io
nota
O grupo de API no perfil (kro.run neste exemplo) deve corresponder à apiVersion definida no esquema da ResourceGraphDefinition.
Acesso somente leitura.
Conceda acesso somente de leitura para a visualização de ResourceGraphDefinitions e de instâncias, sem permissões de modificação.
ClusterRole somente de leitura:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kro-viewer rules: - apiGroups: ["kro.run"] resources: ["resourcegraphdefinitions"] verbs: ["get", "list", "watch"]
Perfil somente de leitura para as instâncias:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: kro-instance-viewer namespace: my-app rules: - apiGroups: ["kro.run"] resources: ["webapps", "databases"] verbs: ["get", "list", "watch"]
Acesso a vários namespaces
Conceda às equipes responsáveis pela aplicação acesso a vários namespaces usando ClusterRoles com RoleBindings.
ClusterRole para acesso a vários namespaces:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kro-multi-namespace-developer rules: - apiGroups: ["kro.run"] resources: ["webapps"] verbs: ["create", "get", "list", "update", "delete"]
Vincule a namespaces específicos:
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: app-team-dev-access namespace: development subjects: - kind: Group name: app-team apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: kro-multi-namespace-developer apiGroup: rbac.authorization.k8s.io --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: app-team-staging-access namespace: staging subjects: - kind: Group name: app-team apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: kro-multi-namespace-developer apiGroup: rbac.authorization.k8s.io
Práticas recomendadas
Princípio do privilégio mínimo: conceda somente as permissões mínimas necessárias para que cada equipe execute suas responsabilidades.
Use grupos em vez de usuários individuais: vincule perfis a grupos, em vez de usuários individuais, para facilitar o gerenciamento.
Separação de responsabilidades entre equipes de plataforma e aplicação: equipes responsáveis pela plataforma gerenciam ResourceGraphDefinitions, enquanto equipes responsáveis pela aplicação gerenciam instâncias.
Isolamento de namespace: use namespaces para isolar diferentes equipes ou ambientes, com o RBAC controlando o acesso a cada namespace.
Acesso somente de leitura para auditoria: forneça acesso somente de leitura para equipes responsáveis pela segurança e pela conformidade para fins de auditoria.
Próximas etapas
-
Conceitos do kro: compreenda os conceitos do kro e a composição de recursos
-
Conceitos do kro: compreenda sobre o SimpleSchema, expressões CEL e padrões de composição
-
Considerações sobre segurança para funcionalidades do EKS: analise as práticas recomendadas de segurança para as funcionalidades