为 Block Storage for VPC 建立服务到服务授权
您可以使用 Cloud Identity and Access Management (IAM) 创建或删除授权,授予一项服务访问另一项服务的权限。 对于Block Storage for VPC,您需要为配置客户管理加密和备份创建服务对服务授权。 您还需要指定 用户角色。
概述
在授权中,源服务是被授予对目标服务的访问权的服务。 您选择的角色定义了源服务的访问级别。 目标服务是您根据分配的角色授予源服务访问许可权的服务。 通常,源服务可以位于创建授权的同一帐户中,也可以位于另一个帐户中。 授权必须在拥有目标服务的账户中创建。
要能够使用客户管理的 CRK 创建加密卷,需要在块服务与您选择的密钥管理服务之间建立服务到服务授权。
如果要创建 Block Storage for VPC 卷的备份快照,那么需要授权备份服务使用 Block Storage for VPC,VPC 快照和 Virtual Server for VPC 服务。 有关更多信息,请参阅 为备份服务建立服务到服务授权。
有关授权的更多信息,请参阅 使用授权在服务之间授予访问权。
在控制台中为客户管理加密创建服务到服务授权
如果跨账户加密需要授权,则必须在拥有加密密钥的目标账户中创建授权。
- 在IBM Cloud控制台中,转到管理 > 访问 (IAM)。
- 在侧面板上选择授权。
- 在“管理授权”页面,单击“创建”。
- 在里面来源部分,选择源帐户。 源账户是创建块存储卷的地方。
- 如果目标是允许另一个帐户使用 CRK,请选择特定帐户并输入32个字符长的账户ID。 然后,单击下一步。
- 否则,选择此帐户。 然后,单击下一步。
- 对于源服务,从列表中选择 Cloud Block Storage。 单击下一步。
- 单击 所有资源,选择范围。
- 单击下一步。
- 对于目标服务,从列表中选择 Hyper Protect Crypto Services 或 KeyProtect。
- 选择角色
Reader
。 - 选中此框以允许源服务和从属服务委派授权。
- 点击审查并检查您的选择。
- 单击授权。
在控制台中为跨账户还原创建服务对服务授权
以下步骤授权一个帐户的 Block Storage 服务使用另一个帐户创建的快照来还原卷。 这些步骤需要由拥有要共享的快照的账户来执行。 接收账户在使用共享快照的 CRN 开始卷恢复之前,必须确保其管理员用户在 IAM 中具有 SnapshotRemoteAccountRestorer
角色。
- 在“管理授权”页面,单击“创建”。
- 在“授予服务授权”页面,选择源账户。
- 由于目标是允许使用另一个账户的快照,因此请选择 特定账户。
- 输入 32 个字符的账户 ID。
- 单击下一步。
- 对于源服务,从列表中选择 Cloud Block Storage。 单击下一步。
- 单击 所有资源,选择范围。
- 单击下一步。
- 对于目标服务,请从列表中选择 VPC 基础架构服务。
- 单击 特定资源,选择范围。
- 单击选择属性。
- 从列表中选择 资源类型。
- 在下一个字段中,选择 Block Storage快照。
- 如果要将授权限制为特定快照,请单击 添加条件。
- 单击 选择属性,然后选择 Snapshot ID。
- 输入快照的 ID。 单击下一步
- 选择角色
Snapshot Remote Account Restorer
。 - 点击审查并检查您的选择。
- 单击授权。
通过 CLI 为客户管理的加密创建服务到服务授权
运行 ibmcloud iam authorization-policy-create
命令,为块服务创建授权策略,以与一个或两个密钥管理服务 (Key Protect 或 Hyper Protect Crypto Services) 进行交互。 源服务为 server-protect
,目标服务为 kms
或 hs-crypto
。 需要分配的角色为 Reader
。
以下示例在 Block 服务与 Key Protect之间创建授权策略。
ibmcloud iam authorization-policy-create server-protect kms Reader
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: 1f722de4-c3e6-4765-b0d3-482ec77a04f8
Source service name: server-protect
Source service instance: All instances
Target service name: kms
Target service instance: 51042d7f-f0df-4915-bd39-6a49957c9175
Roles: Reader
ID: 605cb9b9-ba0d-456b-8c22-180abee66c47
Source service name: server-protect
Source service instance: All instances
Target service name: hs-crypto
Target service instance: All instances
Roles: Reader
有关可用于此命令的所有参数的更多信息,请参阅 ibmcloud iam authorization-policy-create。
通过 CLI 创建跨账户加密的服务对服务授权
如果跨账户加密需要授权,则必须在拥有加密密钥的目标账户中创建授权。 运行 ibmcloud iam authorization-policy-create
命令,为源账户的 Block 服务创建授权策略,以便与目标账户的一个或两个密钥管理服务( Key Protect 或 Hyper Protect Crypto Services )进行交互。 源服务为 server-protect
,目标服务为 kms
或 hs-crypto
。 需要分配的角色为 Reader
。 以下示例在 Block 服务与 Key Protect之间创建授权策略。
- 为本地文档文件夹中的授权策略创建一个 JSON 文件,其中包含以下信息。
'{ "description":"Reader and Delegator role for HPCS service instance", "resources": [ {"attributes":[ {"name":"Account-A-CRK","operator":"stringEquals","value":"<CRK-Account-A-ID>"}, {"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": [ {"attributes": [ {"name":"Cloud Block Storage","value":"server-protect"}, {"name":"Account-B","value":"<Account-B-ID>"}]}], "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
命令,授权源账户的 Block Storage 服务使用目标账户创建的快照还原卷。 接收账户在使用共享快照的 CRN 开始卷恢复之前,必须确保其管理员用户在 IAM 中具有 SnapshotRemoteAccountRestorer
角色。
- 为本地文档文件夹中的授权策略创建一个 JSON 文件,其中包含以下信息。
'{ "type":"authorization", "description":"Providing the Block Storage service access to restore from a Snapshot of another account ", "subjects": [{"attributes": [ {"name":"Block Storage for VPC","value":"server-protect"}, {"name":"Remote-restorer-account","value":"<Remote-Restorer-Account-ID>"}]}], "roles": [{"role_id":"crn:v1:bluemix:public:iam::::role:SnapshotRemoteAccountRestorer"}], "resources": [{"attributes": [ {"name":"Snaphot-owner-account","operator":"stringEquals","value":"<Snapshot-Owner-Account-ID>"}, {"name":"snapshotId","operator":"stringEquals","value":"*"}]}], }'
- 然后,使用 JSON 文件运行以下 CLI 命令。
ibmcloud iam authorization-policy-create --file ~/Documents/policy.json
使用 API 为客户管理的加密创建服务到服务授权
向 IAM 策略管理 API 发出请求,以便为源卷的块服务创建服务到服务授权,以便与密钥管理服务实例 (Key Protect 或 Hyper Protect Crypto Services) 进行交互。
-
以下示例显示如何授权 Block 服务
is.server-protect
(源) 使用 Reader 角色与 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 Block service to interact with the KeyProtect service.", "subjects": [{"attributes":[{"name":"Cloud Block Storage","value":"server-protect"}]}], "roles":[{"role_id":"crn:v1:bluemix:public:iam::::role:Reader"}], "resources":[{"attributes": [{"name":"KeyProtect","value":"kms"}]}] }'
-
要为 Hyper Protect Crypto Services创建授权策略,请将先前示例中的
kms
替换为hs-crypto
。
利用应用程序接口为跨账户加密创建服务对服务授权
向 IAM 策略管理 API 发出请求,为源帐户的 Block Storage 服务创建服务对服务授权,以便与密钥管理服务实例(Key Protect 或 Hyper Protect Crypto Services )进行交互。 请求必须由 KMS 中拥有客户根密钥的账户提出。
-
下面的示例展示了如何授权一个账户(源)的 Block 服务
is.server-protect
与另一个账户(目标)的 Hyper Protect Crypto Services 服务hs-crypto
以 Reader 和 Authorization Delegator 角色进行交互。curl -X POST "https://iam.cloud.ibm.com/v1/policies" \ -H "Authorization: <Auth Token>" \ -H 'Content-Type: application/json' \ -d '{ "type":"authorization", "description":"Reader and Delegator access to HPCS service instance", "subjects": [ {"attributes": {"name":"Cloud Block Storage","value":"server-protect"}, {"name":"Account-B","value":"<Account-B-ID>"}]}], "roles": [{"role_id":"crn:v1:bluemix:public:iam::::role:AuthorizationDelegator"},{"role_id":"crn:v1:bluemix:public:iam::::serviceRole:Reader"}], "resources": [ {"attributes":[ {"name":"Account-A-CRK","operator":"stringEquals","value":"<CRK-Account-A-ID>"}, {"name":"Hyper-Protect-Crypto-Services","operator":"stringEquals","value":"hs-crypto"}]}], }'
-
要为 Key Protect 创建授权策略,请将上例中的
hs-crypto
替换为kms
。
跨账户授权是单向的,并针对密钥和服务。 当账户 A 授权账户 B 的文件服务使用其密钥时,账户 B 就可以使用账户 A 的 CRK 来加密账户 B 的共享文件。 但是,账户 A 不能使用账户 B 的根密钥来加密账户 A 的共享。
使用应用程序接口为跨账户还原创建服务对服务授权
以下 API 请求授权源账户的 Block Storage 服务使用目标账户创建的快照来还原卷。 该调用需要由拥有快照的账户发出。 在使用共享快照的 CRN 开始卷恢复之前,接收源账户必须确保其管理员用户在 IAM 中具有 SnapshotRemoteAccountRestorer
角色。
curl -X POST "https://iam.cloud.ibm.com/v1/policies"\
-H 'Content-Type: application/json\
-d '{
"type":"authorization",
"description":"Providing the Block Storage service access to restore from a Snapshot of another account ",
"subjects": [{"attributes": [
{"name":"BCloud Block Storage","value":"server-protect"},
{"name":"Remote-restorer-account","value":"<Remote-Restorer-Account-ID>"}]}],
"roles": [{"role_id":"crn:v1:bluemix:public:iam::::role:SnapshotRemoteAccountRestorer"}],
"resources": [{"attributes": [
{"name":"Snaphot-owner-account","operator":"stringEquals","value":"<Snapshot-Owner-Account-ID>"},
{"name":"snapshotId","operator":"stringEquals","value":"*"}]}],
}'
如果要限制对特定快照的访问,请在定义资源时使用快照 ID 而不是 *
。
使用 Terraform 为客户管理的加密创建服务到服务授权
使用 main.tf
文件中的 ibm_iam_authorization_policy
资源参数在块服务与密钥管理服务之间创建授权策略。
应用时,以下示例将在 Block 服务与 Key Protect 之间创建授权策略。
resource "ibm_iam_authorization_policy" "mypolicy4keyprotect" {
source_service_name = "server-protect"
target_service_name = "kms"
roles = ["Reader"]
}
应用以下示例时,将在 Block 服务与 Hyper Protect Crypto Services 之间创建授权策略。
resource "ibm_iam_authorization_policy" "mypolicy4HPCS" {
source_service_name = "server-protect"
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
。 下面的示例在 Key Protect 服务和两个账户的文件服务之间创建了授权。 要创建访问 Hyper Protect Crypto Services 的授权,请指定hs-crypto
作为target_service_name
的值。resource "ibm_iam_authorization_policy" "policy" { source_service_name = "server-protect" source_service_account = "<volume-account-id>" target_service_name = "kms" target_resource_instance_id = ibm_kms_key.key.instance_id roles = ["Reader", "Authorization Delegator"] description = "Authorization Policy" }
该 terraform 资源还必须包括提供商别名(在我们的例子中为
ibm.team_account
)和加密密钥所属的账户ibmcloud_api_key
。有关参数和属性的更多信息,请参阅 ibm_iam_authorization_policy。
为跨账户还原 Terraform 创建服务对服务授权
-
为 IBM 提供商配置两个 IBM 账户。 请参见上一节的示例。
-
要为一个账户的 Block Storage 服务创建 IAM 授权,以便使用另一个账户创建的快照来还原卷,请使用资源
ibm_iam_authorization_policy
。resource "ibm_iam_authorization_policy" "policy" { source_service_name = "server-protect" source_service_account = "<volume-account-id>" target_service_name = "ibm_is_snapshot" target_resource_instance_id = ibm_is_snapshot.snapshot.instance_id target_service_account = "<snapshot-account-id>" roles = ["SnapshotRemoteAccountRestorer"] description = "Authorization Policy" }
该 terraform 资源还必须包括提供商别名(在我们的例子中为
ibm.team_account
)和加密密钥所属的账户ibmcloud_api_key
。有关参数和属性的更多信息,请参阅 ibm_iam_authorization_policy。