机密文件指南
编辑机密文件指南编辑
本指南提供了一些分步示例和最佳实践,说明了如何在主机上直接部署机密文件或通过 Kubernetes 机密引擎部署机密文件。
文件系统上的机密编辑
可以将机密文件作为纯文本文件直接配置在文件系统上,并通过 Elastic Agent 进行引用或传递。
我们建议采取以下步骤来提高安全性。
文件权限编辑
文件权限不应允许全局读取权限。
在 MacOS 和 Linux 上,您可以分别使用 chown
和 chmod
命令设置文件所有权和文件权限。Fleet Server 在 MacOS 和 Linux 上以 root
用户身份运行,因此,假设有一个名为 mySecret
的文件,您可以使用以下命令对其进行更改:
sudo chown root:root mySecret # set the user:group to root sudo chmod 0600 mySecret # set only the read/write permission flags for the user, clear group and global permissions.
在 Windows 上,您可以使用 icacls
更改与文件关联的 ACL 列表:
Write-Output -NoNewline SECRET > mySecret # Create the file mySecret with the contents SECRET icacls .\mySecret /inheritance:d # Remove inherited permissions from file icacls .\mySecret /remove:g BUILTIN\Administrators # Remove Administrators group permissions icacls .\mySecret /remove:g $env:UserName # Remove current user's permissions
临时文件系统编辑
您可以使用临时文件系统(在 RAM 中)来保存机密文件,以提高安全性。这类文件系统通常不包含在备份中,并且会在主机重置时被清除。如果使用此类文件系统,则需要在每次重置时重新配置文件系统和机密文件。
在 Linux 上,您可以将 mount
与 tmpfs
文件系统一起使用,以在 RAM 中创建临时文件系统:
mount -o size=1G -t tmpfs none /mnt/fleet-server-secrets
在 MacOS 上,您可以组合使用 diskutil
和 hdiutil
来创建 RAM 磁盘:
diskutil erasevolume HFS+ 'RAM Disk' `hdiutil attach -nobrowse -nomount ram://2097152`
Windows 系统不提供创建 RAM 磁盘的内置选项,但可以使用多个第三方程序。
示例编辑
下面是在 Linux 系统上配置服务令牌的分步指南:
sudo mkdir -p /mnt/fleet-server-secrets sudo mount -o size=1G -t tmpfs none /mnt/fleet-server-secrets echo -n MY-SERVICE-TOKEN > /mnt/fleet-server-secrets/service-token sudo chown root:root /mnt/fleet-server-secrets/service-token sudo chmod 0600 /mnt/fleet-server-secrets/service-token
-n
标志与 echo
一起使用,以防止在机密末尾附加换行符。请确保机密文件不包含尾随换行符。
容器中的机密编辑
当您在容器中直接使用机密文件而不使用 Kubernetes 或其他机密管理解决方案时,可以通过挂载文件或目录将文件传递到容器中。以与 文件系统上的机密 中相同的方式配置文件,并以只读模式挂载。例如,当使用 Docker 时。
如果您使用的是 Elastic Agent 镜像:
docker run \ -v /path/to/creds:/creds:ro \ -e FLEET_SERVER_CERT_KEY_PASSPHRASE=/creds/passphrase \ -e FLEET_SERVER_SERVICE_TOKEN_PATH=/creds/service-token \ --rm docker.elastic.co/beats/elastic-agent
Kubernetes 中的机密编辑
Kubernetes 有一个 机密管理引擎,可用于将机密文件配置到 Pod。
例如,您可以使用以下命令创建密码机密:
kubectl create secret generic fleet-server-key-passphrase \ --from-literal=value=PASSPHRASE
并使用以下命令创建服务令牌机密:
kubectl create secret generic fleet-server-service-token \ --from-literal=value=SERVICE-TOKEN
然后将其包含在 Pod 规范中,例如,当您在 Elastic Agent 下运行 Fleet Server 时:
spec: volumes: - name: key-passphrase secret: secretName: fleet-server-key-passphrase - name: service-token secret: secretName: fleet-server-service-token containers: - name: fleet-server image: docker.elastic.co/beats/elastic-agent volumeMounts: - name: key-passphrase mountPath: /var/secrets/passphrase - name: service-token mountPath: /var/secrets/service-token env: - name: FLEET_SERVER_CERT_KEY_PASSPHRASE value: /var/secrets/passphrase/value - name: FLEET_SERVER_SERVICE_TOKEN_PATH value: /var/secrets/service-token/value
Elastic Agent Kubernetes 机密提供程序编辑
当您在 Kubernetes 中的 Elastic Agent 下运行 Fleet Server 时,可以使用 Elastic Agent 的 Kubernetes 机密提供程序 将 Kubernetes 机密直接插入到 Fleet Server 的配置中。请注意,由于 Fleet Server 的引导方式,只有 APM 机密(API 密钥或机密令牌)可以使用此提供程序指定。