上犹电脑信息网我们一直在努力
您的位置:上犹电脑信息网 > win7问题 > 密码加密的几种方式_wlan怎么设置加密方式

密码加密的几种方式_wlan怎么设置加密方式

作者:上犹日期:

返回目录:win7问题

内容导航:
  • Kubernetes secrets 加密处理的3种方式 | IDCF
  • 谁能给我解释一下火影里的长门是个什么情况 ,太bug了啊,他身体的黑棒是干什么的,还有佩恩六道分别
  • 游戏中如何回答悄悄话
  • 如何选择国外的服务器?
  • 一、Kubernetes secrets 加密处理的3种方式 | IDCF

    前 言


    Kubernetes 已经毫无争议地成为了云原生时代的事实标准,在 Kubernetes 上部署应用程序也变得简单起来(无论是采用 kustomize 还是 helm),虽然对于敏感信息(比如用户名、密码、token 和证书等)的处理,Kubernetes 自己提供了 secret 这种方式,但这是一种编码方式,而非加密方式,如果需要用版本控制系统(比如 git)来对所有的文件、内容等进行版本控制时,这种用编码来处理敏感信息的方式就显得很不安全了(即使是采用私有库),这一点在实现 GitOps 时,是一个痛点。


    基于此,本文介绍三种可以加密 Kubernetes secret 的方式:Sealed Secrets、Helm Secrets 和 Kamus。


    一、Sealed Secrets


    Sealed Secrets 充分利用 kuberntes 的高扩展性,通过 CRD 来创建一个 SealedSecret 对象,通过将加密的内容存储在扩展 SealedSecret 对象中,而 SealedSecret 只能够被运行于目标集群上的 controller 解密,其他人员和方式都无法正确解密原始数据。


    SealedSecret 对象同时又会生成与其名称相同的 secret 对象,随后就可以按照常规方式使用 secret 对象了。最后将加密后的文件直接推送至版本控制系统即可,而不用担心敏感信息被泄漏。


    1.1 原理


    Sealed Secrets 加解密的原理简单来说就是:安装的时候 controller 会生成一对用于加密的 key,加密时在客户端 kubeseal 的帮助下,将包含敏感信息的 kubernets secrets 内容加密转变为一个包含有加密信息的 Kubernetes SealedSecrets 对象;解密时在 controller 的帮助下将 Kubernetes SealedSecrets 对象内的内容进行解密,然后生成常规的 kubernetes secret 对象。


    1.2 加密(encryption)


    Kubernetes secrets 加密处理的3种方式 | IDCF

    kubeseal 使用位于 cluster controller 生成的 public key 来加密,将 secrets 对象的内容加密转变成 SealedSecrets 对象。public key 和 private key 在安装 controller 的时候,以 secret(如下的 sealed-secrets-key217vf)的形成存放,可以在安装 controller 所在的 ns 下面查看。


    $ kubectl -n kube-system get secret | grep sealed-secretsealed-secrets-controller-token-qv2n5 kubernetes.io/service-account-token 3 6d4hsealed-secrets-key2l7vf kubernetes.io/tls 2 6d4h

    1.3 解密(decryption)


    Kubernetes secrets 加密处理的3种方式 | IDCF

    当将加密后生成的 SealedSecrets 对象进行部署时(kubectl apply/create),controller 会先拿 private key 进行解密,然后再生成与 SealedSecrets 同名的 Secret 对象,而此时的 Secret 对象保存的是经过 base64 编码后的信息,随后可以像正常使用 secret 一样使用这些信息。


    SealedSecrets 和 Secret 两者的关系与 Deployment 和 Pod 之间的关系类似。


    1.4 安装


    Sealed Secrets 有两部分组成:


    • 安装于集群侧的 controller
    • 客户端工具 kubeseal

    所以安装也分两步,安装 controller 和 kubeseal。可以先安装 controller,执行如下命令即可:


    $ kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.14.1/controller.yaml

    随后查看 kube-system ns 下面的 controller pod:


    $ kubectl -n kube-system get pods | grep sealsealed-secrets-controller-64b74f67b-4wtj7 1/1 Running 0 153m

    接着安装客户端工具 kubeseal。这个可以根据自己的 OS 来选用不同的安装方式,以 MacOs 为例:


    $ brew install kubeseal


    通过查看 kubeseal 的版本来确定是否安装成功:


    $ kubeseal --versionkubeseal version: v0.14.1

    此时,两部分均安装成功,下面可以使用了。


    1.5 使用


    选择一个包含有需要加密的 secret 的文件,内容如下:


    apiVersion: v1data: username: eGlhb21hZ2U= password: cGFzc3cwcmQ= token: MWU0ZGdyNWZncmgzcmZmZ3JodG9ubmhyaHI=kind: Secretmetadata: name: seal-test-secret namespace: testtype: Opaque

    将上述内容写入一个 yaml 文件,比如 test-secret.yaml,然后执行如下命令加密:


    $ kubeseal < test-secret.yaml > test-seal-secret.yaml

    可以查看 test-seal-secret.yaml 文件的内容:


    { "kind": "SealedSecret", "apiVersion": "bitnami.com/v1alpha1", "metadata": { "name": "seal-test-secret", "namespace": "test", "creationTimestamp": null }, "spec": { "template": { "metadata": { "name": "seal-test-secret", "namespace": "test", "creationTimestamp": null }, "type": "Opaque" }, "encryptedData": { "password": "AgCHLFSlGFpX2B9QDhWbMTfT83aopXMisR5XnUPZNcbvvnQzqgyG8fBVknT8LCNF5ExtUCCcNLsvWRrZY+9BJqf5dlBl6DkLV1acuPicP0vuGaUQwmc5BY/5Bj53Oj9uMYLNdVHoQ3E6kQgeJPa5v4rvwRXsB0EneYPcT88KyMg+tn4OY9JH+hpg2XMXZudyyZsocE852J5nfN4P7WZQYaG2eIBqRSQvQXUflQQvZ5wBCkTvmaZYfxz+Lxuf3wDWdSlPjcgSVnn5tWNP7u0ErdVy8LwTL5HzJdcoSviDysTq3VVA8W9Nmn0CM3QS0R0Nbi3JfalUdxfBMK+yb7t6Z72oJyoxGfCa07iKnkM37SSw4vl1nXiYy3FMWuzDtWLVk6XzjBZR2ChoeClqbGDg8KeSWZg/rO3Xku98vCmCa004OetJKBMc9Db3q+gX53ThdU70VvRol9rLPFBPHB8NTjD+Bu0Ss4XzIzZzi8J+Ov5xE7G8LnPLSZtZQyD/qGZK4n7pU1YNLROJ+fz1W5edPdpb5szUOqs1bpFfGleUiPZo1sGA0f1EsDvJShptgtT44YzGRkkgrP1LGp2AVIpnt9meE5WNCoSEPZJVx7wWMV9CHMOyyUi8zi+oG/S2NkI3rc2sC8AFp0DqP9m/HaX1GG+6vw9oHAbhxpR4v3mDyBIq+/8UEMtkybIEDQGHqyQ5CfRow+A80cA4Hw==", "token": "AgBRi4NZunaJtHyP5aAoWmGtEXBipbFIb/n4ep8wdg+eka5xbDeLZwNCLofbUL+u0pP/CHSJeWl62mVPJhZdOKE+Su0b8a78im0+xsochaMQf0AI1GGL/Fo08HI8paP8k404gwAtonocIFSis3YooU0nyVD+lYH+k09FGABI+RmVLc2XkuIr96TTL4xsdSM5L0Ks2SFQKcQ42JfFWtNdXz6lr/IODsZop0/xAk6ffbsGGmCUjwusUU3Wp0MR25ntYT8ySuO6W7xkfGozEFzztteBJs28SHLf5HUi6BbYVnsZibrFF3BZP5aNnBg2TIgo3+dbX6EPHM904By3Z9XTBxsQfH6p1VoyUf0EGKZnUnJFezFtN9m2tyKbV/Z/5vCh9kVp6Yn/BE/AwGAH7kqqjPtHTnZiq+Xy1UwV4/eHkxGAvSAR3Z6wTQCt/rwqGrQi2eGpIcyjxTwlPYaVjfx3L+1tnBR966lGLnhwX0I6b6whXAm3hRb1AhYFnuyF/CoG/PEmQsMU5GfkroQkb5LL+UeCYKbjvMvgCe2hFxfh3dcGJ9E3dad9W0rSKrPd5t/dR1kDtItHau36+G9PSVyqRD1yt0MS2vLLUQu7t2RhiIPrl20fkbnum9JAfmLlgliHIiQPHASL32CXB6EzsgqRX6w8TmWNOSvlR7LU8JZtd4Gmiw9wGBh7JEGodkaH6lc5ndQluykC18RUXtuLft+S4dnQCApHX6FoIGZjug==", "username": "AgCgBQc/fhGqB0YBGfXzhybC6YXJeLkOZyi7Z7Y+HjfnYSg4Q/Zh8Kn7UEbq9CwEl+CtagARjKmLfhIcAqFWS8+h8j4A2xNq7gzLnv+eCo0vFDPTddDVvdb6ixmRvF5rzD1gZ2vxWzlWVqk7x0wt8wCE90S0yu40j+JOaqH35Ir3kb4NgTMXk6Yqlidw06r3P2cqbZ0jBleOFf5eRfiu0ZquU5PJ/J7t9Pecx9S8mlitTtFPlvpVprNPB+XPSz2uwcwNW9i5OBUgR3PXsOjILLog8SiWYyk7bHaWnJtZ+JVEi9isy4EiwyrDY5kHRK2kB9Nnf6a9zz2krP7W+w9a3qXJkv8GP9D2+FN9Pj+2WP4r0hz7JL0i5q9bcc5HgBKP946u87z2lEjv2ioUAghaG/zwol3q+tKv0i6pPe0guGRCdpMlXa1Z1deOBJvxJXanTrIwi7dVc/bCsRGMRyYwD6hWhe1JjxgBjc/YbbBj8JJVdHrc2tGYFBU9qG2Kv3cAZMRrMXvKUkTK8JiMVzN0/DHEtdNv1PW4U3hlAqt5b62WahyzdHNVqHycwe+Ogz0BfTdohlxftv5qQYx0SEynXaIY+WltRnCnYrY1Kg1/DmsWYCGy++TO+6cEEwISPe/FM1peidsXVf5S3DCUQWE6aMK/6XDzukZoTjor/8JPkHc56Pk1Paty0yrP+YdL5R5m3IERzHoD" } }}

    可以看到内容已经得到了加密,接下来就需要创建 SealedSecret 对象了:


    $ kubectl -n test apply -f test-seal-secret.yaml

    接着查看 SealedSecret 和 secret:


    $ kubectl -n test get SealedSecret,secretsealedsecret.bitnami.com/seal-test-secret 4ssecret/seal-test-secret Opaque 3 3s

    在如下的 Deployment 中以环境变量的形式引用上述生成的 secret:


    apiVersion: apps/v1kind: Deploymentmetadata: labels: app: devops name: devopsspec: replicas: 1 selector: matchLabels: app: devops template: metadata: labels: app: devops spec: restartPolicy: Always containers: - name: devops image: dllhb/devopsday:v0.6 imagePullPolicy: Always envFrom: - secretRef: name: test-secret ports: - containerPort: 9999 name: http protocol: TCP

    使用下面命令部署:


    $ kubectl -n test apply -f test-deploy.yamldeployment.apps/devops created

    查看 pod 状态,并查看环境变量(secret 是以环境变量的形式注入 pod 内的):


    $ kubectl -n test get podsdevops-b48df6659-gmjtr 1/1 Running 0 21s$ kubectl -n test exec -it devops-b48df6659-gmjtr shenv | grep -E "username|password|token"username=xiaomagetoken=1e4dgr5fgrh3rffgrhtonnhrhrpassword=passw0rd

    说明 secret 注入成功。其他的 secret 类型,比如 tls、dockerconfigjson 等都可以用上面的方式进行使用。


    最后就可以将包含 secret 信息且经过加密的文件 test-seal-secret.yaml 推送至版本管理系统,比如 GitHub。


    二、Helm Secrets


    Helm Secrets 是 Helm 的一个插件,用来对于 Helm Chart 中的敏感信息进行加密。


    2.1 原理


    Helm Secrets Plugin 可以使用多种加密方式来对敏感信息进行加解密(本文介绍 sops)。加密时使用helm secrets enc 命令对需要加密的文件内容进行加密;解密时helm secrets使用dec将加密内容进行解密,并添加在 values.yaml 文件中,后续的使用直接取用 values.yaml 文件中的值即可。


    2.2 加密


    Kubernetes secrets 加密处理的3种方式 | IDCF

    使用helm secerts enc 对位于helm_vars目录下的secrets文件加密时,helm secrets plugin会使用 public key 对内容进行加密。


    2.3 解密


    Kubernetes secrets 加密处理的3种方式 | IDCF

    使用helm secrets install/upgrade命令对应用程序进行安装或更新的过程中,需要指定经过加密后的 secret 文件(-f 指定,通常位于 helm_vars目录下),helm secrets plugin 会选择 private key 对加密的数据进行解密,解密后的数据在 values.yaml 文件中可找到,在 helm chart 的 template 目录下的 secret 文件只需要引用相关的值即可(.Values.xxx)。


    2.4 安装


    安装的前提条件:


    • helm(>2.3)
    • sops

    sops 是一个加密文件的编辑器,支持 YAML、JSON、ENV、INI 和二进制格式,并使用 AWS KMS、GCP KMS、Azure Key Vault 和 PGP 进行加密。


    PGP(Pretty Good Privacy)是一种常用的加密方式。在 1990s(1991 年)由 Phil Zimmermann 所开发,现在归属于 Symantec 公司,它是商业软件,需要付费才能使用。而 GPG(GNU Privacy Guard)是一种基于 Open PGP 标准的加密方式。它是开源且免费的。所以本文的演示将使用 GPG 的方式。


    由于sops采用非对称加密,所以需要先生成一对key。使用gpg --full-generate-key并输入必要的参数即可生成 key,如下:


    $ gpg --full-generate-keygpg (GnuPG) 2.2.12; Copyright (C) 2018 Free Software Foundation, Inc.This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only)Your selection? 1RSA keys may be between 1024 and 4096 bits long.What keysize do you want? (3072) 4096Requested keysize is 4096 bitsPlease specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n yearsKey is valid for? (0) 1yKey expires at Sat Jan 8 12:12:10 2022 UTCIs this correct? (y/N) yGnuPG needs to construct a user ID to identify your key.Real name: xiaomageEmail address: devops@xiaomage.comComment: gpg key generationYou selected this USER-ID: "xiaomage (gpg key generation) "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? OWe need to generate a lot of random bytes. It is a good idea to performsome other action (type on the keyboard, move the mouse, utilize thedisks) during the prime generation; this gives the random numbergenerator a better chance to gain enough entropy.We need to generate a lot of random bytes. It is a good idea to performsome other action (type on the keyboard, move the mouse, utilize thedisks) during the prime generation; this gives the random numbergenerator a better chance to gain enough entropy.gpg: key 8BA2C5716B5C007F marked as ultimately trustedgpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/BCEB5797691E6C95E33A465D8BA2C5716B5C007F.rev'public and secret key created and signed.pub rsa4096 2021-01-08 [SC] [expires: 2022-01-08] BCEB5797691E6C95E33A465D8BA2C5716B5C007Fuid xiaomage (gpg key generation) sub rsa4096 2021-01-08 [E] [expires: 2022-01-08]

    可以查看生成的private keypublic key


    • private key 查看

    gpg -K(gpg --list-secret-keys)/root/.gnupg/pubring.kbx------------------------sec rsa4096 2021-01-08 [SC] [expires: 2022-01-08] BCEB5797691E6C95E33A465D8BA2C5716B5C007Fuid [ultimate] xiaomage (gpg key generation) ssb rsa4096 2021-01-08 [E] [expires: 2022-01-08]

    • public key 查看

    gpg -k(gpg --list-keys)gpg: checking the trustdbgpg: marginals needed: 3 completes needed: 1 trust model: pgpgpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2ugpg: next trustdb check due at 2022-01-08/root/.gnupg/pubring.kbx------------------------pub rsa4096 2021-01-08 [SC] [expires: 2022-01-08] BCEB5797691E6C95E33A465D8BA2C5716B5C007Fuid [ultimate] xiaomage (gpg key generation) sub rsa4096 2021-01-08 [E] [expires: 2022-01-08]

    在用 sops 加密数据之前,先创建一个.sops.yaml文件,写一个加密的规则,比如只加密 key 是 username 和 password 的敏感信息,而且需要指定 gpg 的 fingerprint。


    cat << EOF > .sops.yamlcreation_rules: - encrypted_regex: '^(username|password)#39; pgp: 'B1C77B2CCF5575FAF0DA6B882CA51446C98C9D85'EOF

    接着,将下面的敏感信息写入一个yaml文件:


    cat << EOF > secrets.yamlusername: xiaomagepassword: passw0rdEOF

    现在就可以用 sops 来加密数据了:


    $ sops -e secrets.yamlusername: ENC[AES256_GCM,data:s6pInMY3eGM=,iv:5Q7JsntVoKjseD3ApWcgmYeedmGXj2A1/PyGCNFHGdE=,tag:vInq3NBLxvVWXsoVUD46Rw==,type:str]password: ENC[AES256_GCM,data:Ua7de2w6Jgw=,iv:qYIjTW1D0dh20NA8FGu4XEGI16kvYGAWIk4iu3r/Gdg=,tag:b33tpsP1vCgqlpyCEDP88Q==,type:str]sops: kms: [] gcp_kms: [] azure_kv: [] hc_vault: [] lastmodified: '2021-02-06T12:08:57Z' mac: ENC[AES256_GCM,data:QHHDRSO2PyJt0/OA67ex0R39gEjWEnwg0MSnBac8QtLNh3ncY+9D8IZw/WqVnbcaiPta2Pem96yJZTZP4pum9ZX446iRKldsAXNqS4+tmlfowpMWI+1DgOa1QCkhSDH9U/2URA1dzyn3cZLPFzb5Ai6YUEQ93sRjlPI+kHXl16c=,iv:jhFM/uJSeChikUv777qgYVDFCHQhQeXlUSjiHx5X8Ow=,tag:6QTo5CsXQoqr0fK1B947ug==,type:str] pgp: - created_at: '2021-02-06T12:08:51Z' enc: | -----BEGIN PGP MESSAGE----- hQIMA/AYjF0OZ4PLAQ/+LRc5vgpRhOez8q9up8t+3OVM5QdnMwSYiuwLvjfInqqk K19jUfUhwXDGGtSMlTotYlTWqWCiSm7sYeqFB0/Lx9lCZY5BhCrVnK7u7m8azpWU osCQNmJehflqqnBmn82nblOGnDjM/FYkcnz4+NHUPNyYV5tWjzw9s8i/WhDeuNrf IPnGKRCGJunWlHDP3yWMo7bnCNU/TmuRiSpf7lQLsp/U71M5t1X8RajatO7DPecq caq3VZ+Ynx0Qcgyt+aHugZw5Sw9oFOT4WVqwLlC/NKvrjtY8pCQ1HtY5/agLHrDw Hn2Phz1aQ+l4EAarphXCiYAFw/LHD2tisbQoApXe5tud9CjiyMu/14qhQalLgQxA yGcMmhEH7Ke4bubaA0ZPo8hBXAkxfdeicSzB/e1IkUP4LtlQiwPldDcDShB6MROH sK3RpELhSaNdfQZxqDVN0CgjRS0/AjboWejjrLQHD1hVcUDAU2WTyfvIaSxKpHIx ONo5sTvzYOjU/BRTLn0EujRP414xadOtt+4gEQDrGacYAokuiK2ev0dinHo32EWY j/vsb0o3whNRpBEGMZTUrl9HSkt58FQZsmu5JnL3ZYKiujHFoQS/aOcxD0slUxhC PoCnce6PgmB78RHOLHaXkTrORc+6oMpCGN8/K1hjXE+eH/kk4jv8yVLwmbg9XjLS XgFTcQYs6nVTSoWVea62kRN4qlC/XTJ6D91HXRX5UyB3qrZ3k+w9TOlM9quYYI/B E0FqbFVSKT3ekPQqF91a7tV01FIxpfr4Mvzy2+8xsXiAQtDm52PSlk9eovkAMqU= =nafU -----END PGP MESSAGE----- fp: B1C77B2CCF5575FAF0DA6B882CA51446C98C9D85 encrypted_regex: ^(username|password)$ version: 3.6.1

    可以看到 username 和 password 的值都被加密了。


    2.5 安装使用 Helm Secrets plugin


    执行以下命令安装 helm-secrets plugin:


    $ helm plugin install https://github.com/zendesk/helm-secrets


    首先,创建一个演示用的 helm chart,并在根目录下创建一个名为helm_vars的目录,用来存放用来加密的 secret,如下所示:


    $ tree.└── devsecops ├── Chart.yaml ├── charts ├── helm_vars │ ├── secrets.yaml │ ├── tls.crt │ └── tls.key ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── deployment.yaml │ ├── hpa.yaml │ ├── ingress.yaml │ ├── secrets.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ └── test-connection.yaml └── values.yaml

    将需要加密的信息写入secrets.yaml文件里面,比如:


    cat << EOF > secrets.yamlsecret_data: username: xiaomage password: passw0rdEOF

    使用 helm secrets 来加密上述文件:


    $ helm secrets enc secrets.test.yamlEncrypting secrets.test.yamlEncrypted secrets.test.yaml

    查看加密后的文件内容:


    secret_data: username: ENC[AES256_GCM,data:O/1pyNsL3Gc=,iv:HZ0MrGWaBxM37cIkp/JdsA5gRzw6aJFfBR19rno3h5I=,tag:2SiMs46lonnwECc8RHfT/Q==,type:str] password: ENC[AES256_GCM,data:l15XlhZ4CsM=,iv:TMbV6+Rh2wGpMlHi7zJsHWM6IxMK2hBuMKsD82p8LiY=,tag:N4Kbftl//B1U2R9Khsduzg==,type:str]sops: kms: [] gcp_kms: [] azure_kv: [] hc_vault: [] lastmodified: '2021-02-07T06:19:15Z' mac: ENC[AES256_GCM,data:dSXjEbKyBXVtqqSqshGXKUwDJcMVZrDf2GxFj0Oor3FDnNeS+bTY4Yubv1J0XlzU6yxO0Y87NzVN84unkF/Ph95JJV2opk6a0VTtaxKYOFUVneyY5WQ2glHEntX+aEq1lJkW1Sd34i/tvWeSABemIX4M2xcIOdIaCHgzk//vi9w=,iv:febius/ashzpdfKStJnQYVG/3FrVaYw102q87P9+egQ=,tag:/MUXrxhhOk6F8MS5wi7cLQ==,type:str] pgp: - created_at: '2021-02-07T06:19:08Z' enc: | -----BEGIN PGP MESSAGE----- hQIMA7Oc9Dk1ccccARAAk7l23omTBRThnP7YC5AHdqzEO8Lapxc8ycWg5tsbM8eE JaRFn4u3/+dQdpL6xlHv1wu0kmrZUgG8P41WmNDIKb2GtAlHQk+bjjV2IU0lCEj7 9UZXuAyhxHtVjHMBnzjppFh+6L0nH2K5AGaJWATwhO9M6CqmdCFnWJx7vAPfVQZF Li9zqHK/YsbwgEWKs0bVvJ1btB7u4J5olKagYaZhaFaLzwjbtXmEqDUpfmPkooNr 7kPSVe8IMv/+MUaJY6uYNTBGWGrije4bY4A+hA/dUj4yN0gqqd796oc9GuN1MJSO cAAoiTW2Vrw3OdyP7PIJVuxlS9gXnxtBOjo+p/Ij91ELq+DnC+6bGS9UIeF+Y1RD h4siwx7I7hzk9tp+tXmsfdJit+usK6raPzYkcBgZVF8woKZsp2/qxloYyIFJ0sbK MO67+dcAg+AX0M0/u33t1BAMTt/LJ1V2ZQUl+yzjRSKfZ2bCmd/skkE3VZx2ls44 LMngWZG7EzE39Onw9PB3ukXD7W+X+BThc2AJzVotrpDWbSI2/anoM9TMJjYfBjyU xBuTuoviT5ENdm14bGomww9G+Ean3dyC2vWoHhY2KfuPlSxZ6mDIDm5zAPkZZl5A QHjtaPT5qymPCpqy2X3yvK76zyJhfWYFIHguOy3JlDxiONC9DH1M6OVWoC69pPzS XgEtII9fTeLXFU5Jy9gJa5nNKEQY87OkSXl3TFAiQ9OmgDbuUHZuvQzlecsKwR2s mS7P7Z3Bb+eRakQ41Gzw4B7wmOrm2w0t4guVJDNIP/gQB0XBO1XZj4RsbMKn070= =yQ2R -----END PGP MESSAGE----- fp: B1C77B2CCF5575FAF0DA6B882CA51446C98C9D85 encrypted_regex: ^(data|username|password|.dockerconfigjson|token|token1|key|crt)$ version: 3.6.1

    需要注意的是,此时只是加密了需要加密的内容,但是这些内容该怎么用呢?其实也比较简单,就是:正常用。


    举例来说,在 helm chart 中,正常用 secret 的方式如下:


    apiVersion: v1kind: Secretmetadata: name: test labels: app: devsecopstype: Opaquedata: {{- range $key, $value := .Values.secret_data}} {{ $key }} : {{ $value | b64enc | quote}} {{- end}}

    而上面循环中引用的值.Values.secret_data就是来自于上面helm_vars目录下的加密文件。


    怎么做到的呢?简单点说,就是执行 helm 的相关命令(install 或者 upgrade)时,会利用 sops 的 private key 将 helm_vars 目录下的加密内容解密,并且“存放在”values.yaml 文件中,接下来的就和正常的 helm chart 使用是一样的了。在 chart中的 deployment.yaml 文件中引用 secret:


    ...... containers: - name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" imagePullPolicy: {{ .Values.image.pullPolicy }} envFrom: - secretRef: name: test......

    接下来可以使用下面命令将前文的 chart 进行安装:


    $ helm secrets install test . --namespace test -f helm_vars/secrets.yaml -f values.yaml

    需要注意的是,在上面的命令中,必须指定helm_vars/secrets.yaml文件。接着查看生成的pod、secret:


    $ kubectl -n test get pods,secretpod/test-devsecops-7876ffc8b7-967xr 1/1 Running 0 6ssecret/test Opaque 2 8s

    由于上面的 secret 是以环境变量的形式注入到 pod 里面的,可以查看进行验证:


    $ kubectl -n test exec -it test-devsecops-7876ffc8b7-967xr sh$ env | grep -E 'username|password'username=xiaomagepassword=passw0rd

    可以看到 secret 解密成功,并成功注入 pod。


    最后就可以将加密后的文件上传至源码管理系统了(比如用 git push 至 GitHub)。


    三、Kamus


    Kamus 是一款开源的采用零信任的 secret 加解密方式为 Kubernetes 应用程序安全处理 secrets 的工具。Kamus 提供两种方式来对 Kubernetes secrets 进行加密,即


    • 使用 init container:将 secrets 加密后存储为 Kubernetes configmap,然后在应用程序的部署中添加一个 init container,通过 init container 将 configmap 中的加密数据解密至指定文件,应用程序再从此文件读取解密后的 secret 信息。
    • 使用 KamusSecret:创建一个 KamusSecret 对象(充分利用了 Kubernetes 的扩展机制),此对象包含了加密之后的数据,在此对象创建的过程中,会创建一个同名的 secret 对象,secret 中的数据是经过 base64 编码之后的数据,可以被 Kubernetes 其他对象引用。

    3.1 原理


    Kamus 同样是使用客户端工具 kamus-cli 对于需要加密的数据进行加密(区别于 Sealed Secrets 的是,Kamus 的数据需要单独逐一加密,而不是全部存放在 secret 文件里面一次性加密,下面会看到),下面依旧以加解密的方式分别阐述。


    3.2 加密


    Kubernetes secrets 加密处理的3种方式 | IDCF

    用 kamus-cli 对需要加密的数据逐一加密时,位于集群上的 controller 会选择 public key 并使用 kamus encryptor 对数据进行加密,随后将加密内容保存在 configmap 中(以 init container 的方式使用)或者 KamusSecret 中(以 secret 的方式使用)。


    3.3 解密


    Kubernetes secrets 加密处理的3种方式 | IDCF

    当将加密后的内容进行部署时(kubectl apply/create),位于集群上的 controller 会选择 private key,并使用 kamus decryptor 对于数据进行解密。


    如果是使用 KamusSecret 存储的数据,则 controller 将生成一个与 KamusSecret 对象同名的 Secret 对象,此 Secret 中存放由经过 base64 编码后的信息;


    如果是使用 configmap 的形式,则此 configmap 会以 volume 的形式挂载到 pod 内,随后在 pod 中使用 init container 来调用 kamus-decryptor 的 api 将加密信息解密,并存放到指定的文件中,随后 pod 内的应用程序可以通过读取此文件内容来获取敏感信息。


    KamusSecret 和 Secret 两者的关系与 Deployment 和 Pod 之间的关系类似。


    3.4 安装


    kamus 的安装包括 controller 和客户端工具 kamus-cli。


    • 安装 controller

    $ helm repo add soluto https://charts.soluto.io$ helm install kamus --namespace kamus soluto/kamus

    检查 pod 状态:


    $ kubectl -n kamus get podsNAME READY STATUS RESTARTS AGEkamus-controller-55d959895d-hdklf 1/1 Running 0 9m30skamus-decryptor-5974b6ff47-5pkbr 1/1 Running 0 7m34skamus-decryptor-5974b6ff47-c4jt4 1/1 Running 0 7m34skamus-encryptor-f75dd457-fwp8r 1/1 Running 0 9m28skamus-encryptor-f75dd457-p9rnx 1/1 Running 0 9m29s

    • 安装客户端

    $ npm install -g @soluto-asurion/kamus-cli

    检查安装是否成功:


    $ kamus-cli -V0.3.0

    3.5 使用


    下面分别以init container和 KamusSecret 的方式来演示使用方式。


    1)以init container的方式


    首先需要加密 secret。kamus 加密 secret 时需要和一个 service account 关联起来,此 service account 会在后续的应用部署中使用,所以先创建一个 service account(本文所有 demo 均在 test ns 下):


    $ kubectl -n test create sa xiaomage

    接着使用客户端工具 kamus-cli 来加密 secret(username 的值为 xiaomge,password 的值为 passw0rd):


    $ kamus-cli encrypt --secret xiaomage --service-account xiaomage --namespace test --kamus-url http://localhost:9999 --allow-insecure-url[info kamus-cli]: Encryption started...[info kamus-cli]: service account: xiaomage[info kamus-cli]: namespace: test[warn kamus-cli]: Auth options were not provided, will try to encrypt without authentication to kamus[info kamus-cli]: Successfully encrypted data to xiaomage service account in test namespace[info kamus-cli]: Encrypted data:CxujUBK4jgdjt+wP5mXyDA==:+CoXRDJVtW3EZ2FpterVTA==

    返回的CxujUBK4jgdjt+wP5mXyDA==:+CoXRDJVtW3EZ2FpterVTA== 就是 xiaomage 这个值经过加密后的值,用同样的方法,可以将 passw0rd 进行加密:


    $ kamus-cli encrypt --secret passw0rd --service-account xiaomage --namespace test --kamus-url http://localhost:9999 --allow-insecure-url[info kamus-cli]: Encryption started...[info kamus-cli]: service account: xiaomage[info kamus-cli]: namespace: test[warn kamus-cli]: Auth options were not provided, will try to encrypt without authentication to kamus[info kamus-cli]: Successfully encrypted data to xiaomage service account in test namespace[info kamus-cli]: Encrypted data:ChmNEPM8Nj7Huh1YwO5xOA==:r9MHhEyTIEaQ4hw837lA9w==

    返回的ChmNEPM8Nj7Huh1YwO5xOA==:r9MHhEyTIEaQ4hw837lA9w== 就是 passw0rd 这个值经过加密后的值,将上述两个加密后的值放在 configmap 中:


    apiVersion: v1kind: ConfigMapmetadata: name: kamus-encrypted-secrets-cm namespace: testdata: username: CxujUBK4jgdjt+wP5mXyDA==:+CoXRDJVtW3EZ2FpterVTA== password: ChmNEPM8Nj7Huh1YwO5xOA==:r9MHhEyTIEaQ4hw837lA9w==

    接下来,将上述 configmap 以 volume 的方式挂在到 pod 中,随后使用 init container 来解密数据,且将数据存放在一个 config.json 文件中:


    apiVersion: v1kind: Podmetadata: namespace: test name: kamus-podspec: serviceAccountName: xiaomage automountServiceAccountToken: true initContainers: - name: "kamus-init" image: "soluto/kamus-init-container:latest" imagePullPolicy: IfNotPresent env: - name: KAMUS_URL value: http://kamus-decryptor.kamus.svc.cluster.local/ volumeMounts: - name: encrypted-secrets mountPath: /encrypted-secrets - name: decrypted-secrets mountPath: /decrypted-secrets args: ["-e","/encrypted-secrets","-d","/decrypted-secrets", "-n", "config.json"] containers: - name: kamus-test image: dllhb/devopsday:v0.6 imagePullPolicy: IfNotPresent volumeMounts: - name: decrypted-secrets mountPath: /secrets volumes: - name: encrypted-secrets configMap: name: kamus-encrypted-secrets-cm - name: decrypted-secrets emptyDir: medium: Memory

    需要注意的是,需要指定 kamus 的地址,即 decryptor 的地址,可根据自己的安装情况自行指定。


    接下来,部署 configmap 和 pod 并查看:


    $ kubectl -n test apply -f configmap.yaml$ kubectl -n test apply -f kamus-deploy.yaml$ kubectl -n test get pods,cmNAME READY STATUS RESTARTS AGEpod/kamus-pods 1/1 Running 0 4h3mNAME DATA AGEconfigmap/kamus-encrypted-secrets-cm 2 30s

    进入 pod 查看解密后的数据:


    $kubectl -n test exec -it kamus-deploy sh$ cat /secrets/config.json{ "password":"passw0rd", "username":"username"}

    可以看到 secet 已经被解密到了 config.json文件中,应用程序只需要读取此文件即可获得 secret 的相关数据。


    2)以 KamusSecret 的方式


    kamus 对 Kubernetes 进行了扩展,有了自己支持的 KamusSecret 对象,将上述加密后的数据存放在 KamusSecret 中:


    apiVersion: "soluto.com/v1alpha2"kind: KamusSecretmetadata: name: kamus-test namespace: testtype: OpaquestringData: username: CxujUBK4jgdjt+wP5mXyDA==:+CoXRDJVtW3EZ2FpterVTA== password: ChmNEPM8Nj7Huh1YwO5xOA==:r9MHhEyTIEaQ4hw837lA9w==serviceAccount: xiaomage

    创建 KamusSecret 对象:


    $ kubectl -n test apply -f kamus-secrets.yaml


    查看生成的 KamusSecret 和 Secret:


    $ kubectl -n test get KamusSecret,secretNAME AGEkamussecret.soluto.com/kamus-test 60sNAME TYPE DATA AGEsecret/kamus-test Opaque 2 59s

    可以看到 KamusSecret 生成了一个和自己同名的 secret,接着查看 secret 的内容:


    apiVersion: v1data: password: cGFzc3cwcmQ= username: eGlhb21hZ2U=

    解码后为:


    password: passw0rdusername: xiaomage

    此时,可以像正常方式在 pod 中引用此 secret(像前文的 Sealed Secret 章节所演示的一样,再次不再赘述)。


    最后就可以将加密后的文件上传至源码管理系统了(比如 git push 至 GitHub)。


    写在最后


    其实,安全处理 Kubernetes secret 的方式不仅仅上面的三种形式,还可以利用诸如 vault 等来管理应用程序部署中的敏感信息。但是不同的工具、不同的方式,其背后的思想和思路都差不太多。


    总结起来,差不多有以下几点:


    • 充分利用 Kubernetes 的扩展能力,自定义一个 secret 对象用来存储加密后的数据(诸如 Sealed Secrets 的 SealedSecret 对象;Kamus 的 KamusSecret),让这些扩展的对象生成对应的 secret 对象,再正常使用 secret 对象。
    • 利用外部的敏感信息管理工具(诸如 vault 或者其他云厂商提供的服务)。
    • sops 是一种使用方便的加密工具,也是上述工具实现加密的秘密武器。

    没有一劳永逸的安全,只有永不止步的行动。任何改变都是重要的。


    参考


    • https://github.com/bitnami-labs/sealed-secrets
    • https://github.com/Soluto/kamus
    • https://kamus.soluto.io/
    • https://blog.solutotlv.com/can-kubernetes-keep-a-secret/
    • https://en.sokube.ch/post/lightweight-kubernetes-gitops-secrets
    • https://github.com/mozilla/sops#showing-diffs-in-cleartext-in-git

    来源:DevSecOps SIG


    作者:小马哥


    +“CH050791”可入qun交流~


    二、谁能给我解释一下火影里的长门是个什么情况 ,太bug了啊,他身体的黑棒是干什么的,还有佩恩六道分别

    这是第一问答案~
    长门是漩涡一族的后裔,晓组织首领,拥有轮回眼,是「佩恩六道」的操纵者,大蛤蟆仙人称他和漩涡鸣人为预言之子。第二次忍界大战雨隐村的战争孤儿,在结识了小南、弥彦后跟随自来也学习过忍术。一生经历了两大痛楚——分别是父母及挚友弥彦之死。弥彦死后,他成为晓组织第二任首领。早期理想是「在痛苦的轮回中孕育和平」。后被漩涡鸣人感化,重拾年少时期的梦想,用轮回天生复活木叶一战所死之人,将自己的意志托付给了鸣人,期待鸣人能够完成《鸣人物语》,力竭而亡。后被宇智波带土(面具男)夺取轮回眼。

    这是第二问答案~
    身体的黑棒是能连接信号、传导查克拉的查克拉接收器。

    这是第三问答案~

    1,天道,原为长门的同伴弥彦,被山椒鱼半藏逼死后制作为佩恩天道。
    能力(技能)

    1)
    术名,神罗天征。属性,六道之力。说明,将忍术、攻击和一定范围的物体弹开的术。使用的力量越大下次使用术的空档就会越长,一般神罗天征空档为5秒。最大的一次神罗天征摧毁了忍界最大的忍者村——木叶村。
    2)

    术名,万象天引。属性,六道之力。说明,和神罗天征相反,强行吸引一定范围内的指定物体或者随意操纵被作用物体,且被作用物体不可抵抗。

    3)

    术名,地爆天星。属性,六道之力。说明,轮回眼的禁术,需要消耗大量的查克拉。双手将查克拉高度浓缩成球状,然后释放到空中吸引周围一切物体,同时利用吸引来的岩石造出一个巨大的岩石球体包裹目标,把目标封在里面,使其丧失行动能力。

    2,人间道。原为一泷隐忍者。自来也在酒馆里遇到。那个说自己教育孩子们在战争中苟且偷生方法的人。死后制作为人间道。
    1)
    术名,心层潜。属性,六道之力。说明, 通过抽取他人灵魂来读取他人的思想,从而获取情报。灵魂被抽出的人会死亡。

    3,修罗道。原为一傀儡师。自来也在游历中遇到的一个傀儡师,他认为命运是不用寻找的,人们对于到来的命运就要认命,认为应该投入即将到来的战争中。死后制作为修罗道。
    1)
    术名,阿修罗形态。属性,六道之力。说明,身体变为三脸六臂,从而提高攻击力和攻击范围围,腰部装备着锯齿。

    2)
    术名,怪腕火箭。属性,六道之力。说明,这是通过改造自己的肉体,将割开的腕部作为武器发射的术。将查克拉集中在切口处,因产生的小规模的爆炸而得到推进力的腕部,由于强大的冲击力而呈直线状飞出去!!其产生的破坏力,就算是较厚的岩盘也很容易崩碎,而且用查克拉保护的腕部也是完好无损,切口的查克拉就像是磁石吸引着腕部,可以再装回去。

    4,畜生道。原为「风魔一族」的忍者。曾和自来也交战过,生前被自来也用苦无在其额头上划了一道伤痕。畜生道被自来也打败护额掉落的时候,发现了额头上的伤疤,明白了这是曾跟自己交战过的忍者。后被一女子取代。

    1)
    术名,通灵之术。属性,六道之力。说明,不需要签订血之契约的通灵之术,依靠瞳力控制通灵兽。佩恩畜生道的通灵兽有:巨蟹、变色龙、地狱之犬、八咫鸟、公牛、犀牛、熊猫、蜈蚣;也可以通灵佩恩和小南。

    2)
    术名,增幅通灵之术。属性,通灵。说明,是附加了特殊条件的通灵之术。通灵物被赋予「一被攻击就增殖」之类的条件。一旦符合这一条件,自己就会发动增殖之术。随着攻击而不断增加的通灵物,永无止境的轮回袭击!。
    3)
    术名,泡沫乱波。属性,水遁。说明,召唤出来的巨蟹吐出大量的泡沫,周围瞬间变成一片白色!!猛烈地吹出的令人眼花缭乱的泡沫能够起到净化的作用,例如火焰、油之类,能够清除一切忍术带来的效果!!使对手之前制定出来的策略也随之失去作用。
    4)
    术名,替身术。属性, 基础。说明,忍者基础忍术之一 ,瞬间以植物等和自己的身体交换,用于躲避攻击。

    5,地狱道。原为一不知名宗教领袖,自来也遇到。那个在乱世中教导人们通过祈祷躲避灾难的人。死后制作为地狱道。
    1)

    术名,灵魂吞噬 。属性,六道之力。说明,抽取敌人灵魂从而杀死敌人,被抽取灵魂的人会被储存在召唤出的通灵物中。
    2)
    术名,轮回复生。属性,六道之力 。说明, 召唤出储存灵魂的通灵物,将受损或死亡的佩恩放入其中即可修复或复活。

    6,饿鬼道。原为一草隐忍者。自来也在酒馆中遇到。那个一直发牢骚、对身处的世态充满不满的人。死后制作为饿鬼道。

    1)
    术名,封术吸印。属性,六道之力。说明,逆向回转体内的查克拉循环,吸收自己面前对手的术,吸入的查克拉会在体内雾散,犹如陷入无底的沼泽,查克拉被尽数吸收。

    三、游戏中如何回答悄悄话

    有人发给你的话
    就/r
    会出现对方的名字,在输入内容就可以了。如果想直接发给别人(那人没有发悄悄话给你),就按
    /w
    +
    对方的游戏ID
    CF里的

    四、如何选择国外的服务器?

    1. 北美
    BudgetVM 洛杉矶 (半程 CN2), Linode Fremont (Telia 直连), globalfrag (半程 CN2), HostUS (半程 CN2), rfchost (C3 全程 CN2)
    2. 日本
    IDCF (电信直连), Ablenet (联通友好)
    3. 新加坡
    Aliyun (电信直连), Krypt (CN2), OneAsiaHost (PCCW)
    4. 台湾
    昨日小筑 (中华电信迷之网络,QoS 不高), HiNet (中华电信)
    5. 韩国
    Kdatacenter (SK Broadband), xhostfire (KT), 星光 (KT)

    相关阅读

    • pc端什么意思_pcdm10

    • 上犹win7问题
    • 内容导航: 海皇的三叉戟 小议PC上经典标志的起源 三叉戟是什么车的标志? 一个海皇三叉戟标志是什么车啊? TNT的海皇三叉戟怎样得 一、 海皇的三叉戟 小议PC上经典标志的起源 | 责
    • 内心崩溃不想活了_想一个人想得要崩溃了

    • 上犹win7问题
    • 内容导航: CDR程序崩溃,我想跟你“好好”谈谈 在CDR中做文件电脑会突然跳出内存不能为read这个的对话框,我想问一下有没有人可以解决?谢谢! 尝试重新启动计算机和应用程序 错
    • linux启动两个tomcat_tomcat部署两个项目

    • 上犹win7问题
    • 内容导航: 道tomcat面试题,最后两道难倒我了 小学一年级的一道作业题,难倒我了! 这道题难倒我了 java 、Tomcat问题,面试题吧,我的领导问过我,我不懂,怎么配置呢? 一、 道t
    • 可以触屏的笔记本电脑_如何让win7触控

    • 上犹win7问题
    • 内容导航: 让笔记本电脑秒变触控屏,只需一根小小的空气棒 怎样让电脑可以是触摸屏幕 如何让笔记本电脑触摸板变成手写板 如何让笔记本电脑触摸板变成手写板? 一、 让笔记本电
    • 邀请有现金奖励的app_奖金可以现金发放吗

    • 上犹win7问题
    • 内容导航: 《仙剑奇侠传七》征集活动开启,3万元现金奖励等你来拿 仙剑奇侠传七的小说章节 如何评价北软的《仙剑奇侠传七》? 仙剑奇侠传7有手游吗 仙剑奇侠传七手游什么时候上
    • win7蓝屏怎么解决_win7换win10蓝屏

    • 上犹win7问题
    • 内容导航: 近期win7大量蓝屏,你会选择升级win10吗? win7旗舰版有必要升级win10吗 win7升win10,已经升级一次了,第一次推送升级 失败在蓝屏然后无限重启,那么现在升级 应该要 win7升级
    • Windows7_win7的运行在哪里打开

    • 上犹win7问题
    • 内容导航: 在 Windows 中运行 Linux:WSL 2 使用入门 Windows subsystem for linux安装问题: 请问如何在VirtualBox 中的 win10 虚拟机上再安装 WSL 2? 如何实现在Windows上运行Linux程序,附示例代码 如何
    • a057_28057

    • 上犹win7问题
    • 内容导航: 网络安全知攻晓防:Struts2-057 漏洞环境搭建+案例 新手小白想学习渗透和网络安全,从哪里入手? 漏洞检测的几种方法 如何本地搭建struts2框架对s-045漏洞进行利用 一、 网络
    关键词不能为空
    极力推荐

    电脑蓝屏_电脑怎么了_win7问题_win10问题_设置问题_文件问题_上犹电脑信息网

    关于我们