kro 권한 구성 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.

kro 권한 구성

ACK 및 Argo CD와 달리 kro에는 IAM 권한이 필요하지 않습니다. kro는 전적으로 Kubernetes 클러스터 내에서 작동하며 AWS API 직접 호출을 수행하지 않습니다. 표준 Kubernetes RBAC를 사용하여 kro 리소스에 대한 액세스를 제어합니다.

kro에서 권한이 작동하는 방법

kro는 범위가 서로 다른 두 가지 유형의 Kubernetes 리소스를 사용합니다.

ResourceGraphDefinitions: 사용자 지정 API를 정의하는 클러스터 범위의 리소스. 일반적으로 조직 표준을 설계하고 유지하는 플랫폼 팀에서 관리합니다.

인스턴스: ResourceGraphDefinitions에서 생성된 네임스페이스 범위의 사용자 지정 리소스. 적절한 RBAC 권한이 있는 애플리케이션 팀에서 생성할 수 있습니다.

기본적으로 kro 기능에는 AmazonEKSKROPolicy 액세스 항목 정책을 통해 ResourceGraphDefinitions 및 해당 인스턴스를 관리할 권한이 있습니다. 그러나 ResourceGraphDefinitions에 정의된 기본 Kubernetes 리소스(예: 배포, 서비스 또는 ACK 리소스)를 생성하고 관리하려면 kro에 추가 권한이 필요합니다. 액세스 항목 정책 또는 Kubernetes RBAC를 통해 이러한 권한을 부여해야 합니다. 이러한 권한 부여에 대한 자세한 내용은 kro 임의의 리소스 권한을 참조하세요.

플랫폼 팀 권한

플랫폼 팀은 ResourceGraphDefinitions를 생성하고 관리할 권한이 필요합니다.

플랫폼 팀을 위한 ClusterRole 예제:

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kro-platform-admin rules: - apiGroups: ["kro.run"] resources: ["resourcegraphdefinitions"] verbs: ["*"]

플랫폼 팀원에게 바인딩:

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

애플리케이션 팀 권한

애플리케이션 팀은 네임스페이스에서 사용자 지정 리소스의 인스턴스를 생성할 권한이 필요합니다.

애플리케이션 팀의 역할 예제:

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"]

애플리케이션 팀원에게 바인딩:

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
참고

역할(이 예제에서는 kro.run)의 API 그룹이 ResourceGraphDefinition 스키마에 정의된 apiVersion과 일치해야 합니다.

읽기 전용 액세스

수정 권한 없이 ResourceGraphDefinitions 및 인스턴스를 확인할 읽기 전용 액세스 권한을 부여합니다.

읽기 전용 ClusterRole:

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kro-viewer rules: - apiGroups: ["kro.run"] resources: ["resourcegraphdefinitions"] verbs: ["get", "list", "watch"]

인스턴스의 읽기 전용 역할:

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"]

다중 네임스페이스 액세스

애플리케이션 팀에 RoleBindings와 함께 ClusterRoles를 사용하여 여러 네임스페이스에 대한 액세스 권한을 부여합니다.

다중 네임스페이스 액세스를 위한 ClusterRole:

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"]

특정 네임스페이스에 바인딩:

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

모범 사례

최소 권한 원칙: 각 팀의 책임에 필요한 최소 권한만 부여합니다.

개별 사용자 대신 그룹 사용: 쉽게 관리할 수 있도록 개별 사용자가 아닌 그룹에 역할을 바인딩합니다.

별도의 플랫폼 및 애플리케이션 사안: 플랫폼 팀은 ResourceGraphDefinitions를 관리하고 애플리케이션 팀은 인스턴스를 관리합니다.

네임스페이스 격리: 네임스페이스를 사용하여 서로 다른 팀이나 환경을 격리하고 RBAC로 각 네임스페이스에 대한 액세스를 제어합니다.

감사를 위한 읽기 전용 액세스: 감사 목적으로 보안 및 규정 준수 팀에 읽기 전용 액세스를 제공합니다.

다음 단계