n-guitar/k8s-bootcamp

【コンテンツ作成】Securityの作成

Closed this issue · 4 comments

Securityの作成

結構多いな。
2回に分けるか?

  • RBAC
  • Role/RoleBinding
  • ClusterRole/ClusterRoleBinding
  • ServiceAccount
  • Secret
  • ConfigMap
  • LimitRange
  • NetworkPolicy
  • Security Context
  • TLS(復習)

kubeconfig

本当はクラスターを複数用意したいが、一度namespaceを作成するか

  • clusters
  • contexts
  • users
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://127.0.0.1:6443
  name: default
contexts:
- context:
    cluster: default
    user: default
  name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
echo 'xxxxxx' |base64 -D
$ kubectl config current-context        #現在のコンテキスト
$ kubectl config get-contexts           #コンテキストの一覧
$ kubectl config use-context <context>  #コンテキストの切り替え

この前にロールで制限したものを作成しておきたい

Role

そもそも認証・認可とは
https://dev.classmethod.jp/articles/authentication-and-authorization/

k8sの認可する操作リクエスト

https://v1-22.docs.kubernetes.io/docs/reference/access-authn-authz/authorization/

権限の対象

kubectl api-resources --namespaced=true
kubectl api-resources --namespaced=false

RBAC

Kubernetes API には、次の方法でアクセスする

  • ユーザー・グループ
  • サービス アカウント

ユーザというのがややこしい。
Kind: UserやGroupで指定するがk8sが管理しないResourcesとのこと

初期手順

  • yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
  • コマンド
kubectl create role pod-reader --verb=get,list,watch --resource=pods -n default --dry-run=client -o yaml
  • 結果
kubectl get roles                                                              
NAME         CREATED AT
pod-reader   2022-08-22T06:47:49Z

kubectl describe roles
Name:         pod-reader
Labels:       <none>
Annotations:  <none>
PolicyRule:
  Resources  Non-Resource URLs  Resource Names  Verbs
  ---------  -----------------  --------------  -----
  pods       []                 []              [get list watch]
  • role
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: bootcamp-user
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role #this must be Role or ClusterRole
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io
  • コマンド
kubectl create rolebinding read-pods --role=pod-reader --user=bootcamp-user -n default --dry-run=client -o yaml
  • 確認
kubectl get rolebindings                                                   
NAME        ROLE              AGE
read-pods   Role/pod-reader   11s

kubectl describe rolebindings
Name:         read-pods
Labels:       <none>
Annotations:  <none>
Role:
  Kind:  Role
  Name:  pod-reader
Subjects:
  Kind  Name           Namespace
  ----  ----           ---------
  User  bootcamp-user  

cap9として作成