文件存储资源的跨帐户加密
File Storage for VPC 支持跨帐户客户管理的加密。IBM Cloud® Virtual Private Cloud 客户可以授权其他帐户的用户访问客户根密钥 (CRK)。 然后,这些用户可以使用 CRK 对自己帐户中的新文件共享进行加密。
关于跨帐户密钥访问和使用
一个帐户中的客户根密钥可供另一个帐户的用户在创建加密文件共享时使用。 有关更多信息,请参阅 加密密钥管理。
拥有根密钥的帐户中的特权用户必须 邀请第二个帐户的用户,并将 IAM 授权策略设置为根密钥。 有关更多信息,请参阅 使用 Key Protect 和 使用 Hyper Protect Crypto Services授予对密钥的访问权。
如果受邀用户已是 IBM Cloud的成员,那么他们将在其通知中通过电子邮件接收邀请链接。 正在创建文件共享的帐户中的用户可以与其他帐户中的根密钥的所有者相同。
当受邀用户决定在自己的帐户中创建加密文件共享时,他们可以在 encryption_key
属性中指定第一个帐户的根密钥的 CRN。
限制
您必须使用 API 来查看帐户之间使用的加密密钥,以及创建 IAM 策略。 您可以使用 UI 来访问帐户并查看 IAM 授权。 但是,UI 不会显示属于其他帐户的加密密钥,即使在帐户之间使用这些密钥也是如此。 拥有根密钥的帐户的用户可以使用 UI 来验证与其加密密钥相关联的资源。
跨帐户授权是单向的,并且特定于密钥和服务。 当帐户 A 授权其密钥供帐户 B 的文件服务使用时,帐户 B 可以使用帐户 A 的 CRK 来加密帐户 B 的份额。 但是,帐户 A 不能使用帐户 B 的根密钥来加密帐户 A 的份额。
要使帐户 A 使用帐户 B 的 CRK 对共享进行加密,帐户 B 必须邀请帐户 A 的用户。 然后,帐户 B 必须创建允许帐户 A 的特定服务使用帐户 B 的 CRK 的 IAM 策略。
创建 IAM 策略以使用 API 在帐户之间建立授权
在可以创建文件共享并使用来自另一帐户的根密钥进行加密之前,密钥所有者帐户必须创建 IAM 策略以授权第二个帐户使用 CRK。
要创建 IAM 策略,帐户 A 必须对 IAM API 进行 POST /policies
调用。 在以下示例中,
- 拥有 CRK 的帐户 A 向帐户 B 的文件服务授予
AuthorizationDelegator
和Reader
角色,以创建加密文件共享。 resources
部分指定有关拥有根密钥和目标密钥管理服务 (KMS) 的帐户 A 的信息。kms
属性指示 Key Protect 实例。 如果使用 Hyper Protect Crypto Services 实例,请指定hs-crypto
。subjects
部分指定帐户 B 和用于访问帐户 A 的 Key Protect 实例并使用 CRK 的文件共享服务。
curl -X "POST" "https://iam.cloud.ibm.com/v1/policies" \
-H "Authorization: <Auth Token>" \
-H 'Content-Type: application/json' \
-d '{
"roles": [{"role_id": "crn:v1:bluemix:public:iam::::role:AuthorizationDelegator"},{"role_id": "crn:v1:bluemix:public:iam::::serviceRole:Reader"}],
"resources": [{"attributes":[{"name":"Account-A","operator":"stringEquals","value":"<CRK-Account-A-ID>"},{"name":"Key-Protect","operator":"stringEquals","value":"kms"}]}],
"type": "authorization",
"description": "Reader and Delegator role for KeyProtect Service instance",
"subjects": [{"attributes": [{"name": "serviceName","value": "is"},{"name": "resourceType","value": "share"},{"name": "Account-B","value": "<Account-B-ID>"}]}]
}'
有关更多信息,请参阅使用授权来授予服务之间的访问权。
创建 IAM 策略以在具有 Terraform 的帐户之间建立授权
-
Terraform 支持为 IBM 提供程序配置两个不同的帐户。 没有别名的提供程序被视为缺省提供程序。 请参阅以下示例,其中指定了两个 IBM 帐户,第二个帐户指定了别名
team_account
。 稍后必须将该配置称为ibm.team_account
。terraform { required_providers { ibm = { source = "IBM-Cloud/ibm" version = ">= 1.12.0" } } } provider "ibm" { ibmcloud_api_key = var.ibmcloud_api_key region = var.region ibmcloud_timeout = var.ibmcloud_timeout } provider "ibm" { alias = "team_account" ibmcloud_api_key = var.ibmcloud_api_key_second_account region = var.region ibmcloud_timeout = var.ibmcloud_timeout }
有关自变量和属性的更多信息,请参阅 IBM Cloud 提供者。
-
要在密钥管理服务之间创建从一个帐户到另一个帐户中的文件共享服务的 IAM 授权,请使用资源
ibm_iam_authorization_policy
。 以下示例在 Key Protect 服务与两个帐户的文件服务之间创建授权。 要创建访问 Hyper Protect Crypto Services的权限,请指定hs-crypto
作为target_service_name
的值。resource "ibm_iam_authorization_policy" "policy" { source_service_name = "is" source_resource_type = "share" source_service_account = "<fileshare-account-id>" target_service_name = "kms" target_resource_instance_id = ibm_kms_key.key.instance_id roles = ["Reader"] description = "Authorization Policy" }
此 Terraform 资源还必须包含具有加密密钥所属帐户
ibmcloud_api_key
的提供者别名 (在我们的示例中为ibm.team_account
)。有关自变量和属性的更多信息,请参阅 ibm_iam_authorization_policy。
使用 API 创建跨帐户加密文件共享
必须先授权文件服务访问密钥管理服务,然后才能创建加密文件共享。 从 Cloud Identity and Access Management (IAM),授权 Cloud File Storage (源服务) 与 Key Protect 或 Hyper Protect Crypto Services (目标服务) 之间的访问权。 指定角色的读者访问权。 有关更多信息,请参阅 设置客户管理的加密的先决条件。
设置 IAM 权限后,请使用 VPC API 通过其他帐户拥有的根密钥 创建文件共享。 API 调用与您使用自己的 KMS 实例中的根密钥创建加密文件共享时相同。 进行 POST /shares
调用时,请在 encryption_key
属性中指定来自其他帐户的根密钥的
CRN。
请参阅以下示例。
curl -X POST \
"$vpc_api_endpoint/v1/shares?version=2023-12-12&generation=2"\
-H "Authorization: $iam_token"\
-d '{
"encryption_key": {"crn":"crn:bluemix:public:kms:us-south:a/a1234567:key:0cb88b98-9261-4d07-8329-8f594b6641b5"},
"iops": 1000,
"name": "my-encrypted-share",
"profile": {"name": "dp2"},
"resource_group": {"id": "678523bcbe2b4eada913d32640909956"},
"size": 500,
"zone": {"name": "us-south-2"}
}'
在响应中,加密密钥的 CRN 来自拥有密钥的帐户 A,而文件共享是在帐户 B 中创建的。
{
"created_at": "2023-12-12T23:28:45Z",
"crn": "crn:v1:bluemix:public:is:us-south-1:a/a7654321::share:r006-fe7219eb-c9a9-4aab-8636-9a57141f0cee",
"encryption": "user_managed",
"encryption_key": {"crn": "crn:bluemix:public:kms:us-south:a/a1234567:key:0cb88b98-9261-4d07-8329-8f594b6641b5"},
"href": "https://us-south.iaas.cloud.ibm.com/v1/shares/r006-fe7219eb-c9a9-4aab-8636-9a57141f0cee",
"id": "r006-fe7219eb-c9a9-4aab-8636-9a57141f0cee",
"initial_owner": {"gid": 0,"uid": 0},
"iops": 1000,
"lifecycle_state": "stable",
"name": "my-test-us-south-1-er5s",
"profile": {
"href": "https://us-south.iaas.cloud.ibm.com/v1/share/profiles/dp2",
"name": "dp2",
"resource_type": "share_profile"
},
"replication_role": "none",
"replication_status": "none",
"replication_status_reasons": [],
"resource_group": {
"crn": "crn:bluemix:public:resource-controller::a/a7654321::resource-group:5400b7d6ac9f0a183f70abbe8b8d54c6",
"href": "https://resource-controller.cloud.ibm.com/v2/resource_groups/5400b7d6ac9f0a183f70abbe8b8d54c6",
"id": "5400b7d6ac9f0a183f70abbe8b8d54c6",
"name": "Default"
},
"resource_type": "share",
"size": 500,
"mount_targets": [],
"user_tags": [
"description:user-tags-test",
"tag1:value1",
"tag2:value2",
"tag3:value with spaces"
],
"zone": {
"href": "https://us-south.iaas.cloud.ibm.com/v1/regions/us-south/zones/us-south-1",
"name": "us-south-1"
}
}
使用 Terraform 创建跨帐户加密文件共享
创建授权后,您可以在缺省帐户中创建共享,并使用具有别名的帐户中加密密钥的 CRN。 要创建文件共享,请使用 ibm_is_share
资源。
要创建文件共享,请使用 ibm_is_share
资源。 以下示例创建具有 800 GiB 容量的共享以及 dp2
性能概要文件。 使用由其 CRN 标识的密钥对文件共享进行加密。 此示例还指定具有虚拟网络接口的新安装目标。
resource "ibm_is_share" "share4" {
zone = "us-south-2"
size = "800"
name = "my-share4"
profile = "dp2"
encryption_key = "crn:bluemix:public:kms:us-south:a/a1234567:key:0cb88b98-9261-4d07-8329-8f594b6641b5"
access_control_mode = "security_group"
mount_target {
name = "target"
virtual_network_interface {
primary_ip {
address = 10.240.64.5
auto_delete = true
name = "<reserved_ip_name>
}
resource_group = <resource_group_id>
security_groups = [<security_group_ids>]
}
}
}
有关自变量和属性的更多信息,请参阅 ibm_is_share。