---
apiVersion: v1
kind: ConfigMap
metadata:
  name: q16
  labels:
    question.kontest.amsy.dev: "16"
data:
  question: |-
    Kubernetesでは認可の仕組みにRole-based Access Controlを利用することができます。
    apps groupとextensions groupのDeploymentに対して、すべての操作ができるようにしてください。
    なお、この操作には「kubectl scale deployment xxx --replicas xxx」などのスケールアウトの処理を含みます。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: deployment-role
    rules:
    - verbs:
      - "*"
  hint: |-
    https://kubernetes.io/docs/reference/access-authn-authz/rbac/
    https://schoolofdevops.github.io/ultimate-kubernetes-bootcamp/configuring_authentication_and_authorization/
  base_content.yaml: |-
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: deployment-role
    rules:
    - verbs:
      - "*"
  answer.yaml: |-
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: deployment-role
    rules:
    - verbs:
      - "*"
      apiGroups:
      - apps
      - extensions
      resources:
      - deployments
      - deployments/scale
  comment: |-
    【解説 by カサレアル】
    rules[].resources[] には、対象となるAPIリソース名を指定します。APIリソース名は kubectl api-resources コマンドで確認できます。ただしこのコマンドでは、 deployments/scale のようなサブリソース名は取得できません。サブリソース名の取得については、下記の記事を参照してください。
    https://stackoverflow.com/questions/49396607/where-can-i-get-a-list-of-kubernetes-api-resources-and-subresources
    rules[].apiGroups[] には、APIリソースのグループ名を指定します。グループ名も kubectl api-resources コマンドで確認できます。ただし、Kubernetesのバージョンアップ時にグループが変わったAPIリソースもあります。Deploymentはその1つです（ extentions -> apps ）。この場合、過去のものも含めて全てのグループ名を指定する必要がありますので、注意してください。
    rules[].verbs[] には、各リソースに対してどのような操作をしたいかを指定します。 "*" を指定すると、全てのverbを指定したことになります。各APIリソースに対してどのようなverbが指定できるかは kubectl api-resources -o wide で確認できます。
  author: |-
    Masaya Aoyama (@amsy810)
