IBM Cloud Docs
使用可信概要文件作为安全云环境的基础

使用可信概要文件作为安全云环境的基础

本教程可能会发生成本。 使用 成本估算器根据您的预计使用量生成成本估算。

IBM Cloud Identity and Access Management(IAM) 使您能够控制哪些用户可以查看,创建,使用和管理云环境中的资源。 您的环境可能是单个 IBM Cloud 帐户,多个帐户或具有多个帐户组和帐户的层次结构的 企业。 在使用帐户资源时,通常涉及用户和服务标识。 但是,有更多选项可用于管理访问权,分配特权和标识: 可信概要文件

在本教程中,您将了解可信概要文件,其用例以及如何利用这些概要文件来增强安全性。 可信概要文件可作为安全云环境的基础,作为安全云解决方案的构建块。 在本教程中,您将创建一个由应用程序用于执行管理任务的可信概要文件。

目标

  • 了解可信概要文件的用例
  • 创建可信概要文件并管理对云资源的访问权
  • 加深您对 Identity and Access Management (IAM)的了解

体系结构
解决方案体系结构

  • 将从 Container Registry 中提取应用程序的容器映像,并将其部署到 Kubernetes 集群的名称空间中。
  • 用户连接到应用程序。
  • 应用程序从 Kubernetes 环境中读取特殊访问令牌,并将其转换为可信概要文件的 IAM 访问令牌。
  • IAM 会将审计事件记录到IBM Cloud Activity Tracker Event Routing。

准备工作

本教程不需要任何安装,仅使用 IBM Cloud 控制台

必须配置 IBM Cloud Activity Tracker Event Routing 以将审计事件路由到IBM Cloud Logs目标实例。 如果当前未在账户中配置,则按照 配置IBM日志目标 中所述路由全局审计事件。

概述: 可信概要文件

与用户和服务标识类似,可信概要文件 是可以在 IAM 策略中授予访问权的身份。 可信概要文件的不同之处在于它们无法创建和拥有 API 密钥。 它们是特定帐户中的身份,充当某人或其他人员在该帐户中工作的“网关”,而无需 API 密钥。 他们可以采用该可信概要文件的身份。

您可以将某人或其他人员 (请参阅下文) 配置为可信概要文件设置的一部分。 所有常用选项都可用,即 IBM Cloud API,CLI,任何可用的 SDK,Terraform 或 IBM Cloud 控制台。

在控制台中,作为 IAM 类别的一部分,可信概要文件 有自己的部分。 在那里,您可以轻松地创建和管理它们。 以下截屏显示用于创建可信概要文件的对话框的第二步。 您可以 配置如何建立信任,哪个实体可以采用可信概要文件的身份。 它是下列其中一项或多项:

  • 联合用户
  • 计算资源
  • IBM Cloud 服务
  • 服务标识

可信概要文件实体类型
可信实体类型

可信概要文件用例

可信概要文件是 IBM Cloud中的身份。 他们可以是 IAM 访问组的成员,因此具有分配的访问特权。 与用户和服务标识类似,您还可以直接分配对可信概要文件的访问权。 区分功能是能够配置可信概要文件,以便特定身份或资源可以在其身份下执行操作。 这些身份和资源可能甚至位于其他帐户中。 因此,在较高级别上,使用可信概要文件的 用例是允许管理工作

  • 具有一组给定特权
  • 在特定身份下
  • 由配置为可信概要文件的一部分的一组属性标识的标识或资源。

以下场景是可信概要文件的此类用例,根据建立信任的方式不同而有所不同:

  • 将联合用户及其组成员资格映射到 IBM Cloud 特权: 配置可信概要文件以使联合身份提供者的用户具有其身份。 您可以定义要考虑的 IdP 和用户属性。
  • 从专用计算资源执行管理任务: 您可以配置可信概要文件以通过众所周知的计算资源建立信任。 此类资源可以是 Kubernetes 集群 (包括 Red Hat OpenShift on IBM Cloud) 中的特定 pod,也可以是虚拟私有云 (IBM Cloud VPC) 中的虚拟服务器实例 (VSI)。
  • 从知名服务标识执行管理任务: 允许来自相同或其他帐户的服务标识采用可信概要文件的身份。
  • 从特殊云服务实例部署云资源: 配置由其 CRN (云资源名称) 标识的 IBM Cloud 服务实例,以允许其采用可信概要文件的身份。 典型方案是 企业项目部署体系结构

建立信任

如概述中所述,对于如何建立信任,实体如何假定可信概要文件的身份,有不同的选项可用。

联合身份

