在 Continuous Delivery 中保護資料安全
IBM Cloud® Continuous Delivery 會在高可用性且安全的環境中管理您的資料庫:
- 資料在靜止狀態 (GPFS、LUKS 和內建磁碟) 和傳輸中 ( HTTPS 和 SSH) 透過使用 Continuous Delivery 服務或其依賴的服務和基礎架構內部的加密金鑰來加密。
- 個人資料只能在 Professional 方案中加密,方法是在 IBM® Key Protect for IBM Cloud® 服務或 IBM Cloud® Hyper Protect Crypto Services 服務的實例內使用根金鑰。
- 用戶端及系統認證儲存在已加密的磁碟上。
- 工具整合及 Delivery Pipeline 內容值的配置資料可能包含機密性資訊。 此資料是使用 Continuous Delivery 服務內部的加密金鑰來加密,因為它儲存在服務內部的資料庫中。
- 應用程式及資料會針對高可用性而配置。
- 僅限於需要資料以便支援及維護服務的使用者才能存取資料。
在 Continuous Delivery 中保護機密資料
Continuous Delivery 服務會先加密客戶擁有的機密資料,然後再將它儲存在服務內部使用的資料庫中。 機密資料包括協力廠商工具整合配置資料及 Delivery Pipeline 內容值。 使用 Continuous Delivery 服務內部的加密金鑰,或使用 IBM® Key Protect for IBM Cloud® 服務或 IBM Cloud® Hyper Protect Crypto Services 服務實例內指定的根金鑰中的加密金鑰,來加密資料。
DevOps 處理程序通常需要各種類型的認證(例如,使用者名稱和密碼、API 金鑰、服務金鑰和 SSH 金鑰)來與其他系統互動,以建置、測試和部署應用程式。 您負責確保這些認證不會無意中與預期對象之外的人員共用。 惡意動作者對這些認證的存取可能會中斷您的 IT 作業、導致非預期的成本,或者使用您的資源來啟動攻擊。 IBM 不負責保護和維護您認證的安全。
若要確保認證受到安全保護,請務必遵循以下指引:
- 不要將認證儲存在 Git 儲存庫中。 視儲存庫設定而定,組織的其他成員、其他 IBM Cloud 使用者或公用網際網路可能可看見儲存庫中的檔案。
- 不要在 Delivery Pipeline 定義中包含使用者認證,因為其他使用者可能可以看見它們。 具體來說,不要將使用者認證放置在 Delivery Pipeline 標準工作定義 Script、Delivery Pipeline Tekton yaml 檔案或由 Delivery Pipeline 啟動的 Script 中。
- 不要在執行管線時建立的日誌檔中發佈使用者認證,因為這些檔案可能會共用。
- 在對 Continuous Delivery API 的呼叫中,例如當您配置 工具整合、Tekton 管線環境內容或 Tekton 管線觸發程式內容時,請勿以純文字指定認證。
- 在對 POST /toolchains/{toolchain_id}/events API 的呼叫中,請勿包含認證、個人識別資訊或其他機密性資訊。 API 會將包含您指定資料的事件傳送至整合至工具鏈的 Event Notifications 實例。Event Notifications 隨後會將事件轉遞至已配置的目的地,例如電子郵件、SMS 及 Slack。
- 請勿在 Terraform 配置檔中以純文字指定認證,例如當您定義工具整合資源、Tekton 管線環境內容資源或 Tekton 管線觸發程式內容資源時。 相反地,請管理 Secret 儲存服務中的認證,並在 API 呼叫和 Terraform 配置中透過參照來指定它們。 如需依參照管理密鑰的相關資訊,請參閱 使用密鑰參照來保護您的認證。
IBM Cloud 提供可用於安全金鑰儲存空間和密碼的多個選項。
- 標準管線安全環境內容
- Tekton 管線安全環境內容
- IBM® Key Protect for IBM Cloud®
- IBM Cloud® Hyper Protect Crypto Services
- HashiCorp Vault
如需安全 DevOps 最佳作法的相關資訊,請參閱 DevOps 安全。
使用密鑰參照來保護您的認證
當您使用 Continuous Delivery 工具鏈及交付管線 (例如密碼、API 金鑰、憑證或其他記號) 時可以配置的許多內容都分類為密鑰或認證。 若要設定安全內容的值,您可以使用純文字或密鑰參照。 建議使用密鑰參照來設定安全內容的值。
當您使用 純文字 密鑰值設定安全內容時,Continuous Delivery 會主動在內部加密並儲存該值。 雖然此值在 Continuous Delivery 服務內保持安全,但服務無法保護用戶端上的值。 當您在瀏覽器中使用主控台、呼叫 API 或配置 Terraform 資源來設定安全內容時,可能會在本端系統上公開純文字密鑰。 純文字密鑰也更難以輪換。 當必須輪替密鑰 (例如 API 金鑰) 時,也必須找到並更新具有密鑰值的所有安全內容。
當您使用 密鑰參照 值來設定安全內容時,該值是特別格式化的字串,參照密鑰儲存體服務 (例如 IBM® Key Protect for IBM Cloud®、IBM Cloud® Secrets Manager 或 HashiCorp Vault) 內管理之密鑰的位置或位址。 雖然 Continuous Delivery 會主動在內部加密並儲存密鑰參照值,但該密鑰值不會在用戶端公開。 當 Continuous Delivery 必須擷取密鑰以代表您執行處理時,它會在內部從參照的密鑰儲存庫中擷取值。 密鑰參照也具有旋轉的復原力。 一般而言,當密鑰在密鑰儲存庫內旋轉時,密鑰的位置或位址會保持相同。 只會變更密鑰值本身。
支援兩種類型的密鑰參照: 依名稱或依 雲端資源名稱(CRN)。 目前,只有 Secrets Manager 工具整合支援依 CRN 參照密碼。 此格式容許更大的彈性,因為如果正確的 授權 已備妥,則您可以從不同帳戶中的 Secrets Manager 實例參照密鑰。
請確保考量下列必要條件,以在工具鏈範圍內指定密鑰參照:
- 密鑰儲存庫必須作為工具整合新增至工具鏈。 如需 Secret Store 工具整合的相關資訊,請參閱 配置 Key Protect、配置 Secrets Manager 及 配置 HashiCorp Vault。
- 必須配置 IAM 服務至服務授權原則,以容許來源工具鏈從目標密碼儲存庫中擷取密碼。 如需服務對服務授權的相關資訊,請參閱 使用授權來授與服務之間的存取權。
當您在主控台外部工作 (例如使用 API 或 Terraform) 時,請依名稱對密鑰參照使用下列格式:
{vault::SECRET_STORE_INTEGRATION_NAME.SECRET_NAME}
當您參照 Key Protect內包含的密鑰時。{vault::SECRET_STORE_INTEGRATION_NAME.SECRET_GROUP_NAME.SECRET_NAME}
當您參照 Secrets Manager內包含的密鑰時。{vault::SECRET_STORE_INTEGRATION_NAME.SECRET_NAME.FIELD_NAME}
當您引用 Vault 中包含的機密時。HashiCorp
秘密價值:
ref://secrets-manager.REGION.RESOURCE-GROUP.SECRETS-MANAGER-INSTANCE-NAME1/SECRETS-GROUP-NAME/SECRET-NAME
當您參照 Key Protect內包含的密鑰時。ref://secrets-manager.eu-de.EU-RG.SM-1/default/api-key
當您參照 Secrets Manager內包含的密鑰時。
例如,如果秘密是關鍵值,則可以選擇關鍵:
ref://secrets-manager.eu-gb.Default.Secrets%20Manager-zc/Default/mk-kv-pair?key=ibmcloud-api-key
其中:
SECRETS-MANAGER-INSTANCE-NAME1
是工具鏈中 Secret Store 整合的名稱,不是 Secret Store 服務實例的名稱。SECRET_GROUP_NAME
是 Secrets Manager內包含密鑰的群組名稱。SECRET_NAME
是秘密儲存庫中秘密的名稱。KEY_NAME
是鍵值秘密中鍵的名稱。
若要使用 CRN 密鑰參照,請直接從 Secrets Manager 使用者介面或使用 CLI、API 或 SDK 以程式化方式取得密鑰 CRN。
使用主控台來指定密鑰參照
當您使用主控台時,分類為安全的工具整合配置內容及 Delivery Pipeline 內容的欄位會標註金鑰圖示。 按一下此圖示以開啟對話框,您可以從中選取密鑰儲存庫及密鑰。 或者,若為 CRN 的密鑰參照,請將 CRN 值直接貼到內容中。
使用 API 指定密鑰參照
您可以在對 API 的呼叫中使用具有密鑰參照值的安全內容,這需要 IAM 持有人記號。 或者,如果您使用 SDK,請 取得 IAM API 金鑰,並使用環境變數來設定用戶端選項。
export CD_TOOLCHAIN_AUTH_TYPE=iam && \
export CD_TOOLCHAIN_APIKEY={iam_api_key} && \
export CD_TOOLCHAIN_URL=https://api.us-south.devops.cloud.ibm.com/toolchain/v2
依名稱使用密鑰參照
下列範例示範如何依名稱 secret 來使用密鑰參照。 它顯示如何使用儲存在 Key Protect實例中的 API 記號 (Slack Webhook) 來建立 Slack 工具整合。 此範例假設工具鏈已包含 Key Protect 工具整合,且已備妥從來源工具鏈至目標 Key Protect 服務實例的 IAM 服務對服務授權原則。
curl -X POST \
https://api.us-south.devops.cloud.ibm.com/toolchain/v2/toolchains/01234567-89ab-cdef-0123-456789abcdef/tools \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"tool_type_id": "slack",
"parameters": {
"api_token": "{vault::my-kms-tool-integration.my-slack-webhook}",
"channel_name": "my_slack_channel_name",
"team_url": "my_slack_team_name"
}
}'
const CdToolchainV2 = require('@ibm-cloud/continuous-delivery/cd-toolchain/v2');
...
(async () => {
const toolchainService = CdToolchainV2.newInstance();
const slackParameters = {
api_token: "{vault::my-kms-tool-integration.my-slack-webhook}",
channel_name: "my_slack_channel_name",
team_url: "my_slack_team_name"
};
const toolPrototypeModel = {
toolchainId: "01234567-89ab-cdef-0123-456789abcdef",
toolTypeId: "slack",
parameters: slackParameters
};
const slackTool = await toolchainService.createTool(toolPrototypeModel);
})();
import (
"github.com/IBM/continuous-delivery-go-sdk/cdtoolchainv2"
)
...
toolchainClientOptions := &cdtoolchainv2.CdToolchainV2Options{}
toolchainClient, err := cdtoolchainv2.NewCdToolchainV2UsingExternalConfig(toolchainClientOptions)
slackParameters := map[string]interface{}{
"api_token": "{vault::my-kms-tool-integration.my-slack-webhook}",
"channel_name": "my_slack_channel_name",
"team_url": "my_slack_team_name",
}
createToolOptions := toolchainClient.NewCreateToolOptions("01234567-89ab-cdef-0123-456789abcdef", "slack")
createToolOptions.SetParameters(slackParameters)
slackTool, response, err := toolchainClient.CreateTool(createToolOptions)
from ibm_continuous_delivery.cd_toolchain_v2 import CdToolchainV2
...
toolchain_service = CdToolchainV2.new_instance()
slack_parameters = {
"api_token": "{vault::my-kms-tool-integration.my-slack-webhook}",
"channel_name": "my_slack_channel_name",
"team_url": "my_slack_team_name"
}
slack_tool = toolchain_service.create_tool(
toolchain_id = "01234567-89ab-cdef-0123-456789abcdef",
tool_type_id = "slack",
parameters = slack_parameters
)
import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.CdToolchain;
import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.model.*;
...
CdToolchain toolchainService = CdToolchain.newInstance();
HashMap<String, Object> slackParameters = new HashMap<>();
slackParameters.put("api_token", "{vault::my-kms-tool-integration.my-slack-webhook}");
slackParameters.put("channel_name", "my_slack_channel_name");
slackParameters.put("team_url", "my_slack_team_name");
CreateToolOptions createSlackToolOptions = new CreateToolOptions.Builder()
.parameters(slackParameters)
.toolchainId({toolchain_id})
.toolTypeId("slack")
.build();
Response<ToolchainToolPost> response = toolchainService.createTool(createSlackToolOptions).execute();
ToolchainToolPost slackTool = response.getResult();
下表列出並說明前一個範例中使用的每一個密鑰參照值。
值 | 說明 |
---|---|
my-kms-tool-integration |
工具鏈中 Key Protect 工具整合的名稱。 它不是 Key Protect 服務實例的名稱。 |
my-slack-webhook |
在 Key Protect 服務實例中管理的標準金鑰名稱。 |
使用 CRN 的密鑰參照
下列範例示範如何使用 CRN 密鑰所參照的密鑰。 它顯示如何使用儲存在 Secrets Manager實例中的 API 記號 (Slack Webhook) 來建立 Slack 工具整合。 此範例假設工具鏈已包含 Secrets Manager 工具整合,且已備妥從來源工具鏈至目標 Secrets Manager 服務實例的 IAM 服務至服務授權原則。
curl -X POST \
https://api.us-south.devops.cloud.ibm.com/toolchain/v2/toolchains/01234567-89ab-cdef-0123-456789abcdef/tools \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"tool_type_id": "slack",
"parameters": {
"api_token": "crn:v1:bluemix:public:secrets-manager:us-south:a/9bb43e401a7a87d15145da761da98571:604de62c-c04f-3f5e-b7e8-4acafe0ecde7:secret:5ec17023-b631-fbcb-ef9c-4f2eb01f1dda",
"channel_name": "my_slack_channel_name",
"team_url": "my_slack_team_name"
}
}'
const CdToolchainV2 = require('@ibm-cloud/continuous-delivery/cd-toolchain/v2');
...
(async () => {
const toolchainService = CdToolchainV2.newInstance();
const slackParameters = {
api_token: "crn:v1:bluemix:public:secrets-manager:us-south:a/9bb43e401a7a87d15145da761da98571:604de62c-c04f-3f5e-b7e8-4acafe0ecde7:secret:5ec17023-b631-fbcb-ef9c-4f2eb01f1dda",
channel_name: "my_slack_channel_name",
team_url: "my_slack_team_name"
};
const toolPrototypeModel = {
toolchainId: "01234567-89ab-cdef-0123-456789abcdef",
toolTypeId: "slack",
parameters: slackParameters
};
const slackTool = await toolchainService.createTool(toolPrototypeModel);
})();
import (
"github.com/IBM/continuous-delivery-go-sdk/cdtoolchainv2"
)
...
toolchainClientOptions := &cdtoolchainv2.CdToolchainV2Options{}
toolchainClient, err := cdtoolchainv2.NewCdToolchainV2UsingExternalConfig(toolchainClientOptions)
slackParameters := map[string]interface{}{
"api_token": "crn:v1:bluemix:public:secrets-manager:us-south:a/9bb43e401a7a87d15145da761da98571:604de62c-c04f-3f5e-b7e8-4acafe0ecde7:secret:5ec17023-b631-fbcb-ef9c-4f2eb01f1dda",
"channel_name": "my_slack_channel_name",
"team_url": "my_slack_team_name",
}
createToolOptions := toolchainClient.NewCreateToolOptions("01234567-89ab-cdef-0123-456789abcdef", "slack")
createToolOptions.SetParameters(slackParameters)
slackTool, response, err := toolchainClient.CreateTool(createToolOptions)
from ibm_continuous_delivery.cd_toolchain_v2 import CdToolchainV2
...
toolchain_service = CdToolchainV2.new_instance()
slack_parameters = {
"api_token": "crn:v1:bluemix:public:secrets-manager:us-south:a/9bb43e401a7a87d15145da761da98571:604de62c-c04f-3f5e-b7e8-4acafe0ecde7:secret:5ec17023-b631-fbcb-ef9c-4f2eb01f1dda",
"channel_name": "my_slack_channel_name",
"team_url": "my_slack_team_name"
}
slack_tool = toolchain_service.create_tool(
toolchain_id = "01234567-89ab-cdef-0123-456789abcdef",
tool_type_id = "slack",
parameters = slack_parameters
)
import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.CdToolchain;
import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.model.*;
...
CdToolchain toolchainService = CdToolchain.newInstance();
HashMap<String, Object> slackParameters = new HashMap<>();
slackParameters.put("api_token", "crn:v1:bluemix:public:secrets-manager:us-south:a/9bb43e401a7a87d15145da761da98571:604de62c-c04f-3f5e-b7e8-4acafe0ecde7:secret:5ec17023-b631-fbcb-ef9c-4f2eb01f1dda");
slackParameters.put("channel_name", "my_slack_channel_name");
slackParameters.put("team_url", "my_slack_team_name");
CreateToolOptions createSlackToolOptions = new CreateToolOptions.Builder()
.parameters(slackParameters)
.toolchainId({toolchain_id})
.toolTypeId("slack")
.build();
Response<ToolchainToolPost> response = toolchainService.createTool(createSlackToolOptions).execute();
ToolchainToolPost slackTool = response.getResult();
使用 Terraform 指定密鑰參照
您可以使用 Terraform 中具有密鑰參照值的安全內容。
依名稱使用密鑰參照
下列範例顯示 Key Protect 服務實例的完整資源集、標準金鑰 (Slack Webhook)、工具鏈、IAM 服務至服務授權原則、Key Protect 工具整合,以及依名稱參照 Webhook 密碼的 Slack 工具整合。
此範例還包括 ibm_kms_key
標準金鑰資源,其 payload
設為 base64-encoded Slack Webhook 密碼。 它會顯示索引鍵名稱與 Slack 工具整合資源內密鑰參照值之間的關係。 實際上,從個別 Terraform 專案或只有有限授權人員才能存取的其他處理程序提前建立標準金鑰更安全。
variable "slack_webhook" {}
variable "slack_channel" {}
variable "slack_team" {}
data "ibm_resource_group" "rg" {
name = "default"
}
resource "ibm_resource_instance" "kms" {
name = "my-kms-service-instance"
service = "kms"
plan = "tiered-pricing"
location = "us-south"
resource_group_id = data.ibm_resource_group.rg.id
}
resource "ibm_kms_key" "key" {
instance_id = ibm_resource_instance.kms.guid
key_name = "my-slack-webhook"
standard_key = true
payload = base64encode(var.slack_webhook)
}
resource "ibm_cd_toolchain" "toolchain" {
name = "tf-toolchain-secret-refs"
resource_group_id = data.ibm_resource_group.rg.id
}
resource "ibm_iam_authorization_policy" "s2s" {
source_service_name = "toolchain"
source_resource_instance_id = ibm_cd_toolchain.toolchain.id
target_service_name = "kms"
target_resource_instance_id = ibm_resource_instance.kms.guid
roles = ["Viewer", "ReaderPlus"]
}
resource "ibm_cd_toolchain_tool_keyprotect" "integration" {
toolchain_id = ibm_cd_toolchain.toolchain.id
parameters {
name = "my-kms-tool-integration"
region = var.region
resource_group = data.ibm_resource_group.rg.name
instance_name = ibm_resource_instance.kms.name
}
depends_on = [
ibm_iam_authorization_policy.s2s
]
}
resource "ibm_cd_toolchain_tool_slack" "integration" {
toolchain_id = ibm_cd_toolchain.toolchain.id
parameters {
webhook = "{vault::my-kms-tool-integration.my-slack-webhook}"
channel_name = var.slack_channel
team_name = var.slack_team
}
depends_on = [
ibm_cd_toolchain_tool_keyprotect.integration
ibm_kms_key.key
]
}
下表列出並說明前一個範例中使用的每一個密鑰參照值。
值 | 說明 |
---|---|
my-kms-tool-integration |
工具鏈中 Key Protect 工具整合的名稱。 它不是 Key Protect 服務實例的名稱。 |
my-slack-webhook |
在 Key Protect 服務實例中管理的標準金鑰名稱。 |
使用 CRN 的密鑰參照
下列範例假設 Secrets Manager 的實例存在。 它會顯示任意密碼 (Slack Webhook)、工具鏈、IAM 服務至服務授權原則、Secrets Manager 工具整合,以及透過 CRN 參照 Webhook 密碼的 Slack 工具整合。
此範例包括 ibm_sm_arbitrary_secret
金鑰資源,其中 payload
設為 Slack Webhook 密碼。 它顯示如何使用來自金鑰資源的 CRN 作為 Slack 工具整合資源內的密鑰參照值。 實際上,從個別 Terraform 專案或只有有限授權人員才能存取的其他處理程序提前建立標準金鑰更安全。
variable "slack_webhook" {}
variable "slack_channel" {}
variable "slack_team" {}
variable "secrets_manager_name" {}
data "ibm_resource_group" "rg" {
name = "default"
}
data ibm_resource_instance "sm" {
name = var.secrets_manager_name
}
resource "ibm_sm_arbitrary_secret" "key" {
instance_id = data.ibm_resource_instance.sm.guid
region = data.ibm_resource_instance.sm.location
secret_group_id = "default"
name = "my-slack-webhook"
payload = "var.slack_webhook"
}
resource "ibm_cd_toolchain" "toolchain" {
name = "tf-toolchain-secret-refs"
resource_group_id = data.ibm_resource_group.rg.id
}
resource "ibm_iam_authorization_policy" "s2s" {
source_service_name = "toolchain"
source_resource_instance_id = ibm_cd_toolchain.toolchain.id
target_service_name = "secrets-manager"
target_resource_instance_id = data.ibm_resource_instance.sm.guid
roles = ["Viewer", "SecretsReader"]
}
resource "ibm_cd_toolchain_tool_secretsmanager" "integration" {
toolchain_id = ibm_cd_toolchain.toolchain.id
parameters {
name = "my-sm-tool-integration"
instance_id_type = "instance-crn"
instance_crn = data.ibm_resource_instance.sm.resource_crn
}
depends_on = [
ibm_iam_authorization_policy.s2s
]
}
resource "ibm_cd_toolchain_tool_slack" "integration" {
toolchain_id = ibm_cd_toolchain.toolchain.id
parameters {
webhook = ibm_sm_arbitrary_secret.key.crn
channel_name = var.slack_channel
team_name = var.slack_team
}
depends_on = [
ibm_cd_toolchain_tool_secretsmanager.integration
]
}
使用客戶管理的金鑰來保護您的資料
依預設,Continuous Delivery 會使用 Continuous Delivery 服務內部的金鑰來加密資料。 為了加強安全和控制,您可以配置 Continuous Delivery,以使用您管理的金鑰來加密資料。 此選項僅在「專業方案」下可用,且僅在您佈建 Continuous Delivery 服務實例時可用。 如果您選取自己的「金鑰管理服務」,例如 Key Protect 或 IBM Cloud® Hyper Protect Crypto Services,則下列值會使用您自己的金鑰來加密,而不是使用 Continuous Delivery 服務內部的加密金鑰。
元件 | 值 |
---|---|
Toolchain | 內容和參數 |
管線 |
|
整合 |
|
IBM Cloud® DevOps Insights | 測試記錄中的附件 |
下列元件僅使用提供者管理的加密金鑰來加密個人資料。
元件 | 值 |
---|---|
Git Repos and Issue Tracking |
|
如需建立使用客戶金鑰加密資料的 Continuous Delivery 服務實例的相關資訊,請參閱 建立 Continuous Delivery 服務實例。
使用協力廠商工具整合時保護資料
當您配置工具鏈的工具整合時,您會明確啟用 Continuous Delivery 服務與工具整合之間的資料共用。 共用的資料類型,以及是否將資料傳送至工具、從工具接收或兩者,視工具整合的類型而定。
在配置工具整合之前,請確定您瞭解共用哪些資料。 如果您使用受管制的資料或您視為機密的資料,請確定協力廠商工具使用情形及任何可能與其共用的資料不會危及資源的機密性、完整性或可用性,或違反法規控制。
若要進一步瞭解工具整合,請參閱 配置工具整合。
使用 Git Repos and Issue Tracking 時保護資料
Git Repos and Issue Tracking 是 Continuous Delivery 服務的 IBM代管元件。 您提供給 Git Repos and Issue Tracking的所有資料 (包括但不限於原始檔、問題、取回要求及專案配置內容) 都在 Continuous Delivery內安全地管理。 不過,Git Repos and Issue Tracking 支援將資料匯出、傳送或以其他方式共用給使用者和協力廠商的各種機制。
Git Repos and Issue Tracking 共用資訊的能力通常適用於許多社交編碼平台。 不過,這類共用可能會與適用於您企業的法規控制衝突。 在 Git Repos and Issue Tracking中建立專案之後,但在將任何檔案、問題、記錄或其他資料委託給專案之前,請檢閱專案設定,並變更您認為保護資料所需的任何設定。 要檢閱的設定包括可見性層次、電子郵件通知、整合、Web 連結鉤、存取記號、部署記號及部署金鑰。
專案與檔案命名
在 Git Repos and Issue Tracking 中,專案名稱和專案儲存庫中儲存的檔案路徑名會成為 URL 中的區段,您可以使用 URL 與專案互動,無論是透過瀏覽器、API 或 Terraform。 您應該假設 URL 並不安全。 因此,請勿在專案名稱和儲存庫檔案路徑名稱中使用或嵌入敏感資訊。
專案可見性層次
Git Repos and Issue Tracking 專案可以具有下列其中一個可見性層次: 專用、內部或公用。
- 只有專案成員才能看到專用專案。 此設定是新專案的預設可見性層次,也是您資料最安全的可見性層次。
- 所有登入 IBM Cloud的使用者都可以看到內部專案。
- 公用專案對任何人都可見。
若要將專案存取權限制為僅專案成員,請完成下列步驟:
- 從專案資訊看板中,按一下 設定 > 一般。
- 在「一般設定」頁面上,按一下 可見性 > 專案特性 > 許可權。
- 找出專案可見性設定。
- 如果尚未選取,請選取「隱私」。
- 按一下儲存變更。
專案成員資格
Git Repos and Issue Tracking 是雲端管理的社交編碼環境,可供所有 Continuous Delivery 使用者使用。 如果您是 Git Repos and Issue Tracking 專案維護者或擁有者,您可以邀請任何使用者和群組成員加入專案。IBM Cloud 對您可以邀請加入專案的人員沒有任何限制。 因為您可以邀請任何人加入 GitLab 專案,所以請小心只邀請屬於您公司或組織的那些使用者或群組,除非您明確想要這樣做。
如需管理 GitLab 專案成員的相關資訊,請參閱 專案成員。
專案電子郵件設定
依預設,Git Repos and Issue Tracking 會透過電子郵件通知專案成員專案活動。 這些電子郵件通常包括使用者提供給 Git Repos and Issue Tracking 的客戶擁有的資料。 例如,如果使用者將評論張貼至問題,則 Git Repos and Issue Tracking 會傳送電子郵件至所有訂閱者,其中包括評論副本、張貼評論的使用者以及張貼評論的時間等資訊。 若要關閉專案的所有電子郵件通知,請完成下列步驟:
- 從專案資訊看板中,按一下 設定 > 一般。
- 在「一般設定」頁面上,按一下 可見性 > 專案特性 > 許可權。
- 選取 停用電子郵件通知 勾選框。
- 按一下儲存變更。
專案整合和 Webhook
Git Repos and Issue Tracking 專案也可以配置整合或 Webhook 至其他系統,或配備存取記號、部署記號及部署金鑰。 若要從專案資訊看板檢閱或變更可能使用專案配置的整合、Webhook、記號及金鑰,請完成下列步驟:
- 從專案資訊看板中,按一下 設定。
- 按一下 整合,以使用專案與其他應用程式的整合。
- 按一下 Webhook,以使用專案的 Webhook 至其他系統。
- 按一下 存取記號,以使用可能授與專案存取權的存取記號。
- 展開 部署記號,以使用可能授與專案存取權的部署記號。
- 展開 部署金鑰,以使用可能授與專案存取權的部署金鑰。
若要進一步瞭解如何使用 Git Repos and Issue Tracking,請參閱 Git Repos and Issue Tracking。
使用 Delivery Pipeline 時保護資料
Continuous Delivery 管線會執行您提供的工作及步驟。 Continuous Delivery 服務可安全地管理管線執行所產生的日誌輸出及建置構件。 不過,Continuous Delivery 不會限制或管理管線工作或步驟 Script 的功能。
當您開發及配置管線工作及步驟 Script 時,請確定您的 Script 未執行可能危及資源機密性、完整性或可用性的動作,或其他違反法規控制的動作。
若要進一步瞭解 Delivery Pipeline,請參閱 使用管線 及 使用 Tekton 管線。
使用 Terraform 時保護資料
當您使用 Terraform 來管理 Continuous Delivery 資源時,Terraform 處理的部分變數、引數及屬性可能包含密碼值,例如密碼或 API 記號。 這些值可能由您在 Terraform 配置語言檔案中指定,也可能由 Terraform 工具以 Terraform 狀態擷取及儲存。 下列清單提供當您使用 Terraform 時必須保護的密鑰值範例。
- IBM Cloud Terraform 提供者向 IBM Cloud進行鑑別所需的 IAM API 金鑰。 此索引鍵指定在 Terraform 模組的
provider "ibm"
區塊的ibmcloud_api_key
引數中。 - 代表部分
ibm_cd_toolchain_tool
資源及資料來源中密碼、存取記號、API 金鑰或其他類型的密碼的引數或屬性。 - 在部分
ibm_cd_tekton_pipeline_property
或ibm_cd_tekton_pipeline_trigger_property
資源或資料來源中指定為密鑰的內容值。
使用 IBM Cloud Schematics 及下列作法來限制機密資料的曝光:
- 使用 Terraform 變數將值注入 Terraform 區塊。
- 使用 IBM Cloud Schematics 可安全地管理及共用密碼。
- 使用 IBM Cloud Schematics 可安全地管理及共用 Terraform 狀態。
- 當您在
ibm_cd_toolchain_tool
、ibm_cd_tekton_pipeline_property
或ibm_cd_tekton_pipeline_trigger_property
資源內指定密鑰時,請使用 Continuous Delivery 密鑰參照。
如果您使用 Terraform 指令行工具,請使用下列實務來限制機密資料的曝光:
- 使用 Terraform 變數將值注入 Terraform 區塊。
- 當您執行
terraform plan
或terraform apply
之類的指令時,容許 Terraform 指令行工具提示輸入值。 - 控制對 Terraform 狀態的存取權,因為它可能包含密鑰。 本端 Terraform 狀態以純文字撰寫。
- 當您在
ibm_cd_toolchain_tool
、ibm_cd_tekton_pipeline_property
或ibm_cd_tekton_pipeline_trigger_property
資源內指定密鑰時,請使用 Continuous Delivery 密鑰參照。
若要限制機密資料的曝光,請避免下列作法:
- 在任何 Terraform 區塊 (例如資源區塊、資料區塊或提供者區塊) 內以純文字撰寫密鑰。
- 在
terraform.tfvars
、terraform.tfvars.json
、*.auto.tfvars
或*.auto.tfvars.json
檔案內以純文字撰寫密鑰。 - 將包含密鑰的
terraform.tfvars
、terraform.tfvars.json
、*.auto.tfvars
或*.auto.tfvars.json
檔案交付至原始碼儲存庫。 - 將 Terraform 狀態遞送至原始碼儲存庫。
使用 IBM Cloud Schematics 而非 Terraform 指令行工具來處理 Terraform 配置。IBM Cloud Schematics 提供數個優點,例如機密配置內容的安全儲存體。
如需 IBM Cloud Schematics 的相關資訊,請參閱 IBM Cloud Schematics 文件。
如需 Terraform 狀態中機密資料的相關資訊,請參閱 狀態中的機密資料。
如需如何在 Terraform 中設定輸入變數的相關資訊,請參閱 將值指派給根模組變數。
從 Continuous Delivery 刪除資料
當您刪除 Continuous Delivery 服務實例時,不會刪除相關工具鏈、工具整合、工具及資料 (包括個人資料)。 如需如何管理及刪除與工具鏈、工具整合及工具一起儲存的資料的相關資訊,請參閱 修改、探索及刪除個人資料。