为 File Storage for VPC 建立服务到服务授权
您可以使用 Cloud Identity and Access Management (IAM) 创建或删除授权,授予一项服务访问另一项服务的权限。 对于 File Storage for VPC,您需要创建服务到服务授权,以配置客户管理的加密并设置跨区域复制。
概述
在授权中,源服务是被授予对目标服务的访问权的服务。 您选择的角色定义了源服务的访问级别。 目标服务是您根据分配的角色授予源服务访问许可权的服务。 通常,源服务可以位于创建授权的同一帐户中,也可以位于另一个帐户中。 目标服务始终位于创建授权的帐户中。
要使用客户根密钥 (CRK) 创建加密文件共享,首先必须有一个密钥管理服务 (KMS) 实例来保存客户根密钥。 您可以选择 Key Protect 或 Hyper Protect Crypto Services。 然后,需要在文件服务和 KMS 实例之间建立服务对服务的授权。 授权必须在拥有和托管客户根密钥的账户中创建。 持有 CRK 的账户是源账户,要创建文件共享的账户是目标账户。
对于跨区域复制,您需要为不同 VPC 中的各种 File Storage 服务实例建立服务对服务授权并指定 用户角色。 该授权可使一个 VPC 中的 File Storage 服务与另一个 VPC 中的 File Storage 服务进行交互。 两个 VPC 必须属于同一帐户。 不支持跨帐户复制。 有关详细信息,请参阅 复制概述。
对于跨账户访问,需要在两个不同账户的 File Storage 服务之间建立服务对服务授权。 授权必须在拥有和托管文件共享的账户中创建。 您还必须在这两个账户中指定 用户角色,以允许用户创建和管理访问者共享和共享绑定。 有关更多信息,请参阅 从另一个帐户共享和加载文件共享。
有关授权的更多信息,请参阅 使用授权在服务之间授予访问权。
在控制台创建客户管理加密授权
- 在 IBM Cloud 控制台中,登录密钥管理服务 (KMS) 和客户根密钥 (CRK) 所在的账户。
- 转至管理 > 访问权 (IAM)。
- 从侧面板中,选择 授权。
- 在“管理授权”页面,单击“创建”。
- 在 源 部分中,选择 源帐户。 该账户用于使用 CRK 创建客户管理加密的文件共享。
- 要允许使用此账户中的 CRK 加密另一账户中的文件共享,请选择特定账户并输入文件服务账户的 32 个字符长的账户 ID。 然后,单击下一步。
- 否则,请选择 此帐户。 然后,单击下一步。
- 对于源服务,从列表中选择 VPC 基础架构服务。 单击下一步。
- 通过单击 特定资源来选择作用域。
- 单击选择属性。
- 从列表中选择 资源类型。
- 在下一个字段中,选择 File Storage for VPC。
- 单击下一步。
- 对于目标服务,从列表中选择 Hyper Protect Crypto Services 或 KeyProtect。 单击 下一步。
- 选择角色
Reader
。 - 选中此框以允许源服务和从属服务委派授权。
- 单击 复审 并检查您的选择。
- 单击授权。
在控制台中为跨区域复制创建授权
- 在 IBM Cloud 控制台中,登录文件共享所在的账户。
- 转至管理 > 访问权 (IAM)。
- 从侧面板中,选择 授权。
- 在“管理授权”页面,单击“创建”。
- 在 源 部分中,选择 源帐户。 选择此账户,然后单击下一步。
- 对于源服务,从列表中选择 VPC 基础架构服务。 单击下一步。
- 通过单击 特定资源来选择作用域。
- 单击选择属性。
- 从列表中选择 资源类型。
- 在下一个字段中,选择 File Storage for VPC。
- 单击下一步。
- 对于目标服务,从列表中选择 VPC 基础架构服务。 单击下一步。
- 通过单击 特定资源来选择作用域。
- 单击选择属性。
- 从列表中选择 资源类型。
- 在下一个字段中,选择 File Storage for VPC。
- 单击下一步。
- 选择角色
Editor
。 - 单击 复审 并检查您的选择。
- 单击授权。
在控制台创建跨账户访问授权
- 在 IBM Cloud 控制台中,登录文件共享所在的账户。
- 转至管理 > 访问权 (IAM)。
- 从侧面板中,选择 授权。
- 在“管理授权”页面,单击“创建”。
- 在 源 部分中,选择 源帐户。
- 如果要允许其他帐户访问文件共享上的数据,请选择 特定帐户 并输入 32 个字符长的帐户标识。 然后,单击下一步。
- 如果要在同一帐户中创建存取器共享,请选择 此帐户。 然后,单击下一步。
- 对于源服务,从列表中选择 VPC 基础架构服务。 单击下一步。
- 通过单击 特定资源来选择作用域。
- 单击选择属性。
- 从列表中选择 资源类型。
- 在下一个字段中,选择 File Storage for VPC。
- 单击下一步。
- 对于目标服务,从列表中选择 VPC 基础架构服务。 单击下一步。
- 通过单击 特定资源来选择作用域。
- 单击选择属性。
- 从列表中选择 资源类型。
- 在下一个字段中,选择 File Storage for VPC。
- 单击添加条件。
- 单击 选择属性,然后选择 共享标识。
- 从列表中选择共享。
- 单击下一步。
- 选择角色
Share Broker
。 - 单击 复审 并检查您的选择。
- 单击授权。
在控制台中为 Watson Studio 创建授权
- 在 IBM Cloud 控制台中,登录文件共享所在的账户。
- 转至管理 > 访问权 (IAM)。
- 从侧面板中,选择 授权。
- 在“管理授权”页面,单击“创建”。
- 在“授予服务授权”页面上,选择 此帐户。
- 对于源服务,从列表中选择 Watson Studio。
- 通过单击 特定资源来选择作用域。
- 单击选择属性。
- 从列表中选择源服务实例。
- 在下一个字段中,选择 所有实例。
- 单击下一步。
- 对于目标服务,从列表中选择 VPC 基础架构服务。 单击下一步。
- 通过单击 特定资源来选择作用域。
- 单击选择属性。
- 从列表中选择 资源类型。
- 在下一个字段中,选择 File Storage for VPC。
- 单击添加条件。
- 单击 选择属性,然后选择 共享标识。
- 字符串等号字段保持不变。
- 在下一个字段中,从列表中选择源共享。
- 单击下一步。
- 选择角色
Share Broker
。 - 选中此框以允许源服务和从属服务委派授权。
- 单击 复审 并检查您的选择。
- 单击授权。
从 CLI 创建客户管理加密授权
登录您的账户。 运行 ibmcloud iam authorization-policy-create
命令,为 File Storage 服务创建授权策略,以便与一个或两个密钥管理服务实例( Key Protect 或 Hyper Protect Crypto Services )交互。 源服务是带有 --source-resource-type share
的 is
,而目标服务是 kms
或 hs-crypto
。 需要分配的角色为 Reader
。 下面的示例在 File Storage 服务和 Key Protect 之间创建了一个授权策略。
$ ibmcloud iam authorization-policy-create is kms Reader --source-resource-type share
Creating authorization policy under account a1234567 as test.user@ibm.com...
OK
要列出已针对帐户实施的服务授权,请运行 ibmcloud iam authorization-policies
命令。 以下示例显示可以使用存储在 Key Protect 或 Hyper Protect Crypto Services中的 CRK 对文件共享进行加密。
$ ibmcloud iam authorization-policies
Getting authorization policies under account a1234567 as test.user@ibm.com...
OK
ID: 8a2ef8a5-2e4c-46ea-b2e7-d4b0d0a0e1a5
Source service name: is
Source service instance: All instances
Source resource type: share
Target service name: hs-crypto
Target service instance: All instances
Roles: Reader
ID: d2df60ea-5575-4bd1-9cd6-f35c52576577
Source service name: is
Source service instance: All instances
Source resource type: share
Target service name: kms
Target service instance: All instances
Roles: Authorization Delegator, Reader
有关可用于此命令的所有参数的更多信息,请参阅 ibmcloud iam authorization-policy-create。
从 CLI 创建跨账户加密授权
登录持有密钥管理服务实例的账户( Key Protect 或 Hyper Protect Crypto Services )。 运行 ibmcloud iam authorization-policy-create
命令,为文件服务创建与 KMS 交互的授权策略。 源服务是带有 --source-resource-type share
的 is
,而目标服务是 kms
或 hs-crypto
。
需要分配的角色为 Reader
。 下面的示例在 KeyUserAccount
的文件服务和 KeyOwnerAccount
的 Key Protect 实例之间创建了一个授权策略。
- 为本地文档文件夹中的授权策略创建一个 JSON 文件,其中包含以下信息。
'{ "description":"Reader and Delegator role for HPCS service instance", "resources": [{"attributes": [ {"name": "KeyOwnerAccountID","value": "a/a1234567","operator": "stringEquals"}, {"name":"Hyper-Protect-Crypto-Services","operator":"stringEquals","value":"hs-crypto"}]}], "roles": [ {"role_id":"crn:v1:bluemix:public:iam::::role:AuthorizationDelegator"}, {"role_id":"crn:v1:bluemix:public:iam::::serviceRole:Reader"}], "subjects": [ {"name": "serviceName","value": "is"}, {"name": "resourceType","value": "share"}, {"name": "KeyUserAccountID","value": "a/a7654321>"}], "type":"authorization" }'
- 然后,使用 JSON 文件运行以下 CLI 命令来创建授权策略。
跨账户授权是单向的,并针对密钥和服务。 当账户 A 授权账户 B 的文件服务使用其密钥时,账户 B 就可以使用账户 A 的 CRK 来加密账户 B 的共享文件。 但是,账户 A 不能使用账户 B 的根密钥来加密账户 A 的共享。ibmcloud iam authorization-policy-create --file ~/Documents/policy.json
从 CLI 创建跨区域复制授权
运行 ibmcloud iam authorization-policy-create
命令以授权区域文件服务协同工作。
ibmcloud iam authorization-policy-create is is Editor --source-resource-type share --target-resource-type share
请参阅以下示例。
$ ibmcloud iam authorization-policy-create is is Editor --source-resource-type share --target-resource-type share
Creating authorization policy under account a1234567 as test.user@ibm.com...
OK
Authorization policy f311f255-d20e-49d0-aa94-316feaba981e was created.
ID: f311f255-d20e-49d0-aa94-316feaba981e
Source service name: is
Source service instance: All instances
Source resource type: share
Target service name: is
Target service instance: All instances
Target resource type: share
Roles: Editor
有关可用于此命令的所有参数的更多信息,请参阅 ibmcloud iam authorization-policy-create。
通过 CLI 创建跨账户访问授权
作为共享所有者,创建 JSON 文件并将其与 ibmcloud iam authorization-policy-create
命令配合使用,以便为共享所有者帐户 (源) 的 File Storage for VPC 服务创建服务到服务授权,以访问存取器帐户 (目标) 中的共享。
-
创建一个 JSON 文件,内容如下。 在此示例中,该文件将创建为 Documents 文件夹中的 policy.json。
{ "roles": [{"role_id": "crn:v1:bluemix:public:iam::::role:ShareBroker","display_name": "Share Broker", "description": "As a share broker, you can create and delete share bindings"}], "resources": [{"attributes": [ {"name": "accountId","value": "<origin share owner Account ID>","operator": "stringEquals"}, {"name": "serviceName","value": "is","operator": "share"}, {"name": "shareId","value": "<OriginShareId>","operator": "stringEquals"}]}], "type": "authorization", "description": "ShareBroker role for File Storage for VPC cross-account share access", "subjects": [{"attributes": [ {"name": "serviceName","value": "is"}, {"name": "resourceType","value": "share"}, {"name": "accountId","value": "<accessor share Account ID>"}]}] }
-
然后,使用 JSON 文件运行 CLI 命令以创建授权策略。
ibmcloud iam authorization-policy-create --file ~/Documents/policy.json
使用应用程序接口为客户管理的加密创建授权
要授权文件服务访问密钥管理服务实例( Key Protect 或 Hyper Protect Crypto Services ),请向 IAM 策略管理 API 提出 API 请求,以创建服务间授权。
-
以下示例显示如何授权文件服务
is.share
(源) 与具有 读者 角色的 Key Protect 服务kms
(目标) 进行交互。curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{ "type": "access", "description": "Reader role for the file service to interact with the KeyProtect service.", "subjects": [{"attributes": [{"name": "serviceName","value": "is"},{"name": "resourceType","value": "share"}]}], "roles":[{"role_id": "crn:v1:bluemix:public:iam::::role:Reader"}], "resources":[{"attributes": [{"name": "serviceName","value": "kms"}]}] }'
-
要为 Hyper Protect Crypto Services创建授权策略,请将先前示例中的
kms
替换为hs-crypto
。
使用应用程序接口创建跨账户加密授权
要授权其他账户的文件服务访问密钥管理服务实例( Key Protect 或 Hyper Protect Crypto Services ),请向 IAM 策略管理 API 提出请求,创建服务对服务授权。 下面的示例显示了如何为源账户的 File Storage for VPC 服务创建授权,以便使用 Reader 权限访问账户(目标)的密钥管理服务。
curl -X "POST" "https://iam.cloud.ibm.com/v1/policies" \
-H "Authorization: <Auth Token>" \
-H 'Content-Type: application/json' \
-d '{
"description":"Reader and Delegator role for HPCS service instance",
"resources": [{"attributes": [
{"name": "KeyOwnerAccountID","value": "a/a1234567","operator": "stringEquals"},
{"name":"Hyper-Protect-Crypto-Services","operator":"stringEquals","value":"hs-crypto"}]}],
"roles": [
{"role_id":"crn:v1:bluemix:public:iam::::role:AuthorizationDelegator"},
{"role_id":"crn:v1:bluemix:public:iam::::serviceRole:Reader"}],
"subjects": [
{"name": "serviceName","value": "is"},
{"name": "resourceType","value": "share"},
{"name": "KeyUserAccountID","value": "a/a7654321>"}],
"type":"authorization"
}'
使用应用程序接口为跨区域复制创建授权
向 IAM 策略管理 API 发出请求,以便为源共享的区域文件服务创建服务到服务授权,以便与副本共享的区域文件服务进行交互。
-
授权
is.share
(源) 与具有 编辑者 角色的is.share
(目标) 进行交互。curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{ "type": "access", "description": "Editor role for the source share's regional file service to interact with replica share's regional file service.", "subjects": [{"attributes": [{"name": "serviceName","value": "is"},{"name": "resourceType","value": "share"}]}], "roles":[{"role_id": "crn:v1:bluemix:public:iam::::role:Editor"}], "resources":[{"attributes": [{"name": "serviceName","value": "is"},{"name": "resourceType","value": "share"}]}] }'
有关更多信息,请参阅 IAM 策略管理 的 API 规范。
使用应用程序接口创建跨账户访问授权
作为共享所有者,向 IAM 策略管理 API 提出 API 请求,创建允许访问者账户访问源共享的授权。 下面的示例显示了如何在源共享账户(源)和访问者账户(目标)之间创建服务对服务授权。
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:ShareBroker","display_name": "Share Broker",
"description": "As a share broker, you can create and delete share bindings"}],
"resources": [{"attributes": [
{"name": "accountId","value": "<origin share owner Account ID>","operator": "stringEquals"},
{"name": "serviceName","value": "is","operator": "share"},
{"name": "shareId","value": "<OriginShareId>","operator": "stringEquals"}]}],
"type": "authorization",
"description": "ShareBroker role for File Storage for VPC cross-account share access",
"subjects": [{"attributes": [
{"name": "serviceName","value": "is"},
{"name": "resourceType","value": "share"},
{"name": "accountId","value": "<accessor share Account ID>"}]}]
}'
使用 Terraform 为客户管理的加密创建授权
使用 main.tf
文件中的 ibm_iam_authorization_policy
资源参数在文件服务与密钥管理服务之间创建授权策略。
以下示例在应用时在文件服务与 Key Protect 之间创建授权策略。
resource "ibm_iam_authorization_policy" "mypolicy4keyprotect" {
source_service_name = "is"
source_resource_type = "share"
target_service_name = "kms"
roles = ["Reader"]
}
以下示例在应用时在文件服务与 Hyper Protect Crypto Services 之间创建授权策略。
resource "ibm_iam_authorization_policy" "mypolicy4HPCS" {
source_service_name = "is"
source_resource_type = "share"
target_service_name = "hs-crypto"
roles = ["Reader"]
}
有关自变量和属性的更多信息,请参阅 授权资源的 Terraform 文档。
使用 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
。 下面的示例在一个账户的文件服务和另一个账户的Hyper Protect Crypto Services服务之间创建了授权。resource "ibm_iam_authorization_policy" "policy1" { subject_attributes { name = "accountId" value = data.ibm_iam_account_settings.iam.account_id } subject_attributes { name = "serviceName" value = "is" } subject_attributes { name = "resourceType" value = "share" } resource_attributes { name = "accountId" value = data.ibm_iam_account_settings.iam.ibm.team_account_id } resource_attributes { name = "Hyper-Protect-Crypto-Services" operator = "stringEquals" value = "hs-crypto" } roles = ["Reader"] }
下面的示例在一个账户的文件服务和另一个账户的 Key Protect 服务之间创建了一个授权。
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 资源还必须包括提供商别名(在我们的例子中为 "
ibm.team_account
)和存储加密密钥的账户 "ibmcloud_api_key
。
使用 Terraform 创建跨区域复制授权
使用 main.tf
文件中的 ibm_iam_authorization_policy
资源参数在不同区域中的文件服务之间创建授权策略。
resource "ibm_iam_authorization_policy" "mypolicy" {
source_service_name = "is"
source_resource_type = "share"
target_service_name = "is"
target_resource_type = "share"
roles = ["Editor"]
}
有关自变量和属性的更多信息,请参阅 授权资源的 Terraform 文档。
使用 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
。 以下示例在两个帐户的文件服务之间创建授权。resource "ibm_iam_authorization_policy" "policy" { source_service_name = "is" source_resource_type = "share" source_service_account = "<ShareOwner-Account-id>" target_service_name = "is" target_resource_type = "share" target_service_account = "<Accessor-Account-id>" roles = ["ShareBroker"] description = "Authorization Policy" }
或
resource "ibm_iam_authorization_policy" "policy1" { subject_attributes { name = "accountId" value = data.ibm_iam_account_settings.iam.account_id } subject_attributes { name = "serviceName" value = "is" } subject_attributes { name = "resourceType" value = "share" } resource_attributes { name = "shareId" operator = "stringEquals" value = data.ibm_share_id } resource_attributes { name = "serviceName" operator = "stringEquals" value = "is" } resource_attributes { name = "volumeId" operator = "stringExists" value = "true" } roles = ["ShareBroker"] }
此 Terraform 资源还必须包含具有源共享所在帐户
ibmcloud_api_key
的提供程序别名 (在我们的示例中为ibm.team_account
)。有关自变量和属性的更多信息,请参阅 ibm_iam_authorization_policy。