

 **이 페이지 개선에 도움 주기** 

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

# kro 권한 구성
<a name="kro-permissions"></a>

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

## kro에서 권한이 작동하는 방법
<a name="_how_permissions_work_with_kro"></a>

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

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

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

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

## 플랫폼 팀 권한
<a name="_platform_team_permissions"></a>

플랫폼 팀은 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
```

## 애플리케이션 팀 권한
<a name="_application_team_permissions"></a>

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

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

```
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`과 일치해야 합니다.

## 읽기 전용 액세스
<a name="_read_only_access"></a>

수정 권한 없이 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"]
```

## 다중 네임스페이스 액세스
<a name="_multi_namespace_access"></a>

애플리케이션 팀에 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
```

## 모범 사례
<a name="_best_practices"></a>

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

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

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

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

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

## 다음 단계
<a name="_next_steps"></a>
+  [kro 개념](kro-concepts.md) - kro 개념 및 리소스 구성 이해
+  [EKS 기능에 대한 보안 고려 사항](capabilities-security.md) - 기능에 대한 보안 모범 사례 검토