

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**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 は、異なるスコープを持つ 2 種類の Kubernetes リソースを使用します。

 **ResourceGraphDefinitions**: カスタム API を定義するクラスタースコープのリソース。通常、組織の標準を設計および維持するプラットフォームチームによって管理されます。

 **インスタンス**: ResourceGraphDefinitions から作成された名前空間スコープのカスタムリソース。適切な RBAC アクセス許可を持つアプリケーションチームが作成できます。

デフォルトでは、kro 機能には、`AmazonEKSKROPolicy` アクセスエントリポリシーを通じて、ResourceGraphDefinitions とそのインスタンスを管理するアクセス許可があります。ただし、kro には、ResourceGraphDefinitions で定義されている基盤となる Kubernetes リソース (デプロイ、サービス、ACK リソースなど) を作成および管理するための追加のアクセス許可が必要です。これらのアクセス許可は、アクセスエントリポリシーまたは Kubernetes RBAC を通じて付与する必要があります。これらのアクセス許可の付与の詳細については、「[kro 任意のリソースアクセス許可](capabilities-security.md#kro-resource-permissions)」を参照してください。

## プラットフォームチームのアクセス許可
<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
```

**注記**  
ロールの API グループ (この例では `kro.run`) は、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 の概念とリソース構成を理解する
+  [kro の概念](kro-concepts.md) - SimpleSchema、CEL 式、構成パターンを理解する
+  [EKS 機能のセキュリティに関する考慮事項](capabilities-security.md) - 機能のセキュリティのベストプラクティスを見直す