管理使用者存取權
IBM Cloud Hyper Protect Crypto Services 支援由 IBM Cloud® Identity and Access Management控管的集中式存取控制系統,以協助您管理使用者及存取加密金鑰。
角色和許可權
下表顯示 Hyper Protect Crypto Services 支援的角色。
| 角色 | 許可權 |
|---|---|
| 服務管理者 | 管理 平台存取權 及 服務存取權、授與對儲存庫的存取權、建立及刪除服務實例,以及管理金鑰。 IBM Cloud 帳戶擁有者會自動獲指派服務管理者許可權。 |
| 加密單位管理者 | 提供簽章金鑰,並簽署「授信金鑰登錄 (TKE)」管理指令,例如用於新增另一個加密單位管理者。 在某些情況下,加密單位管理者也可以是主要金鑰管理人。 |
| 主要金鑰管理人 | 提供用於起始設定服務實例的主要金鑰部分。 在某些情況下,主要金鑰管理人也可以是加密單位管理者。 |
| 服務使用者 | 透過使用者介面和 API 管理根金鑰和標準金鑰,並透過 PKCS #11 API 或企業 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,您具有與「讀者」相同的許可權,並具有擷取標準金鑰資料的其他能力。
- 作為 撰寫者,您可以建立、修改、替換及使用金鑰。 寫出器無法刪除或停用金鑰。
- 身為 管理員,您可以執行「讀者」、ReaderPlus 及「撰寫者」可以執行的所有動作,包括刪除金鑰及設定金鑰原則的能力。
- 作為 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)」使用智慧卡或軟體 CLI 外掛程式搭配 IAM 鑑別。 不包括在智慧卡或 CLI 上處理在本端管理金鑰的指令。 這些指令不會與 HSM 網域互動。
-
Unified Key Orchestrator 用於多雲端金鑰管理和編排。 除了設定預設 IAM 角色之外,您還可以根據需要 建立自訂 Unified Key Orchestrator 角色。
-
HSM API (PKCS #11 API 和 GREP11 API) 用於應用程式層次加密。
-
「金鑰管理交互作業能力通訊協定 (KMIP)」配接器用來使用 Hyper Protect Crypto Services 來配置 VMware 服務的 KMIP,以使用您自己的根金鑰來啟用 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。 |
| 動作 | 讀者 | 金鑰管理人 - Deployer | 金鑰管理人 - Creator | 儲存庫管理者 | 管理員 |
|---|---|---|---|---|---|
| 啟動預先作用中的金鑰。 | |||||
| 毀損預先作用中的金鑰。 | |||||
| 取消啟動作用中金鑰。 | |||||
| 指派作用中的金鑰。 | |||||
| 解除鏈結作用中金鑰。 | |||||
| 毀損已取消啟動的金鑰。 | |||||
| 指派已取消啟動的金鑰。 | |||||
| 重新啟動已取消啟動的金鑰。 | |||||
| 解除鏈結已取消啟動的金鑰。 | |||||
| 從儲存庫中移除毀損的金鑰。 | |||||
| 讀取受管理金鑰詳細資料。 | |||||
| 列出受管理金鑰。 | |||||
| 寫入或編輯受管理金鑰詳細資料。 | |||||
| 旋轉受管理金鑰。 | |||||
| 刪除受管理金鑰。 | |||||
| 產生金鑰的金鑰資料。 | |||||
| 將金鑰配送至已指派的金鑰儲存庫。 | |||||
| 寫入金鑰啟動或到期日。 | |||||
| 寫入金鑰標籤。 | |||||
| 讀取金鑰儲存庫詳細資料。 | |||||
| 列出金鑰儲存庫。 | |||||
| 寫入或編輯金鑰儲存庫詳細資料。 | |||||
| 刪除內部金鑰儲存庫,或中斷與外部金鑰儲存庫的連線。 | |||||
| 讀取金鑰範本詳細資料。 | |||||
| 列出金鑰範本。 | |||||
| 撰寫或編輯金鑰範本。 | |||||
| 刪除金鑰範本。 | |||||
| 讀取儲存庫詳細資料。 | |||||
| 列出儲存庫。 | |||||
| 寫入或編輯儲存庫詳細資料。 | |||||
| 刪除儲存庫。 | |||||
| 使用外部金鑰儲存庫開始對 UKO 基本價格進行計費。 | |||||
| 建立超出免費金額的付費金鑰儲存庫。 |
| 動作 | 讀者 | ReaderPlus | 撰寫者 | 管理員 | KMS 金鑰清除 |
|---|---|---|---|---|---|
| 建立金鑰。 | |||||
| 匯入金鑰。 | |||||
| 擷取金鑰。 | |||||
| 擷取金鑰 meta 資料。 | |||||
| 擷取金鑰總計。 | |||||
| 列出金鑰。 | |||||
| 包裝金鑰。 | |||||
| 解除包裝金鑰。 | |||||
| 重新包裝金鑰。 | |||||
| 修補金鑰。 | |||||
| 旋轉金鑰。 | |||||
| 停用金鑰。 | |||||
| 啟用金鑰。 | |||||
| 排定刪除金鑰。 | |||||
| 取消刪除金鑰。 | |||||
| 刪除金鑰。 | |||||
| 清除金鑰。 | |||||
| 還原金鑰。 | |||||
| 設定關鍵原則。 | |||||
| 列出金鑰原則。 | |||||
| 設定實例原則。 | |||||
| 列出實例原則。 | |||||
| 建立匯入記號。 | |||||
| 擷取匯入記號。 | |||||
| 建立登錄。1 | |||||
| 列出金鑰的登錄。 | |||||
| 列出任何金鑰的登錄。 | |||||
| 更新登錄。1 | |||||
| 取代登錄。1 | |||||
| 刪除登錄。1 | |||||
| 建立金鑰環。 | |||||
| 列出金鑰環。 | |||||
| 刪除金鑰環。 | |||||
| 建立金鑰別名。 | |||||
| 刪除金鑰別名。 |
1: 此動作由啟用金鑰登錄支援的 整合式服務 代表您執行。 進一步瞭解。
| 動作 | 讀者 | ReaderPlus | 撰寫者 | 管理員 |
|---|---|---|---|---|
| 取得機制清單和資訊 | ||||
| 建立或刪除金鑰儲存庫 | ||||
| 列出金鑰儲存庫 | ||||
| 產生金鑰 | ||||
| 產生金鑰組 | ||||
| 儲存金鑰 | ||||
| 隨機產生 | ||||
| 列出金鑰 | ||||
| 取得或設定索引鍵屬性 | ||||
| 包裝金鑰 | ||||
| 重新包裝金鑰 | ||||
| 解除包裝金鑰 | ||||
| 更新金鑰 | ||||
| Encrypt | ||||
| Decrypt | ||||
| 簽章 | ||||
| 驗證 | ||||
| 摘要 |
| 動作 | 讀者 | ReaderPlus | 撰寫者 | 管理員 | VMWare KMIP Manager |
|---|---|---|---|---|---|
| 啟動 KMIP 端點。 | |||||
| 取消啟動 KMIP 端點。 | |||||
| 取得 KMIP 端點的狀態。 | |||||
| 將用戶端憑證新增至 KMIP 端點,以使用相互 TLS。 | |||||
| 從 KMIP 端點刪除用戶端憑證,以使用相互 TLS。 |
在使用者介面中指派 Hyper Protect Crypto Services 的存取權
在使用者介面中指派存取權有兩種常見的方式:
- 每個使用者的存取原則。 您可以從使用者介面中的 管理 > 存取權 (IAM) > 使用者 頁面管理每個使用者的存取原則。 如需指派 IAM 存取權之步驟的相關資訊,請參閱 管理資源的存取權。
- 存取群組。 存取群組可用來簡化存取管理,方法是將存取權指派給群組一次,然後您可以視需要在群組中新增或移除使用者,以控制其存取權。 您可以從使用者介面中的 管理 > 存取權 (IAM) > 存取權群組 頁面管理存取群組及其存取權。 如需相關資訊,請參閱 在使用者介面中指派群組的存取權。
在 CLI 中指派對 Hyper Protect Crypto Services 的存取權
如需指派、移除及檢閱存取權的逐步指示,請參閱 使用 CLI 指派存取權資源。 下列範例顯示為服務實例指派 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 |
| 金鑰管理人 - Creator | crn:v1:bluemix:public:hs-crypto::::serviceRole:KeyCustodianCreator |
| 金鑰管理人 - Deployer | crn:v1:bluemix:public:hs-crypto::::serviceRole:KeyCustodianDeployer |
下列範例是針對服務實例指派 Writer 角色:
使用 <hs-crypto> 作為服務名稱,並參照「角色 ID」值表格,以確保您使用 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 平台角色 及 服務角色,您可以為使用者指派對企業階層每一層的個別存取權。 您也可以透過定義存取群組來將使用者或 服務 ID 分組,以簡化指派存取權的處理程序。 如需指派存取權的相關資訊,請參閱 雲端中的存取權管理。
-
使用 IBM Cloud API 金鑰
您可以為使用者或服務建立 IBM Cloud API 金鑰,以追蹤及控制 API 使用情形。 使用者 API 金鑰與使用者身分相關聯,並繼承使用者獲指派的所有存取權。 服務 API 金鑰會獲授與與特定服務 ID 相關聯的存取權。 API 金鑰也可以用來 產生 IAM 記號,以進行 API 呼叫鑑別。 如需如何管理 API 金鑰,請參閱 管理使用者 API 金鑰 及 管理服務 ID API 金鑰。
下列範例顯示如何使用企業來管理多個實例及使用者存取權。 假設您的組織有兩個 Hyper Protect Crypto Services 實例用於開發及正式作業,且有兩個個別團隊管理及操作這些實例。您可以建立下列企業階層,以更好地管理帳戶、實例及使用者存取權:
- 使用個別帳戶及特殊資源群組來管理用於開發及正式作業目的的實例。
- 將對應資源的最低存取權指派給使用者。 例如,將帳戶及計費管理的管理者角色指派給企業管理員。 為開發人員團隊成員指派編輯者及管理員角色,以對開發實例執行作業。 將檢視者和讀者角色指派給其他成員,以便只檢視實例資源。
下一步
帳戶擁有者及管理者可以邀請使用者,以及設定對應於使用者可執行之 Hyper Protect Crypto Services 動作的服務原則。 如需指派使用者角色的相關資訊,請參閱 管理對資源的存取權。