帐户之间的资源共享
本教程可能会发生成本。 使用“成本估算器”根据您的预计使用量生成成本估算。
本教程将指导您了解有关如何跨帐户共享基于云的资源的不同选项。
在因特网上提供不可计数的服务。 您可能拥有许多服务提供者的帐户。 要使用这些服务,通常使用用户身份 (标识) 和密码的组合或通过提供某种形式的 API 密钥或访问令牌 (通常与其他级别 (因子) 的认证组合) 来访问这些服务。 使用基于微服务的架构构建云原生应用程序时,各个组件可以使用相同的技术相互访问以进行协作。 理想情况下,可以自动进行设置,并且将访问范围限定为所需的最低级别以提高安全性。
通过关注云服务,可以将其称为 连接器,服务绑定或 服务到服务授权。 这种自动化服务绑定提供更紧密的集成,通常将认证和授权组合到单个自动化设置中。 通常,服务绑定要求服务位于同一云帐户中。 该分组是合理的,可简化开发和操作。 但有时,组织需求,特别是与安全和合规相关的需求可能意味着将某些服务分开,并将其保存在中央帐户中。 因此,应用程序必须跨帐户共享资源。 可以在 IBM Cloud Enterprise 环境 中的帐户之间进行共享,也可以在没有正式企业组织的情况下进行共享。
本教程将指导您了解跨帐户共享云资源的典型用例和优点。 您将学习如何实施这些常见的共享方案,可以手动实现,也可以使用 Terraform 实现完全自动化。
目标
- 了解跨帐户共享资源的优势
- 了解跨帐户共享资源的不同方法
资源共享概述
查找多个应用程序访问并使用同一资源或其部分并不罕见。 一个示例是,应用程序和计算环境必须生活在同一公司网络中。 另一种方案是在中央存储器中收集安全日志。 在微服务架构中,它要求我们配置服务以访问和使用外部资源。 反过来,共享资源必须授权访问,并且它们之间的网络配置为支持此类协作,但不能更多。
资源共享的一些典型用例包括:
- 安全相关基础架构的集中管理。 从专用帐户监视安全性,并将安全性日志聚集到单个位置。 管理中央密钥管理系统 (KMS) 中的所有加密密钥。
- 网络地址和子网的协调。 应用程序和计算环境需要适合同一网络,并且需要共享地址范围和域名。
- 集中管理用于灾难恢复的资源,包括 IBM Cloud Backup for Classic 之类的备份服务。 应用程序及其服务可能是为了实现高可用性而设计的,但在最坏的情况下,可能会提供更多集中组织的资源。 这包括保存全球可用的多个资源副本,例如,存储在 复制的 Object Storage 存储区 中。
- 在可能的情况下,通过共享更昂贵的服务来控制成本。 并非每个开发项目都需要将所有服务部署为专用实例。 通常,它足以在帐户内或跨帐户共享服务实例。 即使对于生产环境,也可以根据其成本/价值因素和技术可行性来共享服务实例。 这可以通过以下方式进行组织: 通过利用 专用目录 来限制帐户中的可用服务,然后集中提供受限服务的实例。
- 在公司级别或针对业务单位集中管理资源。 这可能是标记或集中管理的模板,基本映像 (虚拟机,容器) 等所需的资产。 同样,专用目录和 Container Registry 是典型服务。
- 使稀缺资源可供更多用户使用。 有时,资源类型仅在有限数量中可用。 通过共享,更多的应用程序可以从中受益。 这可能需要速率限制。
共享安全资源
通常,安全性是在公司级别进行管理,并制定公司范围的规则。 因此,执法也是集中管理的。 对于迁移到云环境的工作负载,情况仍然如此。 资源共享是集中管理安全以及评估和执行合规性的基础。
上图显示了以下场景:
- 帐户 A 和 帐户 B 中的 Object Storage 和 Databases for MongoDB 的实例使用在 Key Protect的 主帐户 中管理的加密密钥。
- 主帐户 中的 Security and Compliance Center 用于管理所有三个帐户中的资源 (请参阅上面的黑色行)。
- 账户 A 和账户 B 中的IBM Cloud Activity Tracker Event Routing实例会将审计日志指向主账户中的IBM Cloud Logs(见上文蓝线)。 IBM Cloud Logs被配置为持久化审计日志,以满足分析和企业要求。
可以在 IBM Cloud Enterprise 环境 中的帐户之间进行共享,也可以在没有正式企业组织的情况下进行共享。
加密密钥管理
在几乎所有环境中,都会加密存储数据。 缺省情况下,加密由提供者管理,这意味着加密密钥由云提供者提供和维护。 为了提高安全性,客户可以通过使用密钥管理服务 (KMS) 来使用自己的密钥。 在 IBM Cloud中,KMS 可以与使用加密密钥的服务位于同一帐户或其他帐户中。 这允许集中管理所有公司帐户的加密密钥。 这样,可以在需要时监视使用情况并使加密密钥失效。
Key Protect 和 Hyper Protect Crypto Services 支持此部署模式。 您可以配置对整个实例的访问权,或者为了增强安全性,还可以配置对单个 密钥环-密钥集合 的访问权。Hyper Protect Crypto Services 与 Unified Key Orchestrator 甚至使您能够在不同云提供者的密钥库之间编排加密密钥。
Security and Compliance Center
Security and Compliance Center 具有 Posture Management 功能。 它有助于监控已部署的环境以实现安全性,并根据合规性目标对其进行评估。 在企业中,您可以 定义作用域以监视和评估来自中央实例的多个帐户或帐户组。
IBM Cloud Logs
IBM® Cloud Logs允许管理操作系统日志、应用程序日志、平台日志和审计日志,并提供搜索和过滤功能。 IBM® Cloud Logs Routing用于将平台日志路由至IBM Cloud Logs实例或其他受支持的实例。 进行整合,以便在更大范围内进行分析,从而提高(安全)洞察力。 配置为在自己的Object Storage中长期保存。 请参阅 日志路由,了解租户和帐户特定目标。
IBM Cloud Activity Tracker Event Routing
所有IBM Cloud服务都会为安全相关操作生成事件。 通过使用IBM Cloud Activity Tracker Event Routing,可将安全记录集中到一个或多个IBM Cloud Logs实例中,并长期存储在由您管理的Object Storage存储桶中。 通过将所有记录聚集到一个位置,可以轻松关联安全事件,从而增加对事件的洞察,甚至实现早期发现。
共享网络资源
在企业环境中设计和开发云原生应用通常涉及在地址范围和子网,域名以及流量路由等网络资源方面进行协调。 不同的帐户及其应用程序和计算环境需要适合网络及其结构。 这需要共享网络资源。
- Transit Gateway 服务用于跨三个帐户互连 VPC 环境和经典基础架构。
- 每个帐户都有一个 DNS Services 实例来管理专用域名。 实例已连接到共享 DNS 区域。
DNS Services
您可以使用 DNS Services 从 IBM Cloud中部署的资源解析专用地址 (域名)。 无法从公用因特网解析域名。 DNS 区域是域名的集合,由 DNS 资源记录组成。 DNS 区域及其记录可供其他帐户使用,从而建立链接区域。
Transit Gateway
Transit Gateway 服务允许在 IBM Cloud 环境 (包括经典基础架构和虚拟私有云 (VPC)) 之间建立连接。 您甚至可以 连接在不同帐户中托管的环境。 流经 Transit Gateway 的数据将保留在 IBM Cloud 专用网络中,并且不会向公用因特网公开。
实现资源共享
如导言所述,常见的做法是在一个 (云) 帐户之外访问服务。 根据集成级别,有不同的方法来授权服务访问和实现认证。 下文讨论了这些可供选择的办法。
使用密码或 API 密钥进行认证
许多资源允许生成多个凭证。 通常,它们由用户身份 (标识) 和密码的组合组成,或者仅由单个 API 密钥组成。 通常,可以指定凭证的特权集,例如,允许只读访问或限定可以访问,修改甚至创建和删除的内容。 然后,将为从属服务或应用程序导入或配置凭证以访问该资源。 即使可以访问,设置也需要一些 (手动) 工作,总体而言,这些工作仅是松散耦合或集成的。
在 IBM Cloud中,某些计算服务 (包括 Code Engine 和 Kubernetes Service ) 允许自动创建和配置凭证,即所谓的 服务绑定。
服务到服务授权
一个服务访问另一个服务的更紧密的集成方法是 建立服务到服务授权(s2s 授权)。 您可以创建 IBM Cloud Identity and Access Management (IAM) 策略,以授权源服务访问目标服务。 由于认证是通过标识请求访问权的源服务完成的,因此不需要密码或 API 密钥形式的凭证。 由于创建的 IAM 策略,将自动处理认证和授权。
跨帐户授权
IAM 支持在另一个 IBM Cloud 帐户中的源服务与当前帐户中的目标之间建立服务到服务的权限。 因此,它允许通过创建 IAM 授权策略跨帐户共享资源。 可以通过多种方式创建此类策略,包括 在浏览器控制台中,如下所示,使用 CLI 或通过执行 Terraform 代码。
在以下示例中,将向源帐户中的特定 Object Storage 实例授予当前帐户中标识的 Key Protect 实例的 读者 角色。

