Kubernetes 中使用 ElasticSearch 记录 MinIO 审计日志

MinIO Audit Logs in ElasticSearch in Kubernetes

无论您是在本地部署还是在云中,您都希望确保以统一的方式设置您的工具和流程。无论从哪里访问基础设施,您都希望确保用于与各种基础设施组件交互的工具与其他区域类似。

考虑到这一点,在部署您自己的 MinIO 对象存储基础设施时,深入了解您的存储基础设施至关重要。当您的存储基础设施中发生任何意外活动时,您希望能够快速以简洁的方式显示这些日志。本教程将全面概述如何将 MinIO 审计日志显示在 ElasticSearch 中,以便可以搜索它们。

设置配置

在 Kubernetes 集群上部署 MinIO 运算符

kubectl apply -k github.com/minio/operator/

我们需要部署具有启用 ElasticSearch WebHook 的租户

将您的用户和密码编码为 base64

# 将您的用户和密码编码为 base64

$ echo -n 'user:password' | base64

dXNlcjpwYXNzd29yZA==

创建秘密将位于其中的命名空间

kubectl create namespace tenant-lite


使用之前生成的 base64 用户/密码创建秘密。创建一个名为 secret.yaml 的文件并将内容保存到其中。

apiVersion: v1

kind: Secret

metadata

  name: mysecrettoken

type: Opaque

stringData

  token: "Basic dXNlcjpwYXNzd29yZA=="

应用秘密,如下所示

k apply -f secret.yaml

让我们配置 webhook,以便它可以从秘密中获取凭据

apiVersion: minio.min.io/v2

kind: Tenant

metadata

  name: storage

  namespace: minio-tenant

spec

  env

    - name: MINIO_AUDIT_WEBHOOK_ENABLE_TESTING

      value: "on"

    - name: MINIO_AUDIT_WEBHOOK_ENDPOINT_TESTING

      value: "http://<HOST>:9200/ajtest/ajtest2"

    - name: MINIO_AUDIT_WEBHOOK_AUTH_TOKEN_TESTING

      valueFrom

        secretKeyRef

          name: mysecrettoken

          key: token

          optional: false # 来自秘密的值

    - name: MINIO_ROOT_USER

      value: minio

    - name: MINIO_ROOT_PASSWORD

      value: minio123

使用 Kustomize 安装租户

kubectl apply -k github.com/minio/operator/examples/kustomization/tenant-lite

让我们使用 curl 获取索引以查看输出

curl -u <USER>:<PASSWORD> -X GET "<HOST>:9200/ajtest/_search?pretty" -H 'Content-Type: application/json'

您应该期望看到类似于以下的审计日志

[截断]

 

        "remotehost" : "10.244.4.2",

          "requestID" : "17329E78E6E41E8E",

          "userAgent" : "MinIO (linux; arm64) madmin-go/0.0.1",

          "requestQuery" : {

            "key" : "audit_webhook:storage-lite-log-search-api"

          },

          "requestHeader" : {

            "Authorization" : "AWS4-HMAC-SHA256 Credential=minio/20221220//s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=2ae3c3d8693619c4407723146091ae3b884827bc6dc8b9d12c9380f4a50db3b7",

            "User-Agent" : "MinIO (linux; arm64) madmin-go/0.0.1",

            "X-Amz-Content-Sha256" : "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",

            "X-Amz-Date" : "20221220T214413Z"

          },

          "responseHeader" : {

            "Accept-Ranges" : "bytes",

            "Content-Length" : "242",

            "Content-Security-Policy" : "block-all-mixed-content",

            "Content-Type" : "application/json",

            "Server" : "MinIO",

            "Strict-Transport-Security" : "max-age=31536000; includeSubDomains",

            "Vary" : "Origin,Accept-Encoding",

            "X-Amz-Request-Id" : "17329E78E6E41E8E",

            "X-Content-Type-Options" : "nosniff",

            "X-Xss-Protection" : "1; mode=block"

          }

        }

      },


[截断]


      {

        "_index" : "ajtest",

        "_type" : "ajtest2",

        "_id" : "ADB-MYUBuuSsBbj2iI88",

        "_score" : 1.0,

        "_source" : { }

      }

    ]

  }

}

输出将非常长,因此我们截断了输出以使其易于阅读。

最终思考

如您所见,快速注意到这些审计日志非常重要。事实上,您可以通过您的监控系统或直接通过 ElasticSearch 设置警报,以根据某些日志向您发送警报,以便您可以掌握您的 MinIO 存储基础设施。

更重要的是,您需要将云视为一种运营模型,而不是一个位置。这意味着,无论您在何处部署您的工具和基础设施,无论是混合云、私有云还是本地部署,您都希望确保将您的 MinIO 审计日志发送到日志处理器(不必是 ElasticSearch)。这样,无论您在何处部署 MinIO,都可以确保它在每个步骤中都得到监控。

如果您有任何关于如何将 MinIO 审计日志导入 ElasticSearch 的问题,请务必在 Slack 上联系我们!