このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。
kro アクセス許可の設定
ACK や Argo CD とは異なり、kro には IAM アクセス許可は必要ありません。kro は Kubernetes クラスター内で完全に動作し、AWS API コールを行いません。標準の Kubernetes RBAC を使用して kro リソースへのアクセスを制御します。
kro でのアクセス許可の仕組み
kro は、異なるスコープを持つ 2 種類の Kubernetes リソースを使用します。
ResourceGraphDefinitions: カスタム API を定義するクラスタースコープのリソース。通常、組織の標準を設計および維持するプラットフォームチームによって管理されます。
インスタンス: ResourceGraphDefinitions から作成された名前空間スコープのカスタムリソース。適切な RBAC アクセス許可を持つアプリケーションチームが作成できます。
デフォルトでは、kro 機能には、AmazonEKSKROPolicy アクセスエントリポリシーを通じて、ResourceGraphDefinitions とそのインスタンスを管理するアクセス許可があります。ただし、kro には、ResourceGraphDefinitions で定義されている基盤となる Kubernetes リソース (デプロイ、サービス、ACK リソースなど) を作成および管理するための追加のアクセス許可が必要です。これらのアクセス許可は、アクセスエントリポリシーまたは 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
注記
ロールの API グループ (この例では kro.run) は、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 が各名前空間へのアクセスを制御します。
監査のための読み取り専用アクセス: 監査目的で、セキュリティおよびコンプライアンスチームに読み取り専用アクセスを提供します。
次のステップ
-
kro の概念 - kro の概念とリソース構成を理解する
-
kro の概念 - SimpleSchema、CEL 式、構成パターンを理解する
-
EKS 機能のセキュリティに関する考慮事項 - 機能のセキュリティのベストプラクティスを見直す