管理用户访问权
IBM Cloud Hyper Protect Crypto Services 支持由 IBM Cloud® Identity and Access Management管理的集中式访问控制系统,以帮助您管理加密密钥的用户和访问权。
角色和许可权
下表显示了 Hyper Protect Crypto Services 支持的角色。
角色 | 许可权 |
---|---|
服务管理员 | 管理 平台访问权 和 服务访问权,授予对保险库文件的访问权,创建和删除服务实例以及管理密钥。 将自动为 IBM Cloud 帐户所有者分配服务管理员许可权。 |
加密单元管理员 | 提供签名密钥,并签署可信密钥条目 (TKE) 管理命令,例如用于添加另一个加密单元管理员。 在某些情况下,加密单元管理员也可以是主密钥管理人。 |
主密钥管理人 | 提供用于初始化服务实例的主密钥部件。 在某些情况下,主密钥管理人也可以是加密单元管理员。 |
服务用户 | 通过用户界面和 API 管理根密钥和标准密钥,并通过 PKCS #11 API 或 Enterprise PKCS #11 over gRPC (GREP11) 执行加密操作 API。 根据 平台访问角色 和 服务访问角色,可以使用各种许可权对服务用户进行进一步分类。 |
IAM 平台访问角色
通过 Cloud Identity and Access Management (IAM),作为帐户所有者或服务管理员,您可以管理和定义 IBM Cloud 帐户中服务用户和资源的访问权。
为了简化访问,Hyper Protect Crypto Services 与 IAM 角色 保持一致,以便根据分配给用户的角色,每个用户都具有不同的服务视图。 如果您是服务管理员,那么可以分配对应于要授予团队成员的特定 Hyper Protect Crypto Services 许可权的 Cloud IAM 角色。
下表列出了 Hyper Protect Crypto Services上下文中的 IBM Cloud IAM 角色。 有关完整的 IAM 文档以及如何分配访问权,请参阅 为 Unified Key Orchestrator设置定制角色的最佳实践。
使用 IBM Cloud 平台访问角色在帐户级别授予许可权,例如能够在 IBM Cloud 帐户中创建或删除实例。
操作 | 查看者 | 编辑者 | 运算符 | 管理员 |
---|---|---|---|---|
查看 Hyper Protect Crypto Services 实例。 | ||||
创建 Hyper Protect Crypto Services 实例。 | ||||
删除 Hyper Protect Crypto Services 实例。 | ||||
邀请新用户并管理访问策略。 |
如果您是帐户所有者,那么会自动为您分配对 Hyper Protect Crypto Services 服务实例的 管理员 平台访问权,以便您可以进一步分配角色并为其他人定制访问策略。
IAM 服务访问角色
作为服务管理员,您可以使用服务访问角色在服务级别授予服务用户许可权,例如能够查看,创建或删除 Hyper Protect Crypto Services 密钥。
- 作为 读者,您可以浏览密钥的高级视图。 读者无法创建,修改或删除密钥。
- 作为 ReaderPlus,您具有与“读者”相同的许可权,并具有检索标准密钥的材料的额外功能。
- 作为 写入者,您可以创建,修改,轮换和使用密钥。 写程序无法删除或禁用密钥。
- 作为 管理者,您可以执行 Reader,ReaderPlus 和 Writer 可以执行的所有操作,包括删除密钥和设置密钥策略的功能。
- 作为 VMware KMIP Manager,您可以使用 Hyper Protect Crypto Services 配置 KMIP for VMware 以使用您自己的根密钥启用加密。
- 作为 保险库文件管理员,您可以管理保险库文件,密钥库和模板,并对 Unified Key Orchestrator中的受管密钥执行破坏性生命周期操作。 可以使用不同的保险库来分隔团队,业务线或客户。 如果已超过免费密钥库的限制,那么还可以添加付费密钥库。
- 作为 密钥管理人-创建者,您可以在 Unified Key Orchestrator中创建和管理密钥。 对于完整的密钥生命周期,需要“密钥管理人-创建者”和“密钥管理人-部署者”角色。
- 作为 密钥管理人-部署者,您可以在 Unified Key Orchestrator中部署和管理密钥。 对于完整的密钥生命周期,需要“密钥管理人-创建者”和“密钥管理人-部署者”角色。
要实施职责分离,请将“密钥管理人-创建者”和“密钥管理人-部署者”角色分配给不同的人员。
下表显示服务访问角色如何映射到 Hyper Protect Crypto Services 许可权。 IAM 角色是提供的缺省角色。 您还可以根据企业的需求 定义和创建服务级别的定制角色。
-
可信密钥条目 (TKE) 使用智能卡或具有 IAM 认证的软件 CLI 插件。 不包含用于在智能卡或 CLI 上本地管理密钥的命令。 这些命令不会与 HSM 域交互。
-
Unified Key Orchestrator 用于多云密钥管理和编排。 除了设置缺省 IAM 角色外,您还可以根据需要 创建定制 Unified Key Orchestrator 角色。
-
HSM API (PKCS #11 API 和 GREP11 API) 用于应用程序级别加密。
-
密钥管理互操作性协议 (KMIP) 适配器用于配置具有 Hyper Protect Crypto Services 的 KMIP for VMware 服务,以通过使用您自己的根密钥来启用 vSphere 加密或 vSAN 加密。
操作 | 读者 | ReaderPlus | 写入者 | 管理者 |
---|---|---|---|---|
TKE 视图状态: ibmcloud tke cryptounit-admins ,ibmcloud tke cryptounit-compare ,ibmcloud tke cryptounit-thrhlds 和 ibmcloud tke cryptounit-mk 。 |
||||
TKE 集合上下文: ibmcloud tke-cryptounit-add ,ibmcloud tke-cryptounit-rm 。 |
||||
TKE 管理员添加或除去: ibmcloud tke cryptounit-admin-add ,ibmcloud tke cryptounit-admin-rm 。 |
||||
TKE 设置管理定额阈值: ibmcloud tke -cryptounit-thrhld-set. |
||||
TKE 主密钥操作 (装入,旋转,清除,清零和恢复): ibmcloud tke cryptounit-mk-* ,ibmcloud tke auto-init ,ibmcloud tke auto-mk-rotate 和 ibmcloud tke auto-recover 。 |
操作 | 读者 | 密钥管理人-部署者 | 密钥管理人-创建者 | 保险库管理员 | 管理者 |
---|---|---|---|---|---|
激活预活动密钥。 | |||||
销毁预先活动的密钥。 | |||||
取消激活活动密钥。 | |||||
分配活动密钥。 | |||||
取消活动密钥的链接。 | |||||
销毁已取消激活的密钥。 | |||||
分配已取消激活的密钥。 | |||||
重新激活已取消激活的密钥。 | |||||
取消链接已取消激活的密钥。 | |||||
从保险库文件中除去已销毁的密钥。 | |||||
读取受管密钥详细信息。 | |||||
列出受管密钥。 | |||||
编写或编辑受管密钥详细信息。 | |||||
轮换受管密钥。 | |||||
删除受管密钥。 | |||||
生成密钥的密钥资料。 | |||||
将密钥分发到分配的密钥库中。 | |||||
写入密钥激活或到期日期。 | |||||
编写密钥标记。 | |||||
读取密钥库详细信息。 | |||||
列出密钥库。 | |||||
编写或编辑密钥库详细信息。 | |||||
删除内部密钥库,或与外部密钥库断开连接。 | |||||
请阅读密钥模板详细信息。 | |||||
列出密钥模板。 | |||||
编写或编辑密钥模板。 | |||||
删除密钥模板。 | |||||
读取保险库文件详细信息。 | |||||
列出保险库文件。 | |||||
编写或编辑保险库文件详细信息。 | |||||
删除保险库文件。 | |||||
使用外部密钥库开始对 UKO 基础价格进行计费。 | |||||
创建超出可用量的付费密钥库。 |
操作 | 读者 | ReaderPlus | 写入者 | 管理者 | KMS 密钥清除 |
---|---|---|---|---|---|
创建密钥。 | |||||
导入密钥。 | |||||
检索密钥。 | |||||
检索密钥元数据。 | |||||
检索密钥总计。 | |||||
列出密钥。 | |||||
打包密钥。 | |||||
解包密钥。 | |||||
重新打包密钥。 | |||||
修补密钥。 | |||||
旋转密钥。 | |||||
禁用密钥。 | |||||
启用密钥。 | |||||
调度密钥的删除。 | |||||
取消删除密钥。 | |||||
删除密钥。 | |||||
清除密钥。 | |||||
复原密钥。 | |||||
设置关键策略。 | |||||
列出关键策略。 | |||||
设置实例策略。 | |||||
列出实例策略。 | |||||
创建导入令牌。 | |||||
检索导入令牌。 | |||||
创建注册。1 | |||||
列出密钥的注册。 | |||||
列出任何密钥的注册。 | |||||
更新注册。1 | |||||
替换注册。1 | |||||
删除注册。1 | |||||
创建密钥环。 | |||||
列出密钥环。 | |||||
删除密钥环。 | |||||
创建密钥别名。 | |||||
删除密钥别名。 |
1: 此操作由支持密钥注册的 集成服务 代表您执行。 了解更多信息。
操作 | 读者 | ReaderPlus | 写入者 | 管理者 |
---|---|---|---|---|
获取机制列表和信息 | ||||
创建或删除密钥库 | ||||
列出密钥库 | ||||
生成密钥 | ||||
生成密钥对 | ||||
商店密钥 | ||||
生成随机 | ||||
列出密钥 | ||||
获取或设置键属性 | ||||
包装密钥 | ||||
重新打包密钥 | ||||
解包密钥 | ||||
更新密钥 | ||||
Encrypt | ||||
Decrypt | ||||
签名 | ||||
验证 | ||||
摘要 |
操作 | 读者 | ReaderPlus | 写入者 | 管理者 | VMWare KMIP Manager |
---|---|---|---|---|---|
激活 KMIP 端点。 | |||||
取消激活 KMIP 端点。 | |||||
获取 KMIP 端点的状态。 | |||||
将客户机证书添加到 KMIP 端点以使用相互 TLS。 | |||||
从 KMIP 端点删除客户机证书以使用相互 TLS。 |
在 UI 中分配对 Hyper Protect Crypto Services 的访问权
可以通过两种常见方法在 UI 中分配访问权:
- 每个用户的访问策略。 您可以从 UI 中的“管理 > 访问权 (IAM) > 用户”页面管理每个用户的访问策略。 有关分配 IAM 访问权的步骤的信息,请参阅 管理对资源的访问权。
- 访问组。 访问组用于简化访问管理,方法是一次性分配对组的访问权,然后您可以根据需要在组中添加或除去用户以控制其访问权。 您可以从 UI 中的“管理 > 访问权 (IAM) > 访问组”页面管理访问组及其访问权。 有关更多信息,请参阅 在 UI 中分配对组的访问权。
在 CLI 中分配对 Hyper Protect Crypto Services 的访问权
有关分配,除去和复审访问权的逐步指示信息,请参阅 使用 CLI 分配访问 ro 资源。 以下示例显示了用于为服务实例分配 Writer
角色的命令:
使用 <hs-crypto>
作为服务名称。 此外,请在角色名称周围使用引号,这些名称与此处的示例类似,但不止一个单词。
ibmcloud iam user-policy-create USER@EXAMPLE.COM --service-name hs-crypto --service-instance <instance-id> --roles "Writer"
使用 API 分配对 Hyper Protect Crypto Services 的访问权
有关分配,除去和复审访问权的逐步指示信息,请参阅 使用 API 分配对资源的访问权 或 创建策略 API 文档。 下表中的角色云资源名称 (CRN) 用于分配对 API 的访问权。
角色名称 | 角色 CRN |
---|---|
查看者 | crn:v1:bluemix:public:hs-crypto::::serviceRole:Viewer |
运算符 | crn:v1:bluemix:public:hs-crypto::::serviceRole:Operator |
编辑者 | crn:v1:bluemix:public:hs-crypto::::serviceRole:Editor |
管理员 | crn:v1:bluemix:public:hs-crypto::::serviceRole:Administrator |
读者 | crn:v1:bluemix:public:hs-crypto::::serviceRole:Reader |
ReaderPlus | crn:v1:bluemix:public:hs-crypto::::serviceRole:ReaderPlus |
写入者 | crn:v1:bluemix:public:hs-crypto::::serviceRole:Writer |
管理者 | crn:v1:bluemix:public:hs-crypto::::serviceRole:Manager |
VMWare KMIP Manager | crn:v1:bluemix:public:hs-crypto::::serviceRole:VMwareKMIPManager |
保险库管理员 | crn:v1:bluemix:public:hs-crypto::::serviceRole:VaultAdministrator |
密钥管理人-创建者 | crn:v1:bluemix:public:hs-crypto::::serviceRole:KeyCustodianCreator |
密钥管理人-部署者 | crn:v1:bluemix:public:hs-crypto::::serviceRole:KeyCustodianDeployer |
以下示例用于为服务实例分配 Writer
角色:
使用 <hs-crypto>
作为服务名称,并参阅“角色标识值”表以确保您对 CRN 使用正确的值。
curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
"type": "access",
"description": "Hyper Protect Crypto Services",
"subjects": [
{
"attributes": [
{
"name": "iam_id",
"value": "IBMid-123453user"
}
]
}'
],
"roles":[
{
"role_id": "crn:v1:bluemix:public:hs-crypto::::serviceRole:Writer"
}
],
"resources":[
{
"attributes": [
{
"name": "accountId",
"value": "$ACCOUNT_ID"
},
{
"name": "serviceName",
"value": "hs-crypto"
}
]
}
]
}
SubjectAttribute subjectAttribute = new SubjectAttribute.Builder()
.name("iam_id")
.value("IBMid-123453user")
.build();
PolicySubject policySubjects = new PolicySubject.Builder()
.addAttributes(subjectAttribute)
.build();
PolicyRole policyRoles = new PolicyRole.Builder()
.roleId("crn:v1:bluemix:public:hs-crypto::::serviceRole:Writer")
.build();
ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
.name("accountId")
.value("ACCOUNT_ID")
.operator("stringEquals")
.build();
ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
.name("serviceName")
.value("hs-crypto")
.operator("stringEquals")
.build();
PolicyResource policyResources = new PolicyResource.Builder()
.addAttributes(accountIdResourceAttribute)
.addAttributes(serviceNameResourceAttribute)
.build();
CreatePolicyOptions options = new CreatePolicyOptions.Builder()
.type("access")
.subjects(Arrays.asList(policySubjects))
.roles(Arrays.asList(policyRoles))
.resources(Arrays.asList(policyResources))
.build();
Response<Policy> response = service.createPolicy(options).execute();
Policy policy = response.getResult();
System.out.println(policy);
const policySubjects = [
{
attributes: [
{
name: 'iam_id',
value: 'IBMid-123453user',
},
],
},
];
const policyRoles = [
{
role_id: 'crn:v1:bluemix:public:hs-crypto::::serviceRole:Writer',
},
];
const accountIdResourceAttribute = {
name: 'accountId',
value: 'ACCOUNT_ID',
operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
name: 'serviceName',
value: 'hs-crypto',
operator: 'stringEquals',
};
const policyResources = [
{
attributes: [accountIdResourceAttribute, serviceNameResourceAttribute]
},
];
const params = {
type: 'access',
subjects: policySubjects,
roles: policyRoles,
resources: policyResources,
};
iamPolicyManagementService.createPolicy(params)
.then(res => {
examplePolicyId = res.result.id;
console.log(JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err)
});
policy_subjects = PolicySubject(
attributes=[SubjectAttribute(name='iam_id', value='IBMid-123453user')])
policy_roles = PolicyRole(
role_id='crn:v1:bluemix:public:hs-crypto::::serviceRole:Writer')
account_id_resource_attribute = ResourceAttribute(
name='accountId', value='ACCOUNT_ID')
service_name_resource_attribute = ResourceAttribute(
name='serviceName', value='hs-crypto')
policy_resources = PolicyResource(
attributes=[account_id_resource_attribute,
service_name_resource_attribute])
policy = iam_policy_management_service.create_policy(
type='access',
subjects=[policy_subjects],
roles=[policy_roles],
resources=[policy_resources]
).get_result()
print(json.dumps(policy, indent=2))
subjectAttribute := &iampolicymanagementv1.SubjectAttribute{
Name: core.StringPtr("iam_id"),
Value: core.StringPtr("IBMid-123453user"),
}
policySubjects := &iampolicymanagementv1.PolicySubject{
Attributes: []iampolicymanagementv1.SubjectAttribute{*subjectAttribute},
}
policyRoles := &iampolicymanagementv1.PolicyRole{
RoleID: core.StringPtr("crn:v1:bluemix:public:hs-crypto::::serviceRole:Writer"),
}
accountIDResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
Name: core.StringPtr("accountId"),
Value: core.StringPtr("ACCOUNT_ID"),
Operator: core.StringPtr("stringEquals"),
}
serviceNameResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
Name: core.StringPtr("serviceName"),
Value: core.StringPtr("hs-crypto"),
Operator: core.StringPtr("stringEquals"),
}
policyResources := &iampolicymanagementv1.PolicyResource{
Attributes: []iampolicymanagementv1.ResourceAttribute{
*accountIDResourceAttribute, *serviceNameResourceAttribute}
}
options := iamPolicyManagementService.NewCreatePolicyOptions(
"access",
[]iampolicymanagementv1.PolicySubject{*policySubjects},
[]iampolicymanagementv1.PolicyRole{*policyRoles},
[]iampolicymanagementv1.PolicyResource{*policyResources},
)
policy, response, err := iamPolicyManagementService.CreatePolicy(options)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(policy, "", " ")
fmt.Println(string(b))
使用 Terraform 分配对 Hyper Protect Crypto Services 的访问权
以下示例用于为服务实例分配 Writer
角色:
使用 <hs-crypto>
作为服务名称。
resource "ibm_iam_user_policy" "policy" {
ibm_id = "test@example.com"
roles = ["Writer"]
resources {
service = "hs-crypto"
}
}
有关更多信息,请参阅 ibm_iam_user_policy。
管理对多个实例的访问权
如果您在不同帐户中有多个 Hyper Protect Crypto Services 实例,那么可能需要利用 IBM Cloud 企业来管理帐户和用户访问权。
-
创建企业层次结构
通过 IBM Cloud 企业,您可以集中管理多个帐户和资源。 您可以根据需要通过在企业帐户中嵌套帐户组或帐户来创建企业层次结构。 对企业和子帐户的访问管理是隔离的,以提供更大的安全性。 要了解如何创建企业并向企业添加帐户,请参阅 组织资源和分配访问权的最佳实践。
-
在资源组中组织帐户资源
Hyper Protect Crypto Services 实例与企业的子帐户相关联。 在每个帐户中,您可以在资源组中组织服务实例,以便可以向每个资源组分配不同的访问策略以启用独立访问控制。 有关如何创建资源组和组织资源,请参阅 组织资源的最佳实践。
-
分配用于管理企业和资源的访问权
根据列出的 Hyper Protect Crypto Services IAM 平台角色 和 服务角色,您可以为用户分配对企业层次结构的每个层的相应访问权。 您还可以通过定义访问组来对用户或 服务标识 进行分组,以简化分配访问权的过程。 有关分配访问权的更多信息,请参阅 云中的访问权管理。
-
使用 IBM Cloud API 密钥
您可以为用户或服务创建 IBM Cloud API 密钥 以跟踪和控制 API 使用情况。 用户 API 密钥与用户身份相关联,并继承分配给用户的所有访问权。 服务 API 密钥被授予与特定服务标识关联的访问权。 API 密钥还可用于 生成 IAM 令牌 以进行 API 调用认证。 有关如何管理 API 密钥,请参阅 管理用户 API 密钥 和 管理服务标识 API 密钥。
以下示例显示如何使用企业来管理多个实例和用户访问权。 假定您的组织有两个 Hyper Protect Crypto Services 实例用于开发和生产,两个单独的团队正在管理和操作这些实例。您可以创建以下企业层次结构以更好地管理帐户,实例和用户访问权:
- 使用单独的帐户和不同的资源组来管理用于开发目的和生产目的的实例。
- 为用户分配对相应资源的最低访问权。 例如,为企业经理分配帐户和计费管理的管理员角色。 为开发者团队成员分配用于对开发实例执行操作的编辑者和管理者角色。 为其他成员分配查看者和读者角色,以仅查看实例资源。
下一步
帐户所有者和管理员可以邀请用户并设置对应于用户可以执行的 Hyper Protect Crypto Services 操作的服务策略。 有关分配用户角色的更多信息,请参阅 管理对资源的访问权。