以下显示了用于创建具有相同 IAM 授权策略的 资源的 Terraform 代码:
resource "ibm_iam_authorization_policy" "cross_account_policy" {
source_service_account = data.ibm_iam_account_settings.account_a_settings.account_id
source_service_name = "cloud-object-storage"
source_resource_instance_id = data.ibm_resource_instance.cos_resource_instance.guid
target_service_name = "kms"
target_resource_instance_id = data.ibm_resource_instance.kms_resource_instance.guid
roles = ["Reader"]
description = "read access on Key Protect in Main Account for Account A"
}
可以使用 IBM Cloud CLI 和 iam service-policy-create 命令 来创建相同的授权策略:
ibmcloud iam authorization-policy-create cloud-object-storage kms Reader --source-service-account source_account_id --source-service-instance-id cos_instance_id --target-service-instance-id kms_instance_id
控制台,Terraform 提供程序和 CLI 都使用 IAM 策略管理 API 来创建策略。
下一步是,在授权策略到位后,可以创建使用 Key Protect 根密钥的加密存储区。 下面显示了利用资源 ibm_cos_bucket的 Terraform 代码。 属性 key_protect 保存根密钥的 CRN。
resource "ibm_cos_bucket" "cos_bucket" {
bucket_name = "cos-bucket"
resource_instance_id = data.ibm_resource_instance.cos_resource_instance.id
region_location = var.region
key_protect = data.ibm_kms_key.central_kms_root_key.id
storage_class = "smart"
}
您可以在 GitHub 存储库 cross-account-resource-sharing中找到更多示例。
典型的服务到服务授权
对密钥管理服务 (KMS) (例如 Key Protect 和 Hyper Protect Crypto Services ) 的依赖关系是基于云的解决方案的典型依赖关系。 KMS 实例保存客户管理的加密的根密钥。 大多数服务支持客户控制的加密密钥。 在上面的示例中,许多其他服务可以使用跨帐户共享的 KMS 实例,而不是 cloud-object-storage (Object Storage)。
用于服务到服务授权的其他典型 (目标) 服务以及用于资源共享的候选项包括:
- Object Storage: 多个服务需要或能够将数据和日志文件存储在存储区中。 这包括访问日志和监视数据的归档。 其他服务需要访问存储区以执行数据分析。 还有另一类服务需要访问权来订阅更改通知以触发操作的执行。
- Event Notifications: 要向订户推送有关事件的信息,服务实例需要访问 Event Notifications 实例。
- Secrets Manager: 此服务存储并提供给其他服务 IAM API 密钥,SSL/TLS 证书和其他私钥。 因此,从属 (源) 服务需要访问 Secrets Manager。
- Cloud Internet Services (CIS): 它管理域名和其他网络数据,因此可用于例如证书验证。
- IBM Cloud Logs Routing and IBM Cloud Activity Tracker Event Routing: needs service access to targets like IBM Cloud Logs.
请注意,以上列表不完整。
摘要
访问不同帐户中的资源,即使共享资源也是常见做法。 有几个用户从资源共享中受益的用例。 概述中讨论了这些问题。 用户身份和密码的组合或者用于访问资源的 API 密钥通常充当认证。 访问权可以限定为一组特权,例如,仅允许读访问或某些其他受限操作。 有时,这些类型的凭证可以由访问资源 (如应用程序或计算环境 ("服务绑定")) 创建和管理。 不需要凭证的更紧密集成是 IBM Cloud 服务到服务授权的概念。 访问资源 (源) 和访问资源 (目标) 由其属性 (认证) 标识,并分配访问角色 (授权)。 这种关系甚至可以跨账户边界建立。 这允许简单配置但安全的跨帐户资源共享。
服务 | 功能 |
---|---|
安全性和可观察性 | |
Security and Compliance Center | 扫描企业中的多个帐户或帐户组 |
IBM Cloud Activity Tracker Event Routing | 将您的IBM Cloud Activity Tracker Event Routing事件路由到另一个账户并整合事件数据 |
IBM Cloud Logs Routing | 将日志路由到 IBM Cloud Logs 或 Event Streams |
Key Protect | 使用 服务到服务授权 来共享加密密钥。 组织密钥环中的密钥 以实现更简单的管理和增强的安全性。 |
Hyper Protect Crypto Services | 使用 服务到服务授权 来共享加密密钥。 组织密钥环中的密钥 以实现更简单的管理和增强的安全性。 |
Hyper Protect Crypto Services 与 Unified Key Orchestrator | 将 Hyper Protect Crypto Services 实例连接到 IBM Cloud 和第三方云 中的密钥库。 |
Secrets Manager | Secrets Manager |
网络 | |
Transit Gateway | 使用 Transit Gateway |
DNS Services | 在 DNS Services |
帐户设置 | |
目录 | 通过利用 专用目录和限制公共目录 来限制帐户中的可用服务 |
数据库 | |
IBM Cloudant | 跨帐户的数据复制 |
Cloud Databases | 跨帐户复原备份 |
您可以在 GitHub 存储库 cross-account-resource-sharing中找到有关如何为其中某些服务设置资源共享的代码示例。