利用公司或企业单点登录标识登录到 IBM Cloud 的用户称为联合身份。 单点登录 (SSO) 提供者充当身份提供者 (IdP)。 利用联合身份的一大优点是,用户不需要新凭证即可用于 IBM Cloud,并且可以继续使用其公司的 IdP 进行认证

联合身份可与可信概要文件和 IAM 访问组的动态规则 配合使用。

计算资源

在此情况下,将通过 计算资源的属性 建立信任,而不是通过身份提供者提供的用户属性。 您可以配置为仅信任在 Kubernetes 集群中运行的应用程序 (例如,特定名称空间和 pod),或者 VPC 中的虚拟服务器实例 (具有资源组,区域,子网和区域的特定值组合)。 该可信应用程序可以采用可信概要文件的身份,并使用分配的特权执行任务。

基于计算资源利用可信概要文件的好处是,此解决方案可避免使用 API 密钥。 因此,对于如何创建,存储和保护任何共享 API 密钥,如何分配和管理特权,没有任何要求和挑战。 假定可信概要文件身份的应用程序只需访存特殊计算资源令牌,然后将其转换为可信概要文件的常规 IAM 访问令牌。 此后,可以使用为认证提供的令牌来执行预期任务。

请参阅博客帖子 Developer Tricks: Simulate Cloud Security for Local App Development,以获取有关计算资源令牌的一些背景信息。 了解如何利用该令牌在本地开发和测试应用程序。

服务标识

另一种建立信任的方法是通过指定服务标识。 服务标识可以来自同一帐户或其他帐户。 由于服务标识是所有 IBM Cloud 帐户中的唯一身份,因此无需配置更多属性。 通过该设置,来自帐户 A 的服务标识现在可以请求在帐户 B 中采用可信概要文件的身份并执行 (管理) 任务。

云服务实例

与服务标识类似,可以指定 IBM Cloud 服务实例的云资源名称 (CRN),以便该实例是可信资源。 该服务实例可以位于同一帐户或其他帐户中。 现在,其唯一受支持的方案是 企业项目部署体系结构。 可以在一个帐户中集中管理具有可部署体系结构的项目 (作为服务实例)。 通过项目的 CRN 建立信任,它可以在同一或另一个企业帐户层次结构中的另一个帐户中采用可信概要文件的身份,然后使用其资源部署解决方案模式。

具有计算资源的可信概要文件

为了将理论付诸实践,您将授权一个容器化应用程序在IBM Cloud账户中执行任务。 该应用程序部署在 Kubernetes 集群中。 它充当将用于建立信任以使用可信概要文件的计算资源。 您可以在具有多个打开选项卡的 Web 浏览器中执行以下所有步骤。 确保按指示使浏览器选项卡保持打开状态。

出于安全原因,应用程序以只读方式运行。 它尝试收集已部署资源的列表。 您将向应用程序分配特权,以确定该应用程序可以读取哪些资源。 此外,您将以某种方式部署应用程序,以便只能从 Kubernetes 集群中 (而不是从公共因特网) 访问该应用程序。

博客帖子 将容器转至可信 Cloud Identity 讨论了同一场景。

Kubernetes 集群作为计算资源

Kubernetes Service 为在 集群中运行的容器中部署高可用性应用提供了环境。Kubernetes

如果您有本教程中要重复使用的现有集群,请跳过本节。在本教程的其余部分中,集群名称引用为 mycluster-tpcr,只需替换为您的集群名称即可。 请注意 1.21的最低必需 Kubernetes 版本。

具有一个 (1) 专区、一个 (1) 工作程序节点和最小可用大小(类型模板)的最小集群足以满足本教程的需求。 需要 最低 Kubernetes 版本的 1.21。 创建集群时,请确保选择相应的版本。

打开 Kubernetes 集群,然后单击 创建集群。 请参阅下面引用的文档,以获取基于集群类型的更多详细信息。 摘要:

  • 点击标准层群集
  • 对于 VPC 基础结构上的 Kubernetes,请参阅参考文档 创建 VPC 集群
    • 单击 创建 VPC:
      • 请输入VPC 的名称
      • 选择与集群相同的资源组。
      • 单击创建
    • 将 Public Gateway 连接到您创建的每个子网:
      • 浏览至 虚拟私有云
      • 单击先前创建的用于集群的 VPC。
      • 向下滚动到子网部分,然后单击子网。
      • Public Gateway 部分中,单击 已拆离 以将状态更改为 已连接
      • 单击浏览器的 后退 按钮以返回到 VPC 详细信息页面。
      • 重复上述三个步骤以将公共网关连接到每个子网。
  • 对于经典基础架构上的 Kubernetes,请参阅参考文档 创建经典集群
  • 选择资源组。
  • 取消选中除一个区域以外的所有区域。
  • 缩减为 1 每个专区的工作程序节点
  • 选择最小的 工作程序池类型
  • 对于 集群名称,请使用 mycluster-tpcr
  • 关闭本演示群集的所有安全选项,这些选项将在完成本教程后删除。 对于您创建的其他群组来说,仔细评估这些参数非常重要。

