web-dev-qa-db-ja.com

シークレットのKubernetesサービスアカウント権限を付与しますか?

特定の名前空間内のシークレットの読み取り/書き込み/更新/削除のアクセス許可を付与したいサービスアカウントがあります。サービスアカウント、ロール、バインディングなどがどのように連携して適切な権限を付与するかについては明確ではありません。

これらの権限をサービスアカウントに付与するには、どのkubectl呼び出しまたはYAMLを実行する必要がありますか?

これが、私がこれまでに持っていたサービスアカウントのYAMLです。

apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: 2018-10-09T17:45:20Z
  name: testaccount
  namespace: test
  resourceVersion: "369702913"
  selfLink: /api/v1/namespaces/test/serviceaccounts/testaccount
  uid: f742ed5c-c1b3-11e8-8a69-0ade4132ab56
secrets:
- name: testaccount-token-brjxq
9
user108471

RoleとRoleバインディングを作成する必要があります。

役割を作成します。

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 namespace: test
 name: role-test-account
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

ロールバインディングを作成します。

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: role-test-account-binding
 namespace: test
subjects:
- kind: ServiceAccount
  name: test-account
  namespace: test
roleRef:
 kind: Role
 name: role-test-account
 apiGroup: rbac.authorization.k8s.io

RBAC承認を使用して の詳細を読むことができます

10
Atul Verma

SA testaccountです。アプリ(シークレットを操作するアプリ)にコンテナイメージがあると仮定しましょうmyorg/myapp:01。その後、次のように起動します。

$ kubectl -n test run myapp \
    --image=myorg/myapp:01 \
    --serviceaccount=testaccount

しかし、許可についてはどうですか?まあ、アプリを起動する前でも後でもかまいませんが、ある時点で次のようにします。

$ kubectl create clusterrole secretmanipulator \
    --verb=get --verb=list --verb=watch \
    --verb=create --verb=update --verb=patch --verb=delete \
    --resource=secrets 

$ kubectl -n test create rolebinding allowsecretmanipulation \
    --clusterrole=secretmanipulator \
    --serviceaccount=test:testaccount 

上記でクラスターロールを作成し、ロールバインディングを使用してSAにアタッチしたことに注意してください。どうして?そのように再利用可能です。もちろん、単純なロールもここで機能しますが、すべてのネームスペースに対してそれを再作成する必要があります。

3