KSPM 入门
编辑KSPM 入门编辑
本页面介绍如何配置 Kubernetes 安全态势管理 (KSPM) 集成。
安装说明取决于您是在 EKS 上安装还是在非托管集群上安装。
-
在 EKS 托管集群上安装
-
在非托管集群上安装
为 Amazon EKS 集群设置 KSPM编辑
命名您的集成并选择 Kubernetes 部署类型编辑
- 转到 仪表盘 → 云安全态势.
- 点击 添加 KSPM 集成.
- 阅读集成描述以了解其工作原理。然后,点击 添加 Kubernetes 安全态势管理.
- 命名您的集成。使用与您要监控的集群(s)的用途或团队匹配的名称,例如
IT-dev-k8s-clusters
。 - 从 Kubernetes 部署 菜单中选择 EKS。AWS 凭据的新部分将出现。
对 AWS 进行身份验证编辑
提供 AWS 凭据的方式有多种
无论您使用哪种方式,都需要授予以下权限
ecr:GetRegistryPolicy, eks:ListTagsForResource elasticloadbalancing:DescribeTags ecr-public:DescribeRegistries ecr:DescribeRegistry elasticloadbalancing:DescribeLoadBalancerPolicyTypes ecr:ListImages ecr-public:GetRepositoryPolicy elasticloadbalancing:DescribeLoadBalancerAttributes elasticloadbalancing:DescribeLoadBalancers ecr-public:DescribeRepositories eks:DescribeNodegroup ecr:DescribeImages elasticloadbalancing:DescribeLoadBalancerPolicies ecr:DescribeRepositories eks:DescribeCluster eks:ListClusters elasticloadbalancing:DescribeInstanceHealth ecr:GetRepositoryPolicy
如果您使用 AWS 可视化编辑器创建和修改 IAM 策略,则可以复制并粘贴此 IAM 策略 JSON 对象
点击查看 JSON 对象
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ecr:GetRegistryPolicy", "eks:ListTagsForResource", "elasticloadbalancing:DescribeTags", "ecr-public:DescribeRegistries", "ecr:DescribeRegistry", "elasticloadbalancing:DescribeLoadBalancerPolicyTypes", "ecr:ListImages", "ecr-public:GetRepositoryPolicy", "elasticloadbalancing:DescribeLoadBalancerAttributes", "elasticloadbalancing:DescribeLoadBalancers", "ecr-public:DescribeRepositories", "eks:DescribeNodegroup", "ecr:DescribeImages", "elasticloadbalancing:DescribeLoadBalancerPolicies", "ecr:DescribeRepositories", "eks:DescribeCluster", "eks:ListClusters", "elasticloadbalancing:DescribeInstanceHealth", "ecr:GetRepositoryPolicy" ], "Resource": "*" } ] }
选项 1 - [推荐] 使用 Kubernetes 服务帐户来假定 IAM 角色编辑
遵循 AWS 的 EKS 最佳实践 文档以使用 IAM 角色到 Kubernetes 服务帐户 (IRSA) 功能来获取临时凭据和范围权限。
在设置期间,请不要在“设置访问”部分填写任何选项。而是点击 保存并继续.
选项 2 - 使用默认实例角色编辑
遵循 AWS 的 Amazon EC2 的 IAM 角色 文档以使用 IAM 控制台创建 IAM 角色,该角色会自动生成实例配置文件。
在设置期间,请不要在“设置访问”部分填写任何选项。点击 保存并继续.
选项 3 - 直接使用访问密钥编辑
访问密钥是 IAM 用户或 AWS 帐户根用户的长期凭据。要使用访问密钥作为凭据,您必须提供 Access key ID
和 Secret Access Key
。
有关更多详细信息,请参阅 AWS 的 访问密钥和密钥访问密钥 文档。
创建 IAM 用户时,您必须选择“程序化访问”。
选项 4 - 使用临时安全凭据编辑
您可以在 AWS 中配置临时安全凭据,使其持续指定时间。它们包括访问密钥 ID、密钥访问密钥和安全令牌,该令牌通常使用 GetSessionToken
找到。
由于临时安全凭据是短期凭据,因此一旦它们过期,您将需要生成新的凭据并手动更新集成的配置才能继续收集云态势数据。在凭据过期之前更新凭据以避免数据丢失。
启用了多因素身份验证 (MFA) 的 IAM 用户在调用 GetSessionToken
时需要提交 MFA 代码。有关更多详细信息,请参阅 AWS 的 临时安全凭据 文档。
您可以使用 AWS CLI 生成临时凭据。例如,如果您启用了 MFA,则可以使用以下命令
`sts get-session-token --serial-number arn:aws:iam::1234:mfa/[email protected] --duration-seconds 129600 --token-code 123456`
此命令的输出包括以下字段,您应该在配置 KSPM 集成时提供这些字段
-
Access key ID
: 访问密钥的第一部分。 -
Secret Access Key
: 访问密钥的第二部分。 -
Session Token
: 使用临时安全凭据时所需的令牌。
选项 5 - 使用共享凭据文件编辑
如果您对不同的工具或应用程序使用不同的 AWS 凭据,则可以使用配置文件在同一个配置文件中定义多个访问密钥。有关更多详细信息,请参阅 AWS 的 共享凭据文件 文档。
不要将 Access key ID
和 Secret Access Key
提供给集成,而是提供在共享凭据文件中查找访问密钥所需的信息
-
Credential Profile Name
: 共享凭据文件中的配置文件名称。 -
Shared Credential File
: 共享凭据文件的目录。
如果您没有为所有配置字段提供值,则集成将使用以下默认值
- 如果未提供
Access key ID
、Secret Access Key
和ARN Role
,则集成将检查Credential Profile Name
。 - 如果没有
Credential Profile Name
,则将使用默认配置文件。 - 如果
Shared Credential File
为空,则将使用默认目录。 - 对于 Linux 或 Unix,共享凭据文件位于
~/.aws/credentials
。
选项 6 - 使用 IAM 角色 Amazon 资源名称 (ARN)编辑
IAM 角色 Amazon 资源名称 (ARN) 是您可以在 AWS 帐户中创建的 IAM 标识。您可以定义角色的权限。角色没有标准的长期凭据,例如密码或访问密钥。相反,当您假定一个角色时,它会为您 的会话提供临时安全凭据。IAM 角色的 ARN 可用于指定要用于生成临时凭据的 AWS IAM 角色。
有关更多详细信息,请参阅 AWS 的 AssumeRole API 文档。遵循 AWS 的说明以 创建 IAM 用户,并使用上面的 JSON 权限策略定义 IAM 角色的权限。
要使用 IAM 角色的 ARN,您需要提供 凭据配置文件 或 访问密钥 以及 ARN role
。 ARN Role
值指定要用于生成临时凭据的 AWS IAM 角色。
如果存在 ARN Role
,则集成将检查是否提供了 Access key ID
和 Secret Access Key
。如果没有,则该包将检查 Credential Profile Name
。如果不存在 Credential Profile Name
,则将使用默认凭据配置文件。
完成为 EKS 配置 KSPM 集成编辑
提供 AWS 凭据后,完成 KSPM 集成的配置
- 如果您要监控尚未注册到 Fleet 的 Kubernetes 集群,请在“在何处添加此集成”下选择 新主机。
- 命名 Elastic Agent 策略。使用与您要监控的集群(s)的用途或团队匹配的名称。例如,
IT-dev-k8s-clusters
。 - 点击 保存并继续,然后点击 将代理添加到您的主机。 添加代理 向导将出现,并提供一个带有预填充配置信息的 DaemonSet 清单文件
.yaml
文件,例如Fleet ID
和Fleet URL
。
将 KSPM 集成部署到 EKS 集群编辑
添加代理 向导可帮助您将 KSPM 集成部署到您要监控的 Kubernetes 集群。对于每个集群
- 下载清单文件并对其配置进行必要的修改以满足您的环境需求。
- 使用
kubectl apply -f
命令应用清单文件。例如:kubectl apply -f elastic-agent-managed-kubernetes.yaml
几分钟后,将出现一条确认 Elastic Agent 注册的消息,然后是一条确认数据正在传入的消息。然后,您可以点击 查看资产 以查看新收集的配置信息在 Kibana 中的显示位置,包括 发现页面 和 云安全态势仪表盘。
为非托管 Kubernetes 集群设置 KSPM编辑
按照以下步骤将 KSPM 集成部署到非托管集群。请注意,非托管部署不需要凭据。
配置 KSPM 集成编辑
要在非托管集群上安装集成,请执行以下操作:
- 转到 仪表盘 → 云安全态势.
- 点击 添加 KSPM 集成.
- 阅读集成描述以了解其工作原理。然后,点击 添加 Kubernetes 安全态势管理.
- 命名您的集成。使用与您要监控的集群(s)的用途或团队匹配的名称,例如
IT-dev-k8s-clusters
。 - 从 Kubernetes 部署 菜单中选择 非托管 Kubernetes。
- 如果您想监控尚未加入 Fleet 的 Kubernetes 集群,请在选择 Elastic Agent 策略时选择 新主机。
- 选择要添加集成的 Elastic Agent 策略。
- 点击 保存并继续,然后点击 将代理添加到您的主机。 添加代理 向导将出现,并提供一个带有预填充配置信息的 DaemonSet 清单文件
.yaml
文件,例如Fleet ID
和Fleet URL
。
将 KSPM 集成部署到非托管集群编辑
“添加代理”向导可帮助您在要监控的 Kubernetes 集群上部署 KSPM 集成。为此,请对每个集群执行以下操作:
- 下载清单文件并对其配置进行必要的修改以满足您的环境需求。
- 使用
kubectl apply -f
命令应用清单文件。例如:kubectl apply -f elastic-agent-managed-kubernetes.yaml
几分钟后,将出现一条确认 Elastic Agent 注册的消息,然后是一条确认数据正在传入的消息。然后,您可以点击 查看资产 以查看新收集的配置信息在 Kibana 中的显示位置,包括 发现页面 和 云安全态势仪表盘。
在 ECK 部署中设置 KSPM编辑
要在 ECK 部署上运行 KSPM,您必须编辑 Elastic Agent CRD 和 Elastic Agent 集群角色 .yaml
文件。
修补 Elastic Agent
将 volumes
和 volumeMounts
添加到 podTemplate
中
podTemplate: spec: containers: - name: agent volumeMounts: - name: proc mountPath: /hostfs/proc readOnly: true - name: cgroup mountPath: /hostfs/sys/fs/cgroup readOnly: true - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true - name: varlog mountPath: /var/log readOnly: true - name: etc-full mountPath: /hostfs/etc readOnly: true - name: var-lib mountPath: /hostfs/var/lib readOnly: true - name: etc-mid mountPath: /etc/machine-id readOnly: true volumes: - name: proc hostPath: path: /proc - name: cgroup hostPath: path: /sys/fs/cgroup - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers - name: varlog hostPath: path: /var/log - name: etc-full hostPath: path: /etc - name: var-lib hostPath: path: /var/lib # Mount /etc/machine-id from the host to determine host ID # Needed for Elastic Security integration - name: etc-mid hostPath: path: /etc/machine-id type: File
修补 RBAC
确保 elastic-agent
服务帐户具有以下角色和集群角色
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: namespace: default name: elastic-agent subjects: - kind: ServiceAccount name: elastic-agent namespace: default roleRef: kind: Role name: elastic-agent apiGroup: rbac.authorization.k8s.io --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: elastic-agent labels: k8s-app: elastic-agent rules: - apiGroups: [""] resources: - nodes - namespaces - events - pods - services - configmaps - serviceaccounts - persistentvolumes - persistentvolumeclaims verbs: ["get", "list", "watch"] - apiGroups: ["extensions"] resources: - replicasets verbs: ["get", "list", "watch"] - apiGroups: ["apps"] resources: - statefulsets - deployments - replicasets - daemonsets verbs: ["get", "list", "watch"] - apiGroups: - "" resources: - nodes/stats verbs: - get - apiGroups: [ "batch" ] resources: - jobs - cronjobs verbs: [ "get", "list", "watch" ] - nonResourceURLs: - "/metrics" verbs: - get - apiGroups: ["rbac.authorization.k8s.io"] resources: - clusterrolebindings - clusterroles - rolebindings - roles verbs: ["get", "list", "watch"] - apiGroups: ["policy"] resources: - podsecuritypolicies verbs: ["get", "list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: elastic-agent namespace: default labels: k8s-app: elastic-agent rules: - apiGroups: - coordination.k8s.io resources: - leases verbs: ["get", "create", "update"]