建立 IAM 認證
您可以使用 IBM Cloud® Secrets Manager 動態產生 IAM 認證,以存取需要 IAM 認證的 IBM Cloud 資源。
IAM 認證是 動態密碼這是一個唯一值,例如密碼或 API 金鑰,它會動態建立並租賃給需要存取受保護資源的應用程式。 在動態密鑰達到其租賃結束之後,會撤銷對受保護資源的存取權,並自動刪除該密鑰。,可用來存取 IBM Cloud 資源。 一組 IAM 認證包含服務 ID 及每次讀取或存取受保護資源時所產生的 API 金鑰。 您可以在 IAM 認證建立時為其定義存活時間 (TTL) 或租賃持續時間,以縮短密鑰存在的時間量。
若要進一步瞭解您可以在 Secrets Manager中管理的密鑰類型,請參閱 何謂密鑰?
開始之前
開始之前,請確定您具有必要的存取層次。 若要建立或新增密鑰,您需要 撰寫者 服務角色或更高版本。
IAM 憑證需要先執行設定步驟,然後才能開始在服務中建立或管理它們。 如需相關資訊,請參閱 配置 IAM 認證引擎。
變更 IAM 認證密鑰的 TTL 時,只會在下一個密鑰版本輪替時套用它。
Secrets Manager 建立的 IAM 認證秘密也會是 IAM API 金鑰的名稱。 例如,一個名為 my-secret-name 的秘訣會有一個匹配的 API 金鑰,名為 Secrets-Manager-IAM-Secret-my-secret-name。 如果您之後重新命名 Secrets Manager 中的秘密,則此變更不會反映在 IAM 中,但功能不會中斷。
帳號管理員(或任何擁有所需存取權限等級的實體)可以從外部變更由 Secrets Manager 建立和管理的 IAM 授權憑證。 如果在 Secrets Manager 以外刪除這樣的服務 ID 或 API 金鑰,服務的行為可能會出乎意料。 例如,您可能無法建立或輪替認證。
在使用者介面中建立 IAM 認證
若要使用 Secrets Manager 使用者介面來建立 IAM 認證,請完成下列步驟。
-
在主控台中,按一下 功能表 圖示
> 資源清單。
-
從服務清單中,選取 Secrets Manager的實例。
-
在 密鑰 表格中,按一下 新增。
-
從密鑰類型清單中,按一下 IAM 認證 磚。
-
按下一步。
-
新增名稱及說明,以輕鬆識別您的密鑰。
-
選取您要指派給密鑰的 密鑰群組實例中包含密鑰的環境及限制必須遵循。 使用者可以與秘密群組相關聯,以實現存取和協作。 。
沒有秘密小組嗎? 在 密鑰群組 欄位中,您可以按一下 建立,以提供新群組的名稱及說明。 您的密鑰會自動新增至新群組。 如需密鑰群組的相關資訊,請參閱 組織密鑰。
-
選用項目: 新增標籤以協助您在實例中搜尋類似的密鑰。
-
選用項目: 將 meta 資料新增至密鑰或密鑰的特定版本。
- 上傳檔案或以 JSON 格式輸入 meta 資料及版本 meta 資料。
-
按下一步。
-
設定密鑰的租賃持續時間或存活時間 (TTL)。
透過設定 IAM 認證的租賃持續時間,您可以判定其相關聯 API 金鑰保持有效的時間長度。 IAM 認證租期結束後,會自動廢止。
持續時間下限為 1 分鐘。 上限為 90 天。
- 選用項目: 判定是否可以針對密鑰重複使用 IAM 認證。
- 選用項目: 啟用密鑰自動旋轉。 只有選擇重複使用 IAM 憑證選項,才能自動輪替秘密。
- 按下一步。
- 確定來源帳戶。
- 確定要指派的存取範圍。
- 按下一步。
- 檢閱密鑰的詳細資料。
- 按一下新增。
在租賃到期之前重複使用相同的 API 金鑰
IAM 認證由服務 ID 和 API 金鑰組成。 依預設,服務 ID 和 API 金鑰是單次使用的暫時值,每次讀取或存取 IAM 認證密碼時都會產生並刪除這些值。
如果您想要在密鑰租賃結束後繼續使用這些認證,則可以將 重複使用 IAM 認證直到租賃到期 設為 開啟。 當您啟用此選項時,您的密鑰會保留其現行服務 ID 及 API 金鑰值,並在每次讀取時重複使用它們,而該密鑰仍然有效。 在秘密的租期結束後,憑證會自動撤銷。
如果重複使用 IAM 憑證選項設定為關閉,則不支援手動輪換秘密。 如需相關資訊,請參閱 手動輪替密鑰。
確定來源帳戶
Secrets Manager可以從目前IBM Cloud帳戶或特定IBM Cloud帳戶建立和管理 IAM 憑證機密。 當選擇從特定帳戶建立時,請提供該帳戶的 ID。
確定要指派的存取範圍
您的帳戶中可能已有一個服務 ID,您希望透過選擇該服務 ID 為其產生 API 金鑰。 或者,您可以透過將存取權限指派給存取群組來產生服務 ID 和 API 金鑰。
在建立 IAM 憑證精靈的指派存取權步驟中,選擇您的金鑰的存取範圍。
-
若要使用現有的服務 ID,請從清單中選取 ID。 如果來源帳戶是特定的其他帳戶,請提供服務 ID 的 ID,格式如下:
ServiceId-c0c7cfa4-b24e-4917-ad74-278f2fee5ba0。當您需要 Secrets Manager 只產生及管理 IAM 認證密碼的 API 金鑰,而不是服務 ID 本身時,請選擇此選項。 API 金鑰會繼承您從帳戶選取之服務 ID 的存取原則。 只會顯示您有權存取的服務 ID。
-
若要為密鑰產生新的服務 ID 及 API 金鑰,請選取存取群組。 如果來源帳戶是特定帳戶,請提供所需存取群組的 ID。
透過選擇存取群組,您可以確定指派給使用該存取群組的服務 ID 和 API 金鑰的權限範圍。 服務 ID 和 API 金鑰已產生並與您的新 IAM 憑證關聯。 您最多可以指派 10 個存取群組。
存取策略應指派給選定的存取群組,而不是直接指派給服務 ID。 一旦達到 IAM 憑證的 TTL,服務 ID 和 API 金鑰都會被刪除,並建立新的。
如果您使用現有的服務 ID,則 Secrets Manager 所產生的 API 金鑰會自動鎖定。 如果您選擇了存取群組,Secrets Manager 為該秘密建立的新服務 ID 和 API 金鑰都會自動鎖定。 每次使用 API 擷取 IAM 憑證機密時,Secrets Manager 所產生的 API 金鑰和服務 ID 都會被鎖定,即使您在擷取機密前手動解除鎖定也是如此。
從 CLI 建立 IAM 認證
在開始之前,請按照 CLI 文件 設定您的 API 端點。
若要使用Secrets Manager CLI 外掛程式建立服務 ID 和 API 金鑰,請執行 ibmcloud secrets-manager secret-create 指令。
要在特定的其他帳戶中建立它,請新增 --iam-credentials-account-id 選項。
ibmcloud secrets-manager secret-create --secret-type iam_credentials --secret-name "example-iam-credentials-secret" --secret-description "Description of my IAM credentials secret" --iam-credentials-access-groups ["<access_group_id>, ..."] --secret-ttl 30m --iam-credentials-reuse-apikey true
若要使用現有服務 ID 並透過使用Secrets Manager CLI 外掛程式建立 API 金鑰,請執行 ibmcloud secrets-manager secret-create 指令。 要在特定的其他帳戶中建立它,請新增 --iam-credentials-account-id 選項。
ibmcloud secrets-manager secret-create --secret-type iam_credentials --secret-name "example-iam-credentials-secret" --secret-description "Description of my IAM credentials secret" --iam-credentials-service-id "ServiceId-c0c7cfa4-b24e-4917-ad74-278f2fee5ba0" --secret-ttl 90d --iam-credentials-reuse-apikey true
您可以在控制台的 IAM 部分找到服務 ID 的 ID 值。 前往管理 > 存取 (IAM) > 服務 ID >名稱。 按一下詳細資料以檢視 ID。
指令會輸出密鑰的 ID 值,以及其他 meta 資料。 如需指令選項的相關資訊,請參閱 ibmcloud secrets-manager secret-create。
在租賃到期之前重複使用相同的 API 金鑰
如果您希望在金鑰租用結束前繼續使用 IAM 憑證,您可以使用 --iam-credentials-reuse-apikey 選項。 如果設定為 true,您的金鑰將保留其目前的服務 ID 和 API 金鑰值,並在金鑰保持有效的情況下在每次讀取時重複使用它們,否則將其設定為 false。 例如,下列範例指令會建立 IAM 認證,可重複使用直到它們到期為止。
ibmcloud secrets-manager secret-create --secret-type iam_credentials --secret-name "example-iam-credentials-secret" --secret-description "Description of my IAM credentials secret" --iam-credentials-service-id "<iam_id_of_service_id>" --secret-ttl 30m --iam-credentials-reuse-apikey true
指令會輸出密鑰的 ID 值,以及其他 meta 資料。 在秘密的租期結束後,憑證會自動撤銷。 如需指令選項的相關資訊,請參閱 ibmcloud secrets-manager secret-create。
如果 IAM 憑證的 --iam-credentials-reuse-apikey 設定為 false,則不支援手動輪換密鑰。 如需相關資訊,請參閱 手動輪替密鑰。
使用 API 建立 IAM 認證
您可以透過呼叫 Secrets Manager API,以程式化方式建立 IAM 認證。
以下範例顯示了可用於建立服務 ID 和 API 金鑰的查詢。 當您呼叫 API 時,請將 ID 變數和 IAM 令牌替換為特定於您的Secrets Manager實例的值。 要在特定的其他帳戶中建立它,請新增 account_id 欄位。
您可以使用 custom_metadata 和 version_custom_metadata 要求參數來儲存與組織需求相關的 meta 資料。 僅針對密鑰版本傳回 version_custom_metadata 的值。 密鑰的自訂 meta 資料會儲存為最多 50 個版本的所有其他 meta 資料,而且您不得包含機密資料。
curl -X POST
-H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
{
"name": "example-iam-credentials-secret",
"description": "Description of my IAM Credentials secret",
"secret_type": "iam_credentials",
"secret_group_id": "bfc0a4a9-3d58-4fda-945b-76756af516aa",
"labels": [
"dev",
"us-south"
],
"ttl": "30m",
"access_groups": [
"AccessGroupId-45884031-54be-4dd7-86ff-112511e92699",
"AccessGroupId-8c0ed733-dfee-4a94-992b-e2247b86e2a2"
],
"reuse_api_key": false,
"custom_metadata": {
"metadata_custom_key": "metadata_custom_value"
},
"version_custom_metadata": {
"custom_version_key": "custom_version_value"
}
}' \ "https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets"
成功的回應會傳回秘密的 ID 值以及其他元資料。 如需必要及選用要求參數的相關資訊,請參閱 API 參考資料。
在租賃到期之前重複使用相同的 API 金鑰
如果您想在金鑰租約結束時使用 IAM 憑證,則可以使用 reuse_api_key 欄位。 如果設為 true,則密鑰會保留其現行服務 ID 及 API 金鑰值,並在每次讀取時重複使用它們,而該密鑰仍然有效。 例如,下列範例指令會建立 IAM 認證,可重複使用直到它們到期為止。
您可以使用 custom_metadata 和 version_custom_metadata 要求參數來儲存與組織需求相關的 meta 資料。 僅針對密鑰版本傳回 version_custom_metadata 的值。 密鑰的自訂 meta 資料會儲存為最多 50 個版本的所有其他 meta 資料,而且您不得包含機密資料。
curl -X POST
-H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
{
"name": "example-iam-credentials-secret",
"description": "Description of my IAM Credentials secret",
"secret_type": "iam_credentials",
"secret_group_id": "bfc0a4a9-3d58-4fda-945b-76756af516aa",
"labels": [
"dev",
"us-south"
],
"ttl": "30m",
"access_groups": [
"AccessGroupId-45884031-54be-4dd7-86ff-112511e92699",
"AccessGroupId-8c0ed733-dfee-4a94-992b-e2247b86e2a2"
],
"reuse_api_key": true,
"custom_metadata": {
"metadata_custom_key": "metadata_custom_value"
},
"version_custom_metadata": {
"custom_version_key": "custom_version_value"
}
}' \
"https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets"
成功要求會傳回密鑰的 ID 值,以及其他 meta 資料。 在秘密的租期結束後,憑證會自動撤銷。 如需相關資訊,請參閱 API 參考資料。
如果 reuse_api_key 是 false for IAM 認證,則不支援手動輪換密鑰。 如需相關資訊,請參閱 手動輪替密鑰。
使用帳戶中的現有服務 ID
您可能已在帳戶中具有要用來動態產生 API 金鑰的服務 ID。 在此實務範例中,您可以選擇透過攜帶自己的服務 ID 來建立 IAM 認證密鑰。 例如,下列指令會使用 service_id 欄位來建立 IAM 認證。 要在特定的其他帳戶中建立它,請新增 account_id 欄位。
您可以使用 custom_metadata 和 version_custom_metadata 要求參數來儲存與組織需求相關的 meta 資料。 僅針對密鑰版本傳回 version_custom_metadata 的值。 密鑰的自訂 meta 資料會儲存為最多 50 個版本的所有其他 meta 資料,而且您不得包含機密資料。
您可以在控制台的 IAM 部分找到服務 ID 的 ID 值。 前往管理 > 存取 (IAM) > 服務 ID >名稱。 按一下詳細資料以檢視 ID。
curl -X POST
-H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"name": "example-iam-credentials-secret",
"description": "Description of my IAM Credentials secret",
"secret_type": "iam_credentials",
"secret_group_id": "bfc0a4a9-3d58-4fda-945b-76756af516aa",
"labels": [
"dev",
"us-south"
],
"ttl": "30m",
"service_id": "ServiceId-c0c7cfa4-b24e-4917-ad74-278f2fee5ba0,
"reuse_api_key": false,
"custom_metadata": {
"metadata_custom_key": "metadata_custom_value"
},
"version_custom_metadata": {
"custom_version_key": "custom_version_value"
}
}' \
"https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets"
成功要求會傳回密鑰的 ID 值,以及其他 meta 資料。 如需相關資訊,請參閱 API 參考資料。
使用 Terraform 建立 IAM 認證
您可以透過使用 Terraform for Secrets Manager,以程式化方式建立 IAM 認證。
您必須新增 depends_on Terraform meta 引數,並將它參照至 IAM 配置資源。 depends_on meta 引數會指示 Terraform 先完成 IAM 配置上的所有動作,然後再對 IAM 認證密碼執行動作。 在建立跨帳號的 IAM 授權憑證秘訣時,請包含 account_id 屬性,指向服務 ID 建立的 IBM Cloud 帳號。
下列範例顯示可用來建立 IAM 認證的配置。
resource "ibm_sm_iam_credentials_secret" "test_iam_credentials_secret" {
instance_id = local.instance_id
region = local.region
service_id = "ServiceId-f4b2deac-fbb5-4bf7-85de-88426701db97"
ttl = "1800"
name = "test-iam-credentials-secret"
reuse_api_key = true
secret_group_id = ibm_sm_secret_group.sm_secret_group_test.secret_group_id
depends_on = [
ibm_sm_iam_credentials_configuration.iam_credentials_configuration
]
}
使用適用於 Secrets Manager Secret 的 Terraform IBM 模組 (TIM) 自動生成 IAM 認證,以實現一致的版本控制部署。 瞭解 Terraform IBM 模組。
刪除 IAM 認證
如果您具有 IAM 認證密碼引擎所產生的服務 ID 或 API 金鑰,並刪除 Secrets Manager的實例,則也必須從 IAM 中刪除該密碼。 如需相關資訊,請參閱管理使用者 API 金鑰。