供应集群时,请使浏览器 (集群概述) 选项卡保持打开状态,以供稍后使用。 尽管如此,您仍可以继续执行后续步骤。

创建可信概要文件

  1. 在新的浏览器选项卡 (IAM 可信概要文件) 中,使用顶部导航 管理 > 访问 (IAM),然后使用左侧的 可信概要文件 以获取 可信概要文件 概述。 然后创建一个新的可信资料。
  2. 使用 TPwithCR 作为 名称,并输入简短的 描述,例如 Test trusted profile with compute resource。 然后,单击 继续
  3. 选择可信实体类型 选取 计算资源 下的第二个表单选项卡中,将显示一个对话框 创建信任关系。 在此,选择 Kubernetes 作为 计算服务类型
  4. 接下来,您可以在所有服务资源或特定服务资源之间进行决定。
    • 单击 特定资源,将显示下一个表单字段。
    • 输入或选择实例中,单击 添加资源。 然后,在 允许访问 字段中,选择 Kubernetes 集群 mycluster-tpcr
    • 然后,输入 tptest 作为 名称空间的值。 将 服务帐户 的字段保留为缺省值。
    • 点击 “继续” 完成操作。
  5. 接下来,单击 访问策略。 在服务列表中,选择 所有启用身份和访问权的服务,然后单击 下一步。 使用 所有资源,再次单击 下一步,然后选择 查看器,然后再次单击 下一步。 在 角色和操作部分中,针对 服务访问权 选择 读者,针对 平台访问权选择 查看者。 完成后,单击 下一步,最后单击 添加
  6. 查看右侧的 摘要,然后使用所显示的信任关系和列出的访问特权 创建 可信概要文件。 使浏览器选项卡保持打开状态,以便稍后使用。

利用访问组来分配访问权是最佳实践。 为了简单起见,我们选择通过直接访问策略分配只读访问权。 建议创建具有已分配特权的访问组,然后使可信概要文件成为其成员。

部署应用程序

在 Kubernetes 集群和可信概要文件就绪的情况下,现在是部署简单测试应用程序的时候了。 应用程序和配置的源代码位于 GitHub 存储库 trusted-profile-enterprise-security中。 您不需要它进行部署,但可能对它的工作方式感兴趣。

  1. 在浏览器选项卡 集群概述中,检查是否已完全部署集群。 在单节点配置中,入口状态可能会报告警告。 您可能需要刷新浏览器,检查其他复选标记是否为绿色。 如果是这种情况,请单击 Kubernetes 仪表板,并打开新的浏览器选项卡 (Kubernetes 仪表板)。

  2. 在左上角,找到名称空间选择器并切换到 所有名称空间

  3. 在右上方,单击 + 以创建新资源。 将以下内容粘贴到文本表单 根据输入创建中。

    apiVersion: v1
    kind: Namespace
    metadata:
      name: tptest
      labels:
        name: tptest
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: trustedprofile-test
      namespace: tptest
    spec:
      ports:
      - port: 8080
        targetPort: 8080
        protocol: TCP
      type: ClusterIP
      selector:
        app: tptest
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: trustedprofile-test-deployment
      namespace: tptest
    spec:
      selector:
        matchLabels:
          app: tptest
      replicas: 1
      template:
        metadata:
          labels:
            app: tptest
        spec:
          containers:
          - name: tptest-container
            image: icr.io/solution-tutorials/tutorial-trusted-profile-enterprise-security:v1.0.3
            imagePullPolicy: Always
            ports:
            - containerPort: 8080
            volumeMounts:
            - mountPath: /var/run/secrets/tokens
              name: sa-token
          serviceAccountName: default
          volumes:
          - name: sa-token
            projected:
              sources:
              - serviceAccountToken:
                  path: sa-token
                  expirationSeconds: 3600
                  audience: iam
    

    然后,单击 上载 以创建应用程序的资源。 它包含新的 Kubernetes 名称空间 tptest,部署和带有 pod 的服务。

    您可以找到 GitHub 上上述 YAML 配置的源代码

  4. 在左侧导航列中,单击 部署 以检查新部署 trustedprofile-test-deployment 的状态。 接下来,单击同一导航列中的 Pod,并注意到名称以 trustedprofile-test-deployment 开头的 pod。 显示状态绿色后,移至下一个部分。

测试可信概要文件

