Kubernetes RBACとの統合
前述したように、クラスターアクセス管理コントロールおよび関連APIは、Amazon EKSの既存のRBACオーソライザーを置き換えるものではありません。代わりに、Amazon EKSアクセスエントリはRBACオーソライザーと組み合わせて使用することで、AWS IAMプリンシパルにクラスターアクセスを付与しながら、Kubernetes RBACに依存して目的の権限を適用することができます。
この実習のセクションでは、Kubernetesグループを使用して詳細な権限を持つアクセスエントリを設定する方法を示します。これは、事前定義されたアクセスポリシーが過度に許容的である場合に役立ちます。実習の設定の一部として、eks-workshop-carts-teamというIAMロールを作成しました。このシナリオでは、cartsサービスのみを扱うチームに、carts名前空間内のすべてのリソースを表示する権限と、ポッドを削除する権限を提供する方法を示します。
まず、必要な権限をモデル化するKubernetesオブジェクトを作成しましょう。このRoleは、上記で概説した権限を提供します:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: carts
name: carts-team-role
rules:
- apiGroups: [""]
resources: ["*"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["pods"]
verbs: ["delete"]
Role権限をcarts名前空間にのみ制限します
このルールは読み取り専用操作 verbs: ["get", "list", "watch"] をすべてのリソース resources: ["*"] に許可します
このルールは削除操作 verbs: ["delete"] をポッドのみ resources: ["pods"] に対して許可します
そしてこのRoleBindingは、Roleをcarts-teamという名前のグループにマッピングします:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: carts-team-role-binding
namespace: carts
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: carts-team-role
subjects:
- kind: Group
name: carts-team
apiGroup: rbac.authorization.k8s.io
roleRefは先ほど作成したcarts-team-role Roleを参照します
subjectsは、carts-teamという名前のグループがRoleに関連付けられた権限を取得することを指定します
これらのマニフェストを適用しましょう:
次に、カートチームのIAMロールをcarts-team Kubernetes RBACグループにマッピングするアクセスエントリを作成します:
これで、このロールが持つアクセス権をテストできます。カートチームのIAMロールを使用してコンテキストcarts-teamでクラスターに認証する新しいkubeconfigエントリをセットアッ プしましょう:
それでは、カートチームのIAMロールを使用して--context carts-teamを指定し、carts名前空間内のポッドにアクセスしてみましょう:
NAME READY STATUS RESTARTS AGE
carts-6d4478747c-hp7x8 1/1 Running 0 3m27s
carts-dynamodb-d9f9f48b-k5v99 1/1 Running 0 15d
また、名前空間内のポッドを削除することもできるはずです:
pod "carts-6d4478747c-hp7x8" deleted
pod "carts-dynamodb-d9f9f48b-k5v99" deleted
しかし、Deploymentのような他のリソースを削除しようとすると、禁止されます:
Error from server (Forbidden): deployments.apps is forbidden: User "arn:aws:sts::1234567890:assumed-role/eks-workshop-carts-team/EKSGetTokenAuth" cannot list resource "deployments" in API group "apps" in the namespace "carts"
また、別の名前空間のポッドにアクセスしようとしても、禁止されます:
Error from server (Forbidden): pods is forbidden: User "arn:aws:sts::1234567890:assumed-role/eks-workshop-carts-team/EKSGetTokenAuth" cannot list resource "pods" in API group "" in the namespace "catalog"
これにより、Kubernetes RBACグループをアクセスエントリに関連付けて、IAMロールにEKSクラスターへの細かな権限を提供する方法を示しました。