将端到端安全性应用于云应用程序
本教程可能会发生成本。 使用 成本估算器根据您的预计使用量生成成本估算。
本教程将指导您使用 IBM Cloud® 目录中提供的关键安全服务,并说明如何将这些服务一起使用。 提供文件共享的应用程序将落实安全性概念。
要构建完备的应用程序体系结构,必须对潜在的安全风险以及如何防范此类威胁有清楚的了解。 应用程序数据是一种不能丢失、泄露或被盗的关键资源。 此外,静态和动态数据应通过加密技术进行保护。 加密静态数据可以防止信息泄露,就算信息丢失或被盗也不会外泄。 通过 HTTPS、SSL 和 TLS 等方法加密动态数据(例如,在因特网上传输的数据)可防止窃听和所谓的中间人攻击。
在许多应用程序中,另一个常见要求是针对用户对特定资源的访问权进行认证和授权。 这可能需要支持不同的认证方案:使用社交身份的客户和供应商、来自云托管目录的合作伙伴以及来自组织的身份提供者的员工。
目标
- 使用您自己的加密密钥对存储桶中的内容进行加密。
- 要求用户在访问应用程序前进行身份验证。
- 监控和审计云服务中与安全相关的API调用和其他操作。
本教程提供了一个样本应用程序,支持多组用户将文件上传到公共存储池,并通过可共享链接提供对这些文件的访问。 应用程序以 Node.js 编写,并作为容器部署到 IBM Cloud Kubernetes Service 或 Red Hat OpenShift on IBM Cloud。 它利用多种与安全相关的服务和功能来改善应用程序的安全状况。
本教程适用于在经典基础架构或VPC基础架构中运行的集群。
{: caption="*
- 用户连接到应用程序。
- 如果使用自定义域和 TLS 证书,证书由 Secrets Manager 管理并部署。
- App ID 可保护应用程序并将用户重定向到认证页面。 用户还可以进行注册。
- 应用程序通过存储在 Container Registry 中的映像在 Kubernetes 集群中运行。 系统会自动扫描此映像以查找漏洞。
- 已上传的文件存储在 Object Storage 中,随附的元数据存储在 IBM Cloudant 中。
- 对象存储区,App ID和 Secrets Manager 服务利用用户提供的密钥来加密数据。
- 应用程序管理活动由IBM Cloud Activity Tracker Event Routing记录,并路由到IBM Cloud Logs进行分析。
准备工作
本教程需要:
- IBM Cloud CLI,
- IBM Cloud Kubernetes Service 插件 (
kubernetes-service
), - Container Registry 插件 (
container-registry
),
- IBM Cloud Kubernetes Service 插件 (
kubectl
,用于与 Kubernetes 集群进行交互,git
以克隆源代码存储库。
您将在 解决方案教程入门 指南中找到有关为您的操作环境下载和安装这些工具的指示信息。
要避免安装这些工具,可以从 IBM Cloud 控制台使用 Cloud Shell。
创建服务
在下一部分中,您将创建应用程序所使用的服务。
决定应用程序的部署位置
您创建的所有资源的 位置 和 资源组 应与 Kubernetes 集群的 位置 和 资源组 匹配。
捕获用户和应用程序活动
必须配置 IBM Cloud Activity Tracker Event Routing 以将审计事件路由到IBM Cloud Logs目标实例。 如果当前未在账户中配置,则按 配置IBM日志目标 中所述路由审计事件。
在本教程结束时,您可查看通过完成本教程的各步骤生成的事件。
为应用程序创建集群
IBM Cloud Kubernetes Service 和 Red Hat OpenShift on IBM Cloud 提供用于在 Kubernetes 集群中运行的容器中部署高可用性应用程序的环境。
如果您有现有的 Kubernetes 集群,并希望在本教程中使用,请跳过本节。在本教程的其余部分,集群名称将引用为 secure-file-storage-cluster,只需替换为您的集群名称即可。
具有一个 (1) 专区、一个 (1) 工作程序节点和最小可用大小(类型模板)的最小集群足以满足本教程的需求。 要创建 IBM Cloud Kubernetes Service 群集,请按照 创建 VPC 群集 或 创建经典群集 的步骤进行操作。 要创建 Red Hat OpenShift on IBM Cloud 群集,请按照 创建 VPC 群集 或 创建经典群集 的步骤操作。
使用您自己的加密密钥
Key Protect 可帮助您跨 IBM Cloud 服务为应用程序供应加密密钥。Key Protect 和 IBM Cloud Object Storage 协同工作以保护静态数据。 在此部分中,您将为存储区创建一个根密钥。
- 创建 Key Protect的实例。
- 选择地点。
- 请将姓名设置为
secure-file-storage-kp
。 - 选择资源组,在其中创建服务实例,然后点击创建。
- 在 “密钥” 下,点击 “添加”按钮创建新的根密钥。 它将用于加密存储桶和 App ID 数据。
- 将“密钥类型”设置为根密钥。
- 请将姓名设置为
secure-file-storage-root-enckey
。 - 然后 添加密钥。
自带密钥 (BYOK) 可通过导入现有根密钥来提供。
设置用于用户文件的存储空间
文件共享应用程序会将文件保存到 Object Storage 存储桶中。 文件和用户之间的关系以元数据的形式存储在 IBM Cloudant 数据库中。 在此部分中,您将创建和配置这些服务。
用于保存内容的存储区
- 创建 Object Storage的实例。
- 选择 标准 套餐,并将 名称 设置为
secure-file-storage-cos
。 - 使用与之前服务相同的资源组,然后点击创建。
- 选择 标准 套餐,并将 名称 设置为
- 在服务凭证下,新建凭证。
- 请将姓名设置为
secure-file-storage-cos-acckey
。 - 对于 角色,请选择 写程序。
- 在 高级选项下,选中 包含 HMAC 凭证。 生成预签名的 URL 时需要此参数。
- 单击添加。
- 记下证书。 在稍后步骤中您需要这些凭证。
- 请将姓名设置为
- 单击导航侧边栏中的 端点:
- 将 弹性 设置为 区域,并将 位置 设置为目标位置:
- 对于经典基础设施:复制专用服务端点。 稍后在应用程序配置中将使用此端点。
- 对于VPC基础设施:复制 Direct 服务终端。 稍后在应用程序配置中将使用此端点。
在创建存储区之前,您将授予 Object Storage 服务实例对存储在 Key Protect 服务实例中的根密钥的访问权。
- 转至 IBM Cloud 控制台中的 管理> 访问权(IAM)> 授权。
- 单击创建按钮。
- 在源服务菜单中,选择 Cloud Object Storage。
- 切换到 基于所选属性的资源,选中 源服务实例,然后选择先前创建的 Object Storage 服务实例。
- 在目标服务菜单中,选择 Key Protect。
- 切换到 基于所选属性的资源,检查 实例标识,选择先前创建的 Key Protect 服务实例。
- 启用读取者角色。
- 单击授权按钮。
最后,创建存储区。
- 从 存储器下的 资源列表 访问 Object Storage 服务实例。
- 点击创建存储桶,然后自定义您的存储桶。
- 对 name 使用唯一值,例如
<your-initials>-secure-file-upload
。 - 将弹性设置为区域。
- 将位置设置为创建 Key Protect 服务实例的相同位置。
- 将存储类设置为标准。
- 对 name 使用唯一值,例如
- 在 服务集成 (可选)/加密下,启用 密钥管理
- 通过单击 使用现有实例,选择先前创建的 Key Protect 服务实例
- 选择 secure-file-storage-root-enckey 作为密钥,然后单击 关联密钥。
- 在“服务集成(可选)/监控和活动跟踪” 下,启用“活动跟踪” 以保存审计事件供分析。
- 单击复选标记后,应显示区域中 Activity Tracker 实例的服务信息。
- 现在,启用 “跟踪数据”事件,并选择 “读取和写入” 作为 “数据事件”。
- 单击创建存储区。
用户与其文件之间的数据库映射关系
IBM Cloudant 数据库将包含从应用程序上传的所有文件的元数据。
- 创建 IBM Cloudant 服务的实例。
- 选择 Cloudant 作为产品。
- 选择与先前服务相同的 多租户 环境和 区域。
- 请将姓名设置为
secure-file-storage-cloudant
。 - 使用先前服务所用的相同资源组。
- 将 认证方法 设置为 IAM。
- 单击创建。
- 返回到资源列表,找到新创建的服务并单击该服务。 注意:您需要等待状态变为“激活”
- 在服务凭证下,新建凭证。
- 请将姓名设置为
secure-file-storage-cloudant-acckey
。 - 对于 角色,请选择 管理者。
- 其余字段保留默认值。
- 单击添加。
- 展开新创建的凭证并记下值。 在稍后步骤中您需要这些凭证。
- 在 管理下,单击 启动仪表板。
- 点击创建数据库,创建一个名为
secure-file-storage-metadata
的非分区数据库。
认证用户
通过 App ID,可以保护资源并向应用程序添加认证。 作为本教程中未使用的替代方法,App ID 可以 集成 与 Kubernetes Service 以认证访问集群中部署的应用程序的用户。
在创建 App ID 服务之前,请授予服务对 Key Protect 服务的访问权。 您必须是您正在使用的 Key Protect 实例的帐户所有者或管理员。 您还必须至少具有 App ID 服务的“查看者”访问权。
- 转至 管理> 访问 IAM> 授权,然后单击 创建。
- 选择 App ID 服务作为源服务。
- 选择 Key Protect 作为目标服务。
- 切换到 基于所选属性的资源,检查 实例标识,选择先前创建的 Key Protect 服务实例。
- 在“服务”访问权下分配 读者 角色。
- 单击 授权 以确认授权。
现在,创建一个 App ID 服务的实例。
-
浏览至 App ID 服务创建页面。
- 使用用于先前服务的相同 位置。
- 选择累进层作为套餐。
- 将服务名称设置为
secure-file-storage-appid
。 - 选择与先前服务相同的 资源组。
- 从相应的下拉列表中选择已授权的 Key Protect 服务 名称 和 根密钥。
- 单击创建。
-
在认证设置选项卡的管理认证下,添加指向将用于应用程序的域的 Web 重定向 URL。 URL为
https://secure-file-storage.<Ingress subdomain>/redirect_uri
。 例如:- 具有入口子域:
mycluster-1234-d123456789.us-south.containers.appdomain.cloud
- URL 是
https://secure-file-storage.mycluster-1234-d123456789.us-south.containers.appdomain.cloud/redirect_uri
。
App ID 要求网络重定向 URL 为 https 或 http。 您可以在集群仪表板或通过
ibmcloud ks cluster get --cluster <cluster-name>
查看您的Ingress子域。 - 具有入口子域:
-
在运行时活动下认证设置下的同一选项卡中,允许在 IBM Cloud Activity Tracker Event Routing 中捕获事件。
-
创建服务凭证:
- 在服务凭证下,新建凭证。
- 请将姓名设置为
secure-file-storage-appid-acckey
。 - 对于 角色,请选择 管理者。
- 其余字段保留默认值。
- 单击添加。
您应该在 App ID 仪表板中定制使用的身份提供者以及登录和用户管理体验。 为简单起见,本教程使用的是缺省值。 对于生产环境,请考虑使用多因子认证 (MFA) 和高级密码规则。
部署应用程序
现在所有服务都已配置。 在此部分中,您要将教程应用程序部署到集群。 所有这些都可以在终端环境下完成。
获取代码
- 获取应用程序的代码:
git clone https://github.com/IBM-Cloud/secure-file-storage
- 进入 secure-file-storage/app目录:
cd secure-file-storage/app
填写配置设置和凭证
-
如果您尚未登录,请使用
ibmcloud login
或ibmcloud login --sso
进行交互式登录。 将 IBM Cloud 区域和资源组作为目标。ibmcloud target -r <region> -g <resource_group>
您可以在文档中的 常规 IBM Cloud CLI(ibmcloud)命令 主题中找到更多 CLI 命令。
-
在下一步中设置生成配置文件所需的环境变量。
- 首先通过替换
<YOUR_CLUSTER_NAME>
来设置集群名称:export MYCLUSTER=<YOUR_CLUSTER_NAME>
- 使用
ibmcloud ks
命令设置入口子域:export INGRESS_SUBDOMAIN=$(ibmcloud ks cluster get --cluster $MYCLUSTER --output json | jq -r 'try(.ingressHostname) // .ingress.hostname')
- 使用
ibmcloud ks
命令设置入口密钥:export INGRESS_SECRET=$(ibmcloud ks cluster get --cluster $MYCLUSTER --output json | jq -r 'try(.ingressSecretName) // .ingress.secretName')
- 将映像存储库名称设置为预先构建的映像
icr.io/solution-tutorials/tutorial-cloud-e2e-security
:export IMAGE_REPOSITORY=icr.io/solution-tutorials/tutorial-cloud-e2e-security
- 通过替换缺省值来设置其他环境变量:
export BASENAME=secure-file-storage
- 设置要使用的名称空间:
export TARGET_NAMESPACE=default
- (可选) 仅当您对映像使用的另一个 Kubernetes 名称空间而不是
default
名称空间和 IBM Cloud Container Registry 时,才设置$IMAGE_PULL_SECRET
环境变量。 这需要额外的 Kubernetes 配置(例如,在新的命名空间中创建容器注册表密钥 )。
- 首先通过替换
-
运行以下命令以生成
secure-file-storage.yaml
和secure-file-storage-ingress.yaml
。 它将使用刚刚与模板文件secure-file-storage.template.yaml
和secure-file-storage-ingress.template.yaml
一起配置的环境变量。./generate_yaml.sh
例如,假设应用程序部署在默认的 Kubernetes 命名空间中:
脚本使用的环境变量 变量 值 描述 $IMAGE_PULL_SECRET
使用提供的图像时不定义 用于访问注册表的私钥。 $IMAGE_REPOSITORY
icr.io/solution-tutorials/tutorial-cloud-e2e-security 或 icr.io/namespace/image-name 基于上一节中的URL、命名空间和图像名称的已构建图像的URL。 $TARGET_NAMESPACE
缺省值 将在其中推送应用程序的 Kubernetes 名称空间。 $INGRESS_SUBDOMAIN
secure-file-stora-123456.us-south.containers.appdomain.cloud 从集群概览页面或通过 ibmcloud ks cluster get --cluster <your-cluster-name>
获取。$INGRESS_SECRET
secure-file-stora-123456 使用 ibmcloud ks cluster get --cluster <your-cluster-name>
进行检索。$BASENAME
secure-file-storage 用于标识资源的前缀。 -
将
credentials.template.env
复制到credentials.env
:cp credentials.template.env credentials.env
-
编辑
credentials.env
,并使用以下值填写空白设置:- Object Storage 服务区域端点,存储区名称,为 Object Storage 服务创建的凭证,
- 安全文件存储云存储的证书,
- 以及 App ID的凭证。 变量
appid_redirect_uris
是上面讨论的重定向 URI 的逗号分隔列表。
使用 Cloud Shell时,可以使用
nano credentials.env
来编辑文件。
部署到集群
- 获取对集群的访问权,如 通过 CLI 连接 指示信息中所述,可从控制台概述页面中的 操作 ... 菜单访问。
ibmcloud ks cluster config --cluster $MYCLUSTER --admin
- 请检查 Ingress 私钥在目标名称空间中是否可用。 如果没有,您需要创建它。
如果 Ingress 私钥具有 CRN,请使用其名称和 CRN 在目标名称空间中创建私钥:ibmcloud ks ingress secret ls -c $MYCLUSTER
如果 Ingress 私钥没有 CRN,请使用以下命令在目标名称空间中重新创建该私钥:ibmcloud ks ingress secret create -c $MYCLUSTER -n $TARGET_NAMESPACE --cert-crn <crn-shown-in-the-output-above> --name <secret-name-shown-above>
kubectl get secret $INGRESS_SECRET --namespace=ibm-cert-store -oyaml | grep -v '^\s*namespace:\s'| kubectl apply --namespace=$TARGET_NAMESPACE -f -
- 创建应用程序用于获取服务凭证的私钥:
kubectl create secret generic secure-file-storage-credentials --from-env-file=credentials.env
- 部署应用程序。
kubectl apply -f secure-file-storage.yaml
- 为应用程序部署网络路由 ( ClusterIP 服务和 Ingress),以使其可从公共因特网访问。
kubectl apply -f secure-file-storage-ingress.yaml
测试应用程序
申请可通过 https://secure-file-storage.<your-cluster-ingress-subdomain>/
进行。
- 转至应用程序的主页。 这会将您重定向到 App ID 缺省登录页面。
- 使用有效电子邮件地址注册新帐户。
- 等待收件箱收到用于验证帐户的电子邮件。
- 登录。
- 选择要上传的文件。 单击上传。
- 对文件使用共享操作,以生成预签名 URL,此 URL 可以与要访问该文件的其他人共享。 链接设置为在 5 分钟后到期。
已认证的用户有自己的空间可存储文件。 虽然他们无法查看彼此的文件,但可以生成预签名 URL 来授予对特定文件的临时访问权。
您可以在 源代码库中找到有关该应用程序的更多详细信息。
查看安全性事件
既然已成功部署应用程序及其服务,现在可以查看该过程生成的安全性事件。 所有事件都在 IBM Cloud Logs 实例中集中提供。
- 从 Observability 面板,选择“云日志”选项卡,找到正在接收审计事件的IBM Cloud Logs实例,然后单击“打开面板”。
- 查看供应资源以及与资源交互时,发送到服务的所有日志。
可选:使用定制域并加密网络流量
默认情况下,可通过 containers.appdomain.cloud
的通用子域访问该应用程序。 但是,也可以将定制域用于部署的应用程序。 要持续支持 https,需要提供对加密网络流量的访问权(通过所需主机名的证书或通配符证书)。 可以使用各种服务组合来管理 DNS 名称和 TLS 证书,以便集成到 Kubernetes 应用程序中。 本教程将使用以下服务:
- 您自己的定制 DNS 域的 DNS 子域 secure-file-storage,由 IBM Cloud Internet Services (CIS) 服务管理。 为了简化本教程中的步骤,我们将使用 example.com 作为定制 DNS 域的名称,确保在所有步骤中替换为定制 DNS 域。
- 让我们加密 以生成 TLS 证书。
- IBM Cloud Secrets Manager 以与 Let 's Encrypt 集成,从而为 secure-file-storage.example.com 生成 TLS 证书并将其安全存储。
- Kubernetes 外部私钥操作程序,用于直接从 Secrets Manager 中提取私钥 TLS 证书
您还可以创建指向 DNS 提供程序上的应用程序 URI 的 CNAME,生成 TLS 证书并将其组件导入到 Secrets Manager中,而不是执行以下步骤。
提供 CIS 和 Secrets Manager 实例
- 需要 IBM Cloud Internet Services 实例。 使用现有实例或从此 目录条目 创建一个实例。 提供了一些定价套餐,包括免费试用。
新的 CIS 的供应过程将说明如何配置现有 DNS 注册器 (可能不在 IBM Cloud中) 以使用 CIS提供的域名服务器。 在 shell 窗口中导出定制域:
export MYDOMAIN=example.com
- 请填写 Secrets Manager。 使用现有实例或创建 创建 Secrets Manager 服务实例 中描述的新实例。 如果创建新实例,请将其命名为 secure-file-storage-sm。 您可以通过与先前创建的 Key Protect 实例集成来增强静态密钥的安全性。
使用 Kubernetes 集群 Ingress 子域 作为别名,在 CIS 实例中创建 DNS 条目。
- 打开 CIS 服务实例,可以在 资源列表 中找到该服务实例。
- 单击左侧的 可靠性 选项卡。
- 点击顶部的 DNS选项卡。
- 向下滚动到“DNS 记录”部分,然后单击 添加 以创建新记录:
- 类型: CNAME
- 名称: secure-file-storage
- 别名: 集群的 Ingress 子域。 可以通过执行以下命令在 shell 中获取正确的值:
echo $INGRESS_SUBDOMAIN
- 单击 添加 以添加新记录。
将 Secrets Manager 实例连接到 Let 's Encrypt。
-
需要 Let 's Encrypt ACME 帐户和关联的 .pem 文件。 使用现有一个或 创建一个:
- 安装 acme-account-build-tool。 创建 Let 's Encrypt ACME 帐户 包含指示信息和指向创建工具的链接。
- 运行 acme-account-create-tool 以专门为此安全文件存储器示例创建帐户。 下面是一个示例:
$ ./acme-account-creation-tool-darwin-amd64 -e YOUREMAIL -o secure-file-storage.example.com -d letsencrypt-prod INFO[2022-12-28T13:30:00-08:00] Registering a new account with the CA INFO[2022-12-28T13:30:00-08:00] Account information written to file : secure-file-storage.example.com-account-info.json INFO[2022-12-28T13:30:00-08:00] Private key written to file : secure-file-storage.example.com-private-key.pem Account Info { "email": "YOUREMAIL", "registration_uri": "https://acme-v02.api.letsencrypt.org/acme/acct/891897087", "registration_body": { "status": "valid", "contact": [ "mailto:YOUREMAIL" ] } }% $ ls secure-file-storage.example.com-account-info.json secure-file-storage.example.com-private-key.pem
-
将 Let 's Encrypt ACME 帐户连接到 Secrets Manager 实例。 有关更多详细信息,请参阅 在 UI 中添加认证中心配置:
- 打开 Secrets Manager 服务实例,可以在 资源列表 中找到该服务实例。
- 打开左侧的 密钥引擎,然后单击 公用证书。
- 在“认证中心”下,单击 添加。
- 名称: LetsEncrypt 和 认证中心: Let 's Encrypt。
- 在 选择文件 下,单击 添加文件,然后从选择器中选择 secure-file-storage.example.com-private-key.pem 或现有 .pem 文件。
- 单击添加。
-
将 CIS 作为 DNS 提供者连接:
- 在“DNS 提供程序”下,单击 添加。
- 名称 顺从下拉列表中选择 Cloud Internet Services。
- 单击下一步。
- 在 授权 选项卡中,选择 CIS 实例。
- 单击添加。
-
在 Secrets Manager 中订购证书
- 打开 Secrets Manager 服务,然后选择左侧的 密钥。
- 单击添加。
- 单击 公用证书,然后单击 下一步。
- 填写以下表单:
- 名称-输入您可以记住的名称。
- 描述-输入您选择的描述。
- 点击下一步。
- 在 认证中心 下,选择已配置的 Let 's Encrypt 认证中心引擎。
- 在 密钥算法下,选择首选算法,
- 捆绑软件证书-关闭
- 自动证书旋转-离开
- 在 DNS 提供者 下,选择已配置的 DNS 提供者实例
- 单击 选择域 将选中 使用通配符进行选择,并使域本身处于未选中状态,然后单击 完成。
- 单击下一步。
- 复审您的选择,然后单击 添加。
- 单击活动私钥的三个垂直点菜单,然后选择 详细信息 并从对话框复制 CRN。 导出 shell 中的值。 大致如下:
export PUBLIC_CERT_CRN=crn:v1:bluemix:public:secrets-manager:eu-de:a/abc123abc123abc123abc123:99999999-9999-9999-9999-999999999999:secret:aaaaaaaa-9999-9999-aaaa-123456781234
-
本教程利用服务授权来授予集群对 Secrets Manager 服务实例及其受管私钥的访问权。
- 转至 "IAM 授权" 页面,然后单击 创建 以添加新授权。
- 在 源 下,选择 Kubernetes Service,然后单击以选取 特定资源。 然后,对于 源服务实例,选择集群。
- 在 目标 下,选择 Secrets Manager,然后继续使用 特定资源 和 实例标识,选择 Secrets Manager 服务实例。
- 最后,在 角色 下,选择 管理器,然后通过单击 授权来授予授权。
-
验证是否已将 MYDOMAIN 和 PUBLIC CERT_CRN 的值导出到环境中:
echo MYDOMAIN $(printenv MYDOMAIN) echo PUBLIC_CERT_CRN $(printenv PUBLIC_CERT_CRN)
-
从新的 TLS 证书创建 Ingress 私钥。
ibmcloud ks ingress secret create --name secure-file-storage-certificate --cluster $MYCLUSTER --cert-crn $PUBLIC_CERT_CRN --namespace $TARGET_NAMESPACE
-
运行以下命令以生成配置文件的新副本。 它将使用您与模板文件
secure-file-storage.template.yaml
和secure-file-storage.template-ingress.yaml
一起配置的所有环境变量。 您可能希望首先保存当前版本:cp secure-file-storage.yaml /tmp cp secure-file-storage-ingress.yaml /tmp
./generate_yaml.sh
-
将配置更改应用到您的仪表盘:
kubectl apply -f secure-file-storage-ingress.yaml
-
切换回浏览器。 在 IBM Cloud 资源列表中,找到先前创建并配置的 App ID 服务,然后启动其管理仪表板。
- 单击左侧的 管理认证 和顶部的 认证设置 选项卡。
- 在添加网站重定向URL 表单中,将
https://secure-file-storage.example.com/redirect_uri
添加为另一个 URL。
- 现在,一切应该都已就位。 请访问您配置的自定义域名
https://secure-file-storage.<your custom domain>
,测试应用程序。
安全性:轮换服务凭证
为了维护安全性,应定期更换(轮换)服务凭证、密码和其他密钥。 许多安全策略要求每 90 天(或以类似频率)更改一次密码和凭证。 此外,如果员工离开团队或发生(可疑的)安全事件,那么应该立即更改访问特权。
在本教程中,服务被用于不同的目的,从存储文件和元数据到保护应用程序访问权限,再到管理容器镜像。 轮换服务凭证通常涉及以下操作:
- 重命名现有服务密钥,
- 使用先前使用的名称创建一组新的凭证,
- 替换现有 Kubernetes 私钥中的访问数据并应用更改,
- 以及在验证后,通过删除旧的服务密钥来停用旧凭证。
扩展教程
安全永无止境。 请尝试以下建议来增强应用程序的安全性。
- 将 IBM Key Protect 替换为 Hyper Protect Crypto Services,以提高加密密钥的安全性,增强对加密密钥的控制。
共享资源
如果要与其他人一起使用此解决方案教程的资源,那么可以共享所有组件或仅共享部分组件。IBM Cloud Identity and Access Management(IAM) 支持用户和服务标识的认证以及对云资源的访问控制。 要授予对资源的访问权,可以将 预定义访问角色 分配给用户,服务标识或 访问组。 可以创建访问组以将一组用户和服务标识组织到单个实体中。 这使您可以轻松地分配访问权。 您可以将单个策略分配给该组,而不用对每个用户或服务标识多次分配相同的访问权。 因此,您可以针对开发项目上的角色组织组,并调整安全性和项目管理。
您可以在此处找到有关各个服务及其可用 IAM 访问角色的信息:
- Kubernetes Service 或 Red Hat OpenShift on IBM Cloud。
- Container Registry
- App ID
- IBM Cloudant
- Object Storage
- IBM Cloud Activity Tracker Event Routing
- Key Protect
- Secrets Manager
要开始使用,请查看 访问权管理的最佳实践以及如何定义访问组。
除去资源
要除去资源,请删除部署的容器,然后删除供应的服务。
如果您与其他用户共享帐户,请始终确保仅删除您自己的资源。
-
删除已部署的网络配置和容器:
kubectl delete -f secure-file-storage-ingress.yaml
然后运行以下命令:
kubectl delete -f secure-file-storage.yaml
-
删除用于部署的私钥:
kubectl delete secret secure-file-storage-credentials
-
如果已利用 Secrets Manager,请 除去相关服务以进行服务授权。
-
在 IBM Cloud 资源列表中,找到为此教程创建的资源。 使用搜索框和 secure-file-storage 作为模式。 通过单击每个服务旁边的上下文菜单,并选择删除服务来删除每个服务。 请注意,Key Protect 服务只有在删除密钥后才能除去。 单击该服务实例以访问相关仪表板并删除密钥。
根据资源的不同,可能不会立即将其删除,但会保留 (缺省情况下为 7 天)。 您可以通过永久删除该资源或在保留期内将其复原来回收该资源。 请参阅本文档,以了解如何 使用资源回收。