使用可信概要文件和 Kubernetes 集群以及正在运行的应用程序,现在是进行测试的时候了。 首先打开一个基于浏览器的 shell 以运行命令,打开一个容器日志选项卡,再打开另一个IBM Cloud Logs日志选项卡。

  1. 在具有 Pod 的当前活动选项卡 Kubernetes 仪表板 中,单击右侧有三个点的菜单,然后 右键单击 该菜单中的 执行。 选择在新选项卡 (容器 shell) 中打开链接。 它为正在运行的容器打开一个 shell。 仍在浏览器选项卡 Kubernetes 仪表板中,再次单击三个点菜单,然后左键单击 日志。 在新的三个点菜单中,启用 自动刷新

    最后,打开 IBM Cloud Logs服务选项卡,选择云日志选项卡并单击接收审计事件的实例名称。

  2. 在浏览器选项卡 container shell中,在 shell 中运行以下命令以测试应用程序:

    curl -s localhost:8080
    

    以上内容应返回具有 codeversionresult 的 JSON 对象。 您应该会在包含日志的 Kubernetes 仪表板 选项卡中看到一些新的日志活动。 接下来,在 容器 shell 选项卡中,运行以下命令:

    curl -s localhost:8080/api/listresources_crn | jq
    

    此命令调用应用程序,尝试检索帐户中的资源列表,但未提供可信概要文件名称。 结果应该是带有错误消息的格式化 JSON 对象。

  3. 重复上述命令,但现在指定要使用的可信概要文件:

    curl -s localhost:8080/api/listresources_crn?tpname=TPwithCR | jq
    

    现在,结果应该是格式化的 JSON 对象,其中包含有关帐户中资源的信息。 对于可读性,仅返回资源 CRN。 使用 localhost:8080/api/listresources 以获取完整对象详细信息。 您可能还想要尝试另一个不存在的可信概要文件名称,并检查错误消息。

    调用时,应用程序首先读取计算资源的令牌。 然后,对于指定的可信概要文件,它会 将令牌转换为 IAM 访问令牌。 最后,它调用 IBM Cloud 资源控制器 API 以检索有关服务实例的信息。 结果取决于可信概要文件的已配置特权。 如果感兴趣,请检查 应用程序源代码

  4. 切换到IBM Cloud Logs浏览器选项卡,使用底部的搜索框查找“配置文件”一词。 这必须是配置为审计事件目标的实例。 It should return at least one line with IAM Identity Service: login.computeresource-token TPwithCR. Open the info panel to expand the record to examine details, look for the 发起人 section. 它列出了用于请求的可信概要文件以及有关计算资源的信息。 authName 应与Kubernetes面板浏览器选项卡中的部署相匹配。

    IBM Cloud Logs showing details of the trusted profile request
    Details in the activity log

  5. 现在,请访问浏览器选项卡 Kubernetes 仪表板 并检查容器日志。 应用程序将打印其用于认证以列出资源的 JWT 访问令牌 上的详细信息。 检查各个键/值对,包括两次 sub (主题)。 它们与可信概要文件和计算资源相关。

  6. 切换到具有 TPwithCR 配置的浏览器选项卡 IAM 可信概要文件。 在表单中,单击 访问权 选项卡,然后在 所有启用身份和访问权的服务的三个点菜单上,选择 编辑。 现在,它应显示 编辑 TPwithCR的策略。 单击 资源编辑,然后选择 特定资源。 选取 区域 作为 属性类型,例如 法兰克福。 通过按 保存来完成。

  7. 返回到浏览器选项卡 container shell,然后再次运行以下命令以列出资源:

    curl -s localhost:8080/api/listresources?tpname=TPwithCR | jq
    

    根据您在帐户中部署其他资源的位置,结果可能与上面的结果不同。 重新查看IBM Cloud Logs日志Kubernetes仪表板浏览器选项卡,查看新的日志活动。

  8. 您可能希望返回到步骤 6 并再次编辑访问策略,然后使用步骤 7 重新测试。 编辑访问策略的一些想法是添加区域或限制为特定服务,而不是 所有启用身份和访问权的服务

除去资源

使用可信概要文件和计算资源完成上述方案的测试后,可以通过执行以下步骤来除去这些资源:

  1. 要删除 Kubernetes 集群,请单击浏览器选项卡 集群概述右上角的 操作,然后单击 删除集群
  2. 在带有受信任配置文件 TPwithCR 的选项卡 IAM 受信任配置文件中,单击 ActionsRemove 删除受信任配置文件。

根据资源的不同,可能不会立即将其删除,但会保留 (缺省情况下为 7 天)。 您可以通过永久删除该资源或在保留期内将其复原来回收该资源。 请参阅本文档,以了解如何 使用资源回收