本頁面列出參考指南和技術,說明如何使用 Security Command Center 修正安全狀態分析發現項目。
您必須具備適當的 Identity and Access Management (IAM) 角色,才能查看或編輯調查結果,以及存取或修改 Google Cloud 資源。如果在Google Cloud 控制台中存取 Security Command Center 時發生權限錯誤,請向管理員尋求協助,並參閱「存取權控管」一文瞭解角色。如要解決資源錯誤,請參閱受影響產品的文件。
安全性狀態分析修正
本節包含所有安全性狀態分析結果的修復說明。
如要找出對應至 CIS 基準的類型,補救措施指南來自網際網路安全中心 (CIS),除非另有說明。詳情請參閱「偵測工具和法規遵循」。
自動停用調查結果
修正安全漏洞或設定錯誤發現項目後,安全狀態分析會在下次掃描發現項目時,自動將發現項目的狀態設為 INACTIVE
。在 Security Health Analytics 中停用偵測工具後,該偵測工具產生的所有發現項目也會一併設為 INACTIVE
狀態。安全狀態分析將已修正的發現項目設為 INACTIVE
的時間,取決於發現項目修正的時間,以及偵測到該項目的掃描排程。
如果掃描作業偵測到受發現項目影響的資源已刪除,安全性狀態分析也會將發現項目的狀態設為 INACTIVE
。等待 Security Health Analytics 偵測到資源已刪除時,如要從顯示畫面中移除已刪除資源的發現項目,可以將該發現項目設為靜音。如要略過發現項目,請參閱「略過 Security Command Center 中的發現項目」。
請勿使用忽略功能,隱藏現有資源的已修正發現項目。
如果問題再次發生,且 Security Health Analytics 還原了發現結果的狀態,您可能不會看到重新啟用的發現結果,因為任何指定 NOT mute="MUTED"
的發現結果查詢 (例如預設發現結果查詢) 都會排除已靜音的發現結果。ACTIVE
如要瞭解掃描間隔,請參閱「安全狀態分析掃描類型」。
Access Transparency disabled
API 中的類別名稱:ACCESS_TRANSPARENCY_DISABLED
當 Google Cloud 員工 存取貴機構的專案以提供支援時,系統會記錄資料存取透明化控管機制記錄。啟用資料存取透明化控管機制,即可記錄 Google Cloud 中存取您資訊的人員、時間和原因。詳情請參閱資料存取透明化控管機制。
如要在專案中啟用資料存取透明化控管機制,專案必須與帳單帳戶建立關聯。
必要的角色
如要取得執行這項工作所需的權限,請要求管理員在機構層級授予您資料存取透明化控管機制管理員 (roles/axt.admin
) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理存取權」。
這個預先定義的角色具備執行這項工作所需的 axt.labels.get
和 axt.labels.set
權限。您或許還可透過自訂角色或其他預先定義的角色取得這些權限。
補救步驟
如要修正這項發現,請完成下列步驟:
檢查您的機構層級權限:
前往控制台的「Identity and Access Management」頁面。Google Cloud
如果出現提示,請在選取器選單中選取 Google Cloud 機構。
使用選取器選單,選取機構內的任何 Google Cloud 專案。
系統會在 Google Cloud 專案頁面上設定資料存取透明化控管機制,但會針對整個機構啟用資料存取透明化控管機制。
前往「IAM & Admin」(IAM 與管理員) >「Settings」(設定) 頁面。
按一下「啟用資料存取透明化控管機制」。
AlloyDB auto backup disabled
API 中的類別名稱:ALLOYDB_AUTO_BACKUP_DISABLED
PostgreSQL 適用的 AlloyDB 叢集未啟用自動備份功能。
為避免遺失資料,請啟用叢集的自動備份功能。詳情請參閱「設定其他自動備份」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的 PostgreSQL 適用的 AlloyDB 叢集頁面。
在「資源名稱」欄中,按一下叢集。
按一下「資料保護」。
在「自動備份政策」專區中,點選「自動備份」列中的「編輯」。
勾選「自動備份」核取方塊。
按一下「更新」。
AlloyDB backups disabled
API 中的類別名稱:ALLOYDB_BACKUPS_DISABLED
PostgreSQL 適用的 AlloyDB 叢集未啟用自動或連續備份。
為避免遺失資料,請為叢集啟用自動或持續備份功能。詳情請參閱「設定額外備份」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的 PostgreSQL 適用的 AlloyDB 叢集頁面。
在「資源名稱」欄中,按一下調查結果中識別出的叢集名稱。
按一下「資料保護」。
設定備份政策。
AlloyDB CMEK disabled
API 中的類別名稱:ALLOYDB_CMEK_DISABLED
AlloyDB 叢集未使用客戶自行管理的加密金鑰 (CMEK)。
如果使用 CMEK,您在 Cloud KMS 中建立及管理的金鑰會包裝 Google 用於加密資料的金鑰,讓您進一步掌控資料的存取權。詳情請參閱「關於 CMEK」。CMEK 會產生與 Cloud KMS 相關的額外費用。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的 PostgreSQL 適用的 AlloyDB 叢集頁面。
在「資源名稱」欄中,按一下調查結果中識別出的叢集名稱。
按一下「建立備份」。設定備用 ID。
點選「建立」。
在「備份/還原」部分下方,按一下所選「備份 ID」項目旁邊的「還原」。
設定新的叢集 ID 和網路。
按一下「進階加密選項」。選取要用來加密新叢集的 CMEK。
按一下「還原」。
AlloyDB log min error statement severity
API 中的類別名稱:ALLOYDB_LOG_MIN_ERROR_STATEMENT_SEVERITY
PostgreSQL 適用的 AlloyDB 執行個體未將log_min_error_statement
資料庫旗標設為 error
或其他建議值。
log_min_error_statement
旗標會決定伺服器記錄中是否會記下產生錯誤狀況的 SQL 陳述式。系統會記錄嚴重性達指定等級以上的 SQL 陳述式。嚴重性等級越高,記下的訊息越少。如果設定的嚴重性等級過高,系統可能不會記錄錯誤訊息。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的 PostgreSQL 適用的 AlloyDB 叢集頁面。
在「資源名稱」欄中,按一下叢集。
在「叢集中的執行個體」部分下方,按一下執行個體的「編輯」。
按一下「進階設定選項」。
前往「旗標」區段,並根據貴機構的記錄政策,將
log_min_error_statement
資料庫旗標設為以下其中一個建議值。debug5
debug4
debug3
debug2
debug1
info
notice
warning
error
點選「更新執行個體」。
AlloyDB log min messages
API 中的類別名稱:ALLOYDB_LOG_MIN_MESSAGES
PostgreSQL 適用的 AlloyDB 執行個體的log_min_messages
資料庫旗標未設為至少warning
。
log_min_messages
旗標可控管系統在伺服器記錄檔中記錄哪些訊息層級。嚴重性等級越高,記下的訊息就越少。如果門檻設得太低,記錄可能會變長、儲存空間規模也有可能變大,難以找到實際錯誤。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的 PostgreSQL 適用的 AlloyDB 叢集頁面。
在「資源名稱」欄中,按一下叢集。
在「叢集中的執行個體」部分下方,按一下執行個體的「編輯」。
按一下「進階設定選項」。
前往「旗標」區段,並根據貴機構的記錄政策,將
log_min_messages
資料庫旗標設為以下其中一個建議值。debug5
debug4
debug3
debug2
debug1
info
notice
warning
點選「更新執行個體」。
AlloyDB log error verbosity
API 中的類別名稱:ALLOYDB_LOG_ERROR_VERBOSITY
PostgreSQL 適用的 AlloyDB 執行個體未將log_error_verbosity
資料庫旗標設為 default
或其他限制較少的值。
log_error_verbosity
旗標會決定記錄中包含多少細節。詳細程度越高,記錄的訊息就會越詳細。建議您將這項旗標設為 default
或其他限制較少的值。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的 PostgreSQL 適用的 AlloyDB 叢集頁面。
在「資源名稱」欄中,按一下叢集。
在「叢集中的執行個體」部分下方,按一下執行個體的「編輯」。
按一下「進階設定選項」。
前往「旗標」區段,並根據貴機構的記錄政策,將
log_error_verbosity
資料庫旗標設為以下其中一個建議值。default
verbose
點選「更新執行個體」。
AlloyDB Public IP
API 中的類別名稱:ALLOYDB_PUBLIC_IP
PostgreSQL 適用的 AlloyDB 資料庫執行個體具有公開 IP 位址。
為減少貴機構的攻擊面,請使用私人 IP 位址而非公開 IP 位址。私人 IP 位址可提升應用程式的網路安全性並縮短延遲時間。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的 PostgreSQL 適用的 AlloyDB 叢集頁面。
在「資源名稱」欄中,按一下調查結果中識別出的叢集名稱。
在「叢集中的執行個體」部分下方,按一下執行個體的「編輯」。
在「連線能力」部分下方,取消勾選「啟用公開 IP」方塊。
點選「更新執行個體」。
AlloyDB SSL not enforced
API 中的類別名稱:ALLOYDB_SSL_NOT_ENFORCED
AlloyDB for PostgreSQL 資料庫執行個體未要求所有連入連線都必須使用 SSL。
為避免傳輸中的機密或私密資料從未加密的通訊洩漏,AlloyDB 資料庫執行個體的所有連入連線皆應使用安全資料傳輸層 (SSL)。進一步瞭解如何設定 SSL/TLS。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的 PostgreSQL 適用的 AlloyDB 叢集頁面。
在「資源名稱」欄中,按一下調查結果中識別出的叢集名稱。
在「叢集中的執行個體」部分下方,按一下執行個體的「編輯」。
在「網路安全防護機制」專區下方,勾選「必須使用 SSL 加密機制」方塊。
點選「更新執行個體」。
Admin service account
API 中的類別名稱:ADMIN_SERVICE_ACCOUNT
貴機構或專案中的某個服務帳戶具有管理員、擁有者或編輯者權限。這些角色的權限很廣,不應指派給服務帳戶。如要瞭解服務帳戶和可用的角色,請參閱「服務帳戶」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「IAM 政策」頁面。
針對調查結果中識別的每個主體:
- 按一下主體旁的 「編輯主體」。
- 如要移除權限,請按一下角色旁的「刪除角色」 。
- 按一下 [儲存]。
Alpha cluster enabled
API 中的類別名稱:ALPHA_CLUSTER_ENABLED
為 Google Kubernetes Engine (GKE) 叢集啟用 Alpha 版叢集功能。
Alpha 版叢集可讓早期採用者在新功能正式發布前,先行試驗有用到這些新功能的工作負載。Alpha 版叢集可以使用所有 GKE API 功能,但不在 GKE 服務水準協議的涵蓋範圍內。另外,Alpha 版叢集不會收到安全性更新、無法使用節點自動升級與節點自動修復功能,也無法升級,而且會在 30 天後自動刪除。
如要修正這項發現,請完成下列步驟:
Alpha 版叢集無法停用。您必須建立新的叢集,並停用 Alpha 版功能。
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
點選「建立」。
在要建立的叢集類型旁邊選取「設定」。
在「功能」分頁,確認「在這個叢集中啟用 Kubernetes Alpha 版功能」已停用。
點選「建立」。
如要將工作負載移至新叢集,請參閱「將工作負載遷移至不同的機器類型」。
如要刪除原始叢集,請參閱「刪除叢集」。
API key APIs unrestricted
API 中的類別名稱:API_KEY_APIS_UNRESTRICTED
API 金鑰的使用範圍過於廣泛。
未受限制的 API 金鑰並不安全,因為任何人都能在儲存金鑰的裝置上擷取該類金鑰,而且所有人也都能公開檢視這類金鑰 (例如從瀏覽器內部)。根據最低權限原則,設定 API 金鑰時,請只允許呼叫應用程式所需的 API。詳情請參閱「套用 API 金鑰限制」一文。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「API 金鑰」頁面。
針對每個 API 金鑰執行以下操作:
- 在「API 金鑰」專區中,找到要限制 API 的個別 API 金鑰,然後點選該列中的「動作」 。
- 點選「動作」選單中的「編輯 API 金鑰」。「編輯 API 金鑰」頁面隨即開啟。
- 在「API 限制」部分,選取「限制 API」。系統會顯示「選取 API」下拉式選單。
- 在「選取 API」下拉式清單中,選取要允許的 API。
- 按一下 [儲存]。設定最多可能需要五分鐘才會生效。
API key apps unrestricted
API 中的類別名稱:API_KEY_APPS_UNRESTRICTED
API 金鑰的使用方式未設限,因此任何不受信任的應用程式都能使用。
未受限制的 API 金鑰並不安全,因為任何人都能在儲存金鑰的裝置上擷取該類金鑰,而且所有人也都能公開檢視這類金鑰 (例如從瀏覽器內部)。根據最低權限原則,限制 API 金鑰的使用條件,僅供信任的主機、HTTP 參照網址和應用程式存取。詳情請參閱「套用 API 金鑰限制」一文。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「API 金鑰」頁面。
針對每個 API 金鑰執行以下操作:
- 在「API 金鑰」專區中,找到要限制應用程式的個別 API 金鑰,然後點選該列中的「動作」 。
- 點選「動作」選單中的「編輯 API 金鑰」。「編輯 API 金鑰」頁面隨即開啟。
- 在「編輯 API 金鑰」頁面的「應用程式限制」下方,選取限制類別。一組金鑰只能設定一項應用程式限制。
- 選取限制後,系統會顯示「新增項目」欄位,請按一下「新增項目」,根據應用程式需求新增限制。
- 新增完畢後,按一下「完成」。
- 按一下 [儲存]。
API key exists
API 中的類別名稱:API_KEY_EXISTS
專案使用 API 金鑰,而非標準驗證。
API 金鑰只是簡單的加密字串,容易被他人發現及使用,因此安全性不如其他驗證方法。任何人都能在儲存金鑰的裝置擷取 API 金鑰,或是可以公開檢視金鑰 (例如使用瀏覽器)。此外,API 金鑰無法明確識別發出要求的使用者或應用程式。您也可以使用標準驗證流程,透過服務帳戶或使用者帳戶進行驗證。
如要修正這項發現,請完成下列步驟:
- 確認您的應用程式設定成使用替代驗證程序。
前往 Google Cloud 控制台的「API 憑證」頁面。
在「API 金鑰」專區中找到要刪除的個別 API 金鑰,並按一下該列中的「動作」
。點選「動作」選單中的「刪除 API 金鑰」。
API key not rotated
API 中的類別名稱:API_KEY_NOT_ROTATED
API 金鑰已超過 90 天未輪替。
API 金鑰不會過期,因此一旦失竊,可能會遭到他人恣意使用,除非專案擁有者撤銷或輪替金鑰。如果經常輪替 API 金鑰,就能減少不肖人士可利用遭竊金鑰存取遭盜用或已終止帳戶資料的時間。至少每 90 天輪替一次 API 金鑰。詳情請參閱「管理 API 金鑰的最佳做法」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「API 金鑰」頁面。
針對每個 API 金鑰執行以下操作:
- 在「API 金鑰」專區中,找到要輪替的個別 API 金鑰,並點選該列中的「動作」 。
- 點選「動作」選單中的「編輯 API 金鑰」。「編輯 API 金鑰」頁面隨即開啟。
- 在「編輯 API 金鑰」頁面中,如果「建立日期」欄位中的日期超過 90 天,請按一下 「輪替金鑰」。系統會產生新金鑰。
- (選用) 變更 API 金鑰名稱。
- 點選「建立」。
- 更新應用程式,使用新的金鑰。
- 更新應用程式後,請返回「編輯 API 金鑰」頁面,然後按一下「刪除舊金鑰」刪除舊金鑰。舊金鑰不會自動刪除。
Audit config not monitored
API 中的類別名稱:AUDIT_CONFIG_NOT_MONITORED
未設定記錄指標和快訊,以監控稽核設定變更。
Cloud Logging 會產生管理員活動和資料存取記錄,以便分析安全性、追蹤資源變更及稽核法規遵循情形。只要監控稽核設定變更,您隨時都能審查專案中的各項活動。詳情請參閱記錄指標總覽。
視資訊量而定,Cloud Monitoring 費用可能相當高昂。如要瞭解服務用量和費用,請參閱 Google Cloud Observability 定價。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現項目,請視需要建立指標和警告政策:
建立指標
前往 Google Cloud 控制台的「記錄指標」頁面。
按一下 [建立指標]。
在「指標類型」底下選取「計數器」。
在「詳細資料」下方:
- 設定「記錄指標名稱」。
- 新增說明。
- 將「單位」設為「1」。
如有需要,請複製下列文字並貼到「選取篩選條件」下方的「建立篩選器」方塊,藉此取代現有的文字:
protoPayload.methodName="SetIamPolicy" AND protoPayload.serviceData.policyDelta.auditConfigDeltas:*
點選「建立指標」之後,就會看見確認訊息。
建立警告政策
-
在 Google Cloud 控制台中,前往「記錄指標」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
- 在「使用者定義指標」專區,選取您在前一個部分建立的指標。
-
依序點選「更多」圖示
和「運用指標建立快訊」。「新條件」對話方塊隨即開啟,並預先填入指標和資料轉換選項。
- 點選「Next」。
- 查看預先填入的設定。您可能想修改「門檻值」。
- 按一下「條件名稱」,然後輸入條件名稱。
- 點選「下一步」。
如要新增通知至快訊政策,請按一下「通知管道」。在對話方塊中,從選單選取一或多個通知管道,然後按一下「確定」。
如要在事件開啟和關閉時收到通知,請勾選「Notify on incident closure」(事件關閉時通知)。根據預設,系統只會在事件開啟時傳送通知。
- 選用:更新「事件自動關閉期限」。這個欄位會決定 Monitoring 何時會在沒有指標資料的情況下關閉事件。
- 選用:按一下「說明文件」,然後在通知訊息中新增任何資訊。
- 按一下「快訊名稱」,然後輸入快訊政策的名稱。
- 點選「建立政策」。
Audit logging disabled
API 中的類別名稱:AUDIT_LOGGING_DISABLED
這個發現項目不適用於專案層級的啟用作業。
一或多項 Google Cloud 服務已停用稽核記錄,或一或多個主體免受資料存取稽核記錄的限制。
請為所有服務啟用 Cloud Logging,以便追蹤對使用者資料執行的各項管理員活動、讀取和寫入要求。視資訊量而定,Cloud Logging 費用可能相當高昂。如要瞭解服務用量和費用,請參閱 Google Cloud Observability 定價。
如果任何主體在預設資料存取稽核記錄設定或任何個別服務的記錄設定中,豁免於資料存取稽核記錄,請移除豁免。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台的「資料存取稽核記錄預設設定」頁面。
在「記錄類型」分頁中,啟用預設設定中的資料存取稽核記錄:
- 選取「管理員讀取」、「資料讀取」和「資料寫入」。
- 按一下 [儲存]。
在「豁免主體」分頁中,從預設設定移除所有豁免使用者:
- 按一下每個名稱旁的「刪除」 ,移除列出的每個主體。
- 按一下 [儲存]。
前往「稽核記錄」頁面。
從個別服務的資料存取稽核記錄設定中,移除所有豁免主體。
- 在「資料存取稽核記錄設定」下,按一下各個顯示豁免主體的服務。系統會開啟服務的稽核記錄設定面板。
- 在「豁免的主體」分頁,點選每個名稱旁的「刪除」 ,移除所有豁免的主體。
- 按一下 [儲存]。
Auto backup disabled
API 中的類別名稱:AUTO_BACKUP_DISABLED
Cloud SQL 資料庫未啟用自動備份功能。
為避免遺失資料,請啟用 SQL 執行個體的自動備份功能。詳情請參閱「建立及管理隨選和自動備份」一文。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的 Cloud SQL「執行個體」頁面。
按一下執行個體名稱。
按一下「Backups」(備份)。
按一下「設定」旁邊的「編輯」
。勾選「每日自動備份」核取方塊。
選用:在「天數」方塊中,輸入要保留備份的天數。
選用:在「備份時間範圍」清單中,選取要進行備份的時間範圍。
按一下 [儲存]。
Auto repair disabled
API 中的類別名稱:AUTO_REPAIR_DISABLED
Google Kubernetes Engine (GKE) 叢集的自動修復功能已停用,因此節點無法維持在良好的運作狀態。
啟用這項功能之後,GKE 會定期檢查叢集中每個節點的健康狀態。如果節點長時間持續未通過健康狀態檢查,GKE 就會針對該節點啟動修復程序。詳情請參閱「自動修復節點」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
按一下「Nodes」(節點) 分頁標籤。
針對每個節點集區執行以下操作:
- 按一下節點集區的名稱,前往其詳細資料頁面。
- 按一下「Edit」(編輯) 。
- 在「管理」下方,選取「啟用自動修復功能」。
- 按一下 [儲存]。
Auto upgrade disabled
API 中的類別名稱:AUTO_UPGRADE_DISABLED
GKE 叢集的自動升級功能已停用,因此叢集和節點集區不會升級至 Kubernetes 最新穩定版本。
詳情請參閱「自動升級節點」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
在叢集清單中,按一下叢集名稱。
按一下「Nodes」(節點) 分頁標籤。
針對每個節點集區執行以下操作:
- 按一下節點集區的名稱,前往其詳細資料頁面。
- 按一下「Edit」(編輯) 。
- 在「管理」下方,選取「啟用自動升級功能」。
- 按一下 [儲存]。
BigQuery table CMEK disabled
API 中的類別名稱:BIGQUERY_TABLE_CMEK_DISABLED
BigQuery 資料表未設為使用客戶管理的加密金鑰 (CMEK)。
使用 CMEK 時,您在 Cloud KMS 中建立及管理的金鑰會包裝 Google Cloud 用於加密資料的金鑰,讓您進一步控管資料存取權。詳情請參閱「使用 Cloud KMS 金鑰保護資料」。
如要修正這項發現,請完成下列步驟:
如要設定預設 CMEK 金鑰,加密資料集中的所有新資料表,請參閱「設定資料集預設金鑰」。
瞭解這類發現項目支援的資產和掃描設定Binary authorization disabled
API 中的類別名稱:BINARY_AUTHORIZATION_DISABLED
GKE 叢集已停用二進位授權。
二進位授權提供選用功能,可保護供應鏈安全,只有在開發程序中由受信任的單位簽署的容器映像檔才能部署至叢集。強制執行以簽章為準的部署作業,可確保只有通過驗證的映像檔能部署,藉此更嚴謹地控管容器環境。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
在「安全性」專區中,按一下「二進位授權」列中的「編輯」圖示
。如果叢集設定最近有所變更,編輯按鈕可能會遭停用。如果無法編輯叢集設定,請稍候幾分鐘再試。
選取對話方塊中的 [啟用二進位授權]。
按一下 [儲存變更]。
前往「設定二進位授權」頁面。
確認已設定需要驗證者的政策,且專案的預設規則未設為「允許所有映像檔」。詳情請參閱「設定 GKE」一文。
如要確保系統允許部署違反政策的映像檔,並將違規事項記錄到 Cloud 稽核記錄,您可以啟用試執行模式。
Bucket CMEK disabled
API 中的類別名稱:BUCKET_CMEK_DISABLED
值區未以客戶自行管理的加密金鑰 (CMEK) 加密。
設定值區的預設 CMEK,可讓您進一步控管資料存取權。詳情請參閱「客戶管理的加密金鑰」。
如要修正這項發現,請按照「使用客戶管理的加密金鑰」一文的說明,對 bucket 使用 CMEK。CMEK 會產生與 Cloud KMS 相關的額外費用。
瞭解這類發現項目支援的資產和掃描設定Bucket IAM not monitored
API 中的類別名稱:BUCKET_IAM_NOT_MONITORED
系統未設定記錄指標和快訊,以監控 Cloud Storage IAM 權限變更。
監控 Cloud Storage bucket 權限變更,有助於找出權限過高的使用者或可疑活動。詳情請參閱記錄指標總覽。
視資訊量而定,Cloud Monitoring 費用可能相當高昂。如要瞭解服務用量和費用,請參閱 Google Cloud Observability 定價。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
建立指標
前往 Google Cloud 控制台的「記錄指標」頁面。
按一下 [建立指標]。
在「指標類型」底下選取「計數器」。
在「詳細資料」下方:
- 設定「記錄指標名稱」。
- 新增說明。
- 將「單位」設為「1」。
如有需要,請複製下列文字並貼到「選取篩選條件」下方的「建立篩選器」方塊,藉此取代現有的文字:
resource.type=gcs_bucket AND protoPayload.methodName="storage.setIamPermissions"
點選「建立指標」之後,就會看見確認訊息。
建立警告政策
-
在 Google Cloud 控制台中,前往「記錄指標」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
- 在「使用者定義指標」專區,選取您在前一個部分建立的指標。
-
依序點選「更多」圖示
和「運用指標建立快訊」。「新條件」對話方塊隨即開啟,並預先填入指標和資料轉換選項。
- 點選「Next」。
- 查看預先填入的設定。您可能想修改「門檻值」。
- 按一下「條件名稱」,然後輸入條件名稱。
- 點選「下一步」。
如要新增通知至快訊政策,請按一下「通知管道」。在對話方塊中,從選單選取一或多個通知管道,然後按一下「確定」。
如要在事件開啟和關閉時收到通知,請勾選「Notify on incident closure」(事件關閉時通知)。根據預設,系統只會在事件開啟時傳送通知。
- 選用:更新「事件自動關閉期限」。這個欄位會決定 Monitoring 何時會在沒有指標資料的情況下關閉事件。
- 選用:按一下「說明文件」,然後在通知訊息中新增任何資訊。
- 按一下「快訊名稱」,然後輸入快訊政策的名稱。
- 點選「建立政策」。
Bucket logging disabled
API 中的類別名稱:BUCKET_LOGGING_DISABLED
有儲存空間值區未啟用記錄功能。
為協助調查安全性問題和監控儲存空間使用情形,請為 Cloud Storage bucket 啟用存取記錄和儲存空間資訊。存取記錄會針對向指定值區發出的所有要求提供相關資訊,儲存空間記錄則可協助您瞭解該值區的儲存空間使用情形。
如要修正這項發現,請完成「使用記錄檔和儲存空間記錄檔」指南中的指示,為 Security Health Analytics 發現結果所指出的 bucket 設定記錄功能。
瞭解這類發現項目支援的資產和掃描設定Bucket policy only disabled
API 中的類別名稱:BUCKET_POLICY_ONLY_DISABLED
未設定統一值區層級存取權 (先前稱為「僅值區政策」)。
統一值區層級存取權能透過停用物件層級權限 (ACL),簡化值區存取權的控管作業。啟用之後,只有 bucket 層級的 IAM 權限可以授予該 bucket 及其物件的存取權。詳情請參閱「統一 bucket 層級存取權」一文。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台的「Cloud Storage 瀏覽器」頁面。
在值區清單中,按一下所需值區的名稱。
按一下 [設定] 標籤。
在「權限」底下的「存取控管」列,點選
「編輯權限控制模型」。在對話方塊中選取「統一」。
按一下 [儲存]。
Cloud Asset API disabled
API 中的類別名稱:CLOUD_ASSET_API_DISABLED
專案未啟用 Cloud Asset Inventory 服務。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「API Library」(API 程式庫) 頁面。
搜尋
Cloud Asset Inventory
。選取「Cloud Asset API」服務的結果。
確認畫面顯示「API 已啟用」。
Cluster logging disabled
API 中的類別名稱:CLUSTER_LOGGING_DISABLED
GKE 叢集未啟用記錄功能。
為協助調查安全性問題和監控使用情形,請在叢集中啟用 Cloud Logging。
視資訊量而定,Cloud Logging 費用可能相當高昂。如要瞭解服務用量和費用,請參閱 Google Cloud Observability 定價。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
選取安全性狀態分析發現項目中列出的叢集。
按一下「Edit」(編輯)
。如果叢集設定最近有所變更,編輯按鈕可能會遭停用。如果無法編輯叢集設定,請稍候幾分鐘再試。
在「舊版 Stackdriver Logging」或「Stackdriver Kubernetes Engine Monitoring」下拉式清單中,選取「已啟用」。
這些選項互不相容。請務必單獨使用 Stackdriver Kubernetes Engine Monitoring,或搭配使用舊版 Stackdriver Logging 和舊版 Stackdriver Monitoring。
按一下 [儲存]。
Cluster monitoring disabled
API 中的類別名稱:CLUSTER_MONITORING_DISABLED
GKE 叢集已停用監控功能。
為協助調查安全性問題和監控使用情形,請在叢集中啟用 Cloud Monitoring。
視資訊量而定,Cloud Monitoring 費用可能相當高昂。如要瞭解服務用量和費用,請參閱 Google Cloud Observability 定價。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
選取安全性狀態分析發現項目中列出的叢集。
按一下「Edit」(編輯)
。如果叢集設定最近有所變更,編輯按鈕可能會遭停用。如果無法編輯叢集設定,請稍候幾分鐘再試。
在「舊版 Stackdriver Monitoring」或「Stackdriver Kubernetes Engine Monitoring」下拉式清單中,選取「已啟用」。
這些選項互不相容。請務必單獨使用 Stackdriver Kubernetes Engine Monitoring,或搭配使用舊版 Stackdriver Monitoring 和舊版 Stackdriver Logging。
按一下 [儲存]。
Cluster private Google access disabled
API 中的類別名稱:CLUSTER_PRIVATE_GOOGLE_ACCESS_DISABLED
叢集主機未設定為僅使用私人內部 IP 位址存取 Google API。
啟用 Private Google Access 之後,只有私人內部 IP 位址的虛擬機器 (VM) 執行個體就能連上 Google API 和服務的公開 IP 位址。詳情請參閱「設定 Google 私人存取權」。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Virtual Private Cloud networks」(虛擬私有雲網路) 頁面。
在網路清單中,按一下所需網路的名稱。
在「虛擬私有雲網路詳細資料」頁面中,按一下「子網路」分頁標籤。
在子網路清單中,按一下與該 Kubernetes 叢集相關聯的子網路名稱。
在「Subnet details」(子網路詳細資料) 頁面中,按一下
「Edit」(編輯)。在「私人 Google 存取權」下方,選取「啟用」。
按一下 [儲存]。
如要從外部流量僅傳送至 Google API 的 VM 執行個體移除公開 (外部) IP,請參閱「取消指派靜態外部 IP 位址」。
Cluster secrets encryption disabled
API 中的類別名稱:CLUSTER_SECRETS_ENCRYPTION_DISABLED
GKE 叢集已停用應用程式層 Secret 加密功能。
應用程式層密鑰加密功能可確保 GKE 密鑰使用 Cloud KMS 金鑰加密。這項功能可對機密資料多加一層防護,包括使用者定義的 Secret 和叢集運作所需的 Secret,例如服務帳戶金鑰。這類內容全都儲存於 etcd。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Cloud KMS keys」(Cloud KMS 金鑰) 頁面。
檢查應用程式金鑰,或建立資料庫加密金鑰 (DEK)。詳情請參閱「建立 Cloud KMS 金鑰」。
前往「Kubernetes clusters」(Kubernetes 叢集) 頁面。
選取偵測結果中的叢集。
在「安全性」下方的「應用程式層 Secret 加密」欄位中,按一下「編輯應用程式層 Secret 加密」圖示
。勾選「Enable Application-layer Secrets Encryption」核取方塊,然後選擇您建立的 DEK。
按一下 [儲存變更]。
Cluster shielded nodes disabled
API 中的類別名稱:CLUSTER_SHIELDED_NODES_DISABLED
叢集未啟用 Shielded GKE 節點。
如果沒有受防護的 GKE 節點,攻擊者可能會利用 Pod 中的安全漏洞竊取啟動憑證,並冒用叢集內的節點,攻擊者可利用這項安全漏洞存取叢集密鑰。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
選取偵測結果中的叢集。
在「安全性」下方的「受防護的 GKE 節點」欄位中,按一下
「編輯受防護的 GKE 節點」。勾選「啟用受防護的 GKE 節點」核取方塊。
按一下 [儲存變更]。
Compute project wide SSH keys allowed
API 中的類別名稱:COMPUTE_PROJECT_WIDE_SSH_KEYS_ALLOWED
使用全專案 SSH 金鑰,允許登入專案中的所有執行個體。
使用專案層級的安全殼層金鑰可簡化安全殼層金鑰的管理作業,但遭駭後可能會產生安全性風險,並影響專案中的所有執行個體。建議您使用執行個體專屬的安全殼層金鑰,這樣即使安全殼層金鑰遭駭,攻擊面也有限。詳情請參閱管理中繼資料中的安全殼層金鑰。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
在執行個體清單中,按一下調查結果中的執行個體名稱。
在「VM instance details」(VM 執行個體詳細資料) 頁面上,按一下
「Edit」(編輯)。在「SSH Keys」(SSH 金鑰) 下方,選取「Block project-wide SSH keys」(封鎖全專案 SSH 金鑰)。
按一下 [儲存]。
Compute Secure Boot disabled
API 中的類別名稱:COMPUTE_SECURE_BOOT_DISABLED
受防護的 VM 未啟用安全啟動功能。
使用安全啟動功能,有助於保護虛擬機器免於 Rootkit 和 Bootkit 攻擊。Compute Engine 預設不會啟用安全啟動,因為部分未簽署驅動程式和低階軟體並不相容。如果 VM 未使用不相容的軟體,且可在啟用安全啟動的情況下啟動,Google 建議使用安全啟動。如果您使用第三方模組搭配 Nvidia 驅動程式,請先確認模組與安全啟動功能相容,再啟用這項功能。
詳情請參閱「安全啟動」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
在執行個體清單中,按一下調查結果中的執行個體名稱。
在「VM instance details」(VM 執行個體詳細資料) 頁面上,按一下
「Stop」(停止)。執行個體停止後,按一下「編輯」
。在「受防護的 VM」下方,選取「啟用安全啟動功能」。
按一下 [儲存]。
按一下「啟動」
即可啟動執行個體。
Compute serial ports enabled
API 中的類別名稱:COMPUTE_SERIAL_PORTS_ENABLED
執行個體已啟用序列埠,可連線至執行個體的序列主控台。
如果您對某個執行個體啟用互動式序列控制台,用戶端就能試著從任意 IP 位址連線至該執行個體。因此,建議停用互動式序列控制台支援服務。詳情請參閱「啟用專案存取權」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
在執行個體清單中,按一下調查結果中的執行個體名稱。
在「VM instance details」(VM 執行個體詳細資料) 頁面上,按一下
「Edit」(編輯)。在「Remote access」(遠端存取) 底下,取消勾選「Enable connecting to serial ports」(啟用序列埠連線)。
按一下 [儲存]。
Confidential Computing disabled
API 中的類別名稱:CONFIDENTIAL_COMPUTING_DISABLED
Compute Engine 執行個體未啟用機密運算。
機密運算功能會加密使用中的資料,也是端對端加密機制的第三項重點。透過機密運算和 AMD 安全加密虛擬化 (SEV) 功能提供的機密執行環境, Google Cloud 可在資料處理過程中,將機密程式碼和其他資料以加密方式儲存在記憶體中。
機密運算功能只能在建立執行個體時啟用。因此,您必須刪除目前的執行個體,並建立新的執行個體。
詳情請參閱「機密 VM 和 Compute Engine」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
在執行個體清單中,按一下調查結果中的執行個體名稱。
在「VM instance details」(VM 執行個體詳細資料) 頁面上,按一下
「Delete」(刪除)。
COS not used
API 中的類別名稱:COS_NOT_USED
Compute Engine VM 未使用 Container-Optimized OS,而這類 OS 的設計宗旨,是在 Google Cloud 安全地執行 Docker 容器。
建議您在 Google Cloud上託管及執行容器時採用 Container-Optimized OS。Container-Optimized OS 的作業系統規模很小,因此可暴露的安全弱點極少,並且會自動更新,及時針對安全漏洞進行修補。詳情請參閱「Container-Optimized OS 總覽」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
在叢集清單中,按一下調查結果中的叢集名稱。
按一下「Nodes」(節點) 分頁標籤。
針對每個節點集區執行以下操作:
- 按一下節點集區的名稱,前往其詳細資料頁面。
- 按一下「Edit」(編輯) 。
- 依序前往「節點」->「映像檔類型」,然後點選「變更」。
- 選取「Container-Optimized OS」,然後按一下「變更」。
- 按一下 [儲存]。
Custom role not monitored
API 中的類別名稱:CUSTOM_ROLE_NOT_MONITORED
記錄指標和快訊未設定為監控自訂角色變更。
IAM 提供預先定義的角色和自訂角色,這些角色會授予特定 Google Cloud 資源的存取權。監控角色的建立、刪除和更新等活動,能讓您在初期階段就找出擁有非必要權限的角色。詳情請參閱「記錄指標總覽」。
視資訊量而定,Cloud Monitoring 費用可能相當高昂。如要瞭解服務用量和費用,請參閱 Google Cloud Observability 定價。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
建立指標
前往 Google Cloud 控制台的「記錄指標」頁面。
按一下 [建立指標]。
在「指標類型」底下選取「計數器」。
在「詳細資料」下方:
- 設定「記錄指標名稱」。
- 新增說明。
- 將「單位」設為「1」。
如有需要,請複製下列文字並貼到「選取篩選條件」下方的「建立篩選器」方塊,藉此取代現有的文字:
resource.type="iam_role" AND (protoPayload.methodName="google.iam.admin.v1.CreateRole" OR protoPayload.methodName="google.iam.admin.v1.DeleteRole" OR protoPayload.methodName="google.iam.admin.v1.UpdateRole")
點選「建立指標」之後,就會看見確認訊息。
建立警告政策
-
在 Google Cloud 控制台中,前往「記錄指標」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
- 在「使用者定義指標」專區,選取您在前一個部分建立的指標。
-
依序點選「更多」圖示
和「運用指標建立快訊」。「新條件」對話方塊隨即開啟,並預先填入指標和資料轉換選項。
- 點選「Next」。
- 查看預先填入的設定。您可能想修改「門檻值」。
- 按一下「條件名稱」,然後輸入條件名稱。
- 點選「下一步」。
如要新增通知至快訊政策,請按一下「通知管道」。在對話方塊中,從選單選取一或多個通知管道,然後按一下「確定」。
如要在事件開啟和關閉時收到通知,請勾選「Notify on incident closure」(事件關閉時通知)。根據預設,系統只會在事件開啟時傳送通知。
- 選用:更新「事件自動關閉期限」。這個欄位會決定 Monitoring 何時會在沒有指標資料的情況下關閉事件。
- 選用:按一下「說明文件」,然後在通知訊息中新增任何資訊。
- 按一下「快訊名稱」,然後輸入快訊政策的名稱。
- 點選「建立政策」。
Dataproc CMEK disabled
API 中的類別名稱:DATAPROC_CMEK_DISABLED
建立 Dataproc 叢集時,未設定加密功能 CMEK。如果使用 CMEK,您在 Cloud Key Management Service 建立及管理的金鑰會包裝 Google Cloud 用於加密資料的金鑰,讓您進一步控管資料存取權。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的 Dataproc 叢集頁面。
選取專案,然後按一下「建立叢集」。
在「管理安全性」專區中,按一下「加密」,然後選取「客戶管理的金鑰」。
從清單中選取客戶管理的金鑰。
如果您沒有客戶自行管理的金鑰,請建立一個。詳情請參閱「客戶管理的加密金鑰」。
確認所選 KMS 金鑰已將「Cloud KMS CryptoKey 加密者/解密者」角色指派給 Dataproc 叢集服務帳戶 (「serviceAccount:service-project_number@compute-system.iam.gserviceaccount.com」)。
叢集建立完畢後,請將舊有叢集內的所有工作負載遷移至新的叢集。
前往 Dataproc 叢集,然後選取專案。
選取舊有叢集,然後按一下「刪除叢集」
。對所選專案中的其他可用 Dataproc 叢集,重複執行上述所有步驟。
Dataproc image outdated
API 中的類別名稱:DATAPROC_IMAGE_OUTDATED
您使用受 Apache Log4j 2 公用程式安全漏洞影響的 Dataproc 映像檔版本,建立 Dataproc 叢集 (CVE-2021-44228 和 CVE-2021-45046)。
這個偵測器會檢查
Cluster
的 config
屬性中 softwareConfig.imageVersion
欄位是否包含下列任一受影響版本,藉此找出安全性漏洞:
- 1.3.95 之前的映像檔版本。
- 副次要映像檔版本低於 1.4.77、1.5.53 和 2.0.27。
您可以手動覆寫自訂 Dataproc 映像檔的版本號碼。請參考下列情境:
- 使用者可以修改受影響的自訂圖片版本,使其看起來不受影響。在本例中,這項偵測工具不會發出發現結果。
- 使用者可以覆寫不受影響的自訂映像檔版本,改用已知有安全漏洞的版本。在此情況下,這個偵測器會發出誤判結果。如要略過這些誤判結果,可以將其設為靜音。
如要修正這項發現,請重新建立並更新受影響的叢集。
瞭解這類發現項目支援的資產和掃描設定Dataset CMEK disabled
API 中的類別名稱:DATASET_CMEK_DISABLED
BigQuery 資料集未設為使用預設的客戶管理加密金鑰 (CMEK)。
使用 CMEK 時,您在 Cloud KMS 中建立及管理的金鑰會包裝 Google Cloud 用於加密資料的金鑰,讓您進一步控管資料存取權。詳情請參閱「使用 Cloud KMS 金鑰保護資料」。
如要修正這項發現,請完成下列步驟:
您無法在預設加密和 CMEK 加密之間切換資料表。如要設定預設 CMEK 金鑰,使用該金鑰加密資料集內的所有新資料表,請按照「設定資料集預設金鑰」一節的說明操作。
設定預設金鑰之後,系統不會溯及既往,使用新的金鑰重新加密資料集內的現有資料表。如要為現有資料使用 CMEK,請按照下列步驟操作:
- 建立新的資料集。
- 在您建立的資料集上設定預設 CMEK 金鑰。
- 如要將資料表複製到已啟用 CMEK 的資料集,請按照「複製資料表」一文中的說明操作。
- 成功複製資料後,請刪除原始資料集。
Default network
API 中的類別名稱:DEFAULT_NETWORK
專案中存在預設網路。
預設網路已自動建立可能不安全的防火牆規則和網路設定。詳情請參閱「預設網路」。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「VPC networks」(虛擬私有雲網路) 頁面。
按一下網路清單中的預設網路名稱。
在「虛擬私有雲網路詳細資料」頁面,點選「
刪除虛擬私有雲網路」。如要建立含有自訂防火牆規則的新網路,請參閱「建立網路」。
Default service account used
API 中的類別名稱:DEFAULT_SERVICE_ACCOUNT_USED
Compute Engine 執行個體已設定為使用預設服務帳戶。
預設的 Compute Engine 服務帳戶具備專案的「編輯者」角色,可以讀取及寫入多數 Google Cloud 服務。如要防範權限提升和未經授權的存取行為,請不要使用預設的 Compute Engine 服務帳戶。請改為建立新的服務帳戶,並僅指派執行個體需要的權限。如要瞭解角色和權限,請參閱存取權控管。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
選取與 Security Health Analytics 發現項目相關的執行個體。
在載入的「Instance details」(執行個體詳細資料) 頁面中,按一下
「Stop」(停止)。執行個體停止運作之後,請點選「
編輯」。在「服務帳戶」專區中,選取非預設的 Compute Engine 服務帳戶。您可能需要先建立新的服務帳戶。如要瞭解 IAM 角色和權限,請參閱存取權控管的相關說明。
按一下 [儲存]。新設定會顯示在「執行個體詳細資料」頁面中。
Disk CMEK disabled
API 中的類別名稱:DISK_CMEK_DISABLED
這個 VM 上的磁碟並未採用客戶自行管理的加密金鑰 (CMEK) 加密。
使用 CMEK 時,您在 Cloud KMS 中建立及管理的金鑰會包裝 Google Cloud 用於加密資料的金鑰,讓您進一步控管資料存取權。詳情請參閱「使用 Cloud KMS 金鑰保護資源」。
如要修正這項發現,請完成下列步驟:
在Google Cloud 控制台中,前往「Compute Engine disks」(Compute Engine 磁碟) 頁面。
在磁碟清單中,按一下調查結果中顯示的磁碟名稱。
在「管理磁碟」頁面中,按一下
「刪除」。如要建立啟用 CMEK 的新磁碟,請參閱使用自己的金鑰為新的永久磁碟加密。 CMEK 會產生與 Cloud KMS 相關的額外費用。
Disk CSEK disabled
API 中的類別名稱:DISK_CSEK_DISABLED
這部 VM 的磁碟未以客戶提供的加密金鑰 (CSEK) 加密。重要 VM 的磁碟應使用 CSEK 加密。
如果您提供自己的加密金鑰,Compute Engine 會使用您的金鑰來保護 Google 產生並用於加密及解密資料的金鑰。詳情請參閱「客戶提供的加密金鑰」一文。CSEK 會產生與 Cloud KMS 相關的額外費用。
如要修正這項發現,請完成下列步驟:
刪除及建立磁碟
您只能使用自己的金鑰加密新的永久磁碟。無法使用自己的金鑰為現有的永久磁碟加密。
在Google Cloud 控制台中,前往「Compute Engine disks」(Compute Engine 磁碟) 頁面。
在磁碟清單中,按一下調查結果中顯示的磁碟名稱。
在「管理磁碟」頁面中,按一下
「刪除」。如要建立啟用 CSEK 的新磁碟,請參閱「使用客戶提供的加密金鑰為磁碟加密」。
完成其餘步驟即可啟用偵測器。
啟用偵測器
前往Google Cloud 控制台的 Security Command Center「資產」頁面。
在「快速篩選器」面板的「資源類型」部分中,選取「compute.Disk」。
如果沒有看到 compute.Disk,請按一下「查看更多」,在搜尋欄中輸入
Disk
,然後按一下「套用」。「Results」(結果) 面板會更新,只顯示
compute.Disk
資源類型的執行個體。在「顯示名稱」欄中,選取要搭配 CSEK 使用的磁碟名稱旁邊的方塊,然後按一下「設定安全標記」。
在對話方塊中,按一下「新增標記」。
在「key」(鍵) 欄位中輸入
enforce_customer_supplied_disk_encryption_keys
,並在「value」(值) 欄位中輸入true
。按一下 [儲存]。
DNS logging disabled
API 中的類別名稱:DNS_LOGGING_DISABLED
監控 Cloud DNS 記錄檔可讓您掌握虛擬私有雲網路內用戶端要求的 DNS 名稱。您可以監控這些記錄檔,確認是否有異常的網域名稱,並根據威脅情報來評估這些記錄檔。建議您為虛擬私有雲網路啟用 DNS 記錄功能。
視資訊量而定,Cloud DNS 記錄費用可能相當高昂。如要瞭解服務用量和費用,請參閱「Google Cloud Observability:Cloud Logging 定價」。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「VPC networks」(虛擬私有雲網路) 頁面。
按一下網路清單中的虛擬私有雲網路名稱。
建立新的伺服器政策 (如果沒有的話),或編輯現有政策:
如果網路沒有 DNS 伺服器政策,請完成下列步驟:
- 按一下「Edit」(編輯) 。
- 在「DNS 伺服器政策」欄位中,按一下「建立新的伺服器政策」。
- 輸入新伺服器政策的名稱。
- 將「記錄」設為「啟用」。
- 按一下 [儲存]。
如果網路有 DNS 伺服器政策,請完成下列步驟:
- 在「DNS 伺服器政策」欄位中,按一下 DNS 政策名稱。
- 按一下「編輯政策」 。
- 將「記錄」設為「啟用」。
- 按一下 [儲存]。
DNSSEC disabled
API 中的類別名稱:DNSSEC_DISABLED
Cloud DNS 區域會停用網域名稱系統安全性擴充功能 (DNSSEC)。
DNSSEC 會透過加密編譯的方式簽署 DNS 記錄,藉此驗證 DNS 回應並降低風險,例如 DNS 駭客攻擊和中間人攻擊。建議您啟用 DNSSEC。詳情請參閱「DNS 安全性擴充功能 (DNSSEC) 總覽」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Cloud DNS」頁面。
找出含有發現項目所指 DNS 區域的資料列。
按一下該列中的 DNSSEC 設定,然後在「DNSSEC」下方選取「開啟」。
畫面中會顯示對話方塊,請查看當中內容。如果同意,請點選「啟用」。
Effectively Anonymous Users Granted GKE Cluster Access
API 中的類別名稱:GKE_PRIVILEGE_ESCALATION_DEFAULT_USERS_GROUPS
有人建立的 RBAC 繫結參照了下列其中一位使用者或群組:
system:anonymous
system:authenticated
system:unauthenticated
這些使用者和群組實際上是匿名的,不應在 RoleBinding 或 ClusterRoleBinding 中使用。詳情請參閱「避免預設角色和群組」。
如要修正這項發現,請對受影響的資源執行下列步驟:
- 開啟每個受影響 ClusterRoleBinding 或 RoleBinding 的資訊清單。
- 將下列受限制的欄位設為其中一個允許值。
受限制的欄位
subjects[*].name
接受的值
- 不包括
system:anonymous
、system:authenticated
或system:unauthenticated
的任何群組、使用者或服務帳戶。
Egress deny rule not set
API 中的類別名稱:EGRESS_DENY_RULE_NOT_SET
防火牆未設定輸出拒絕規則。
拒絕所有輸出網路流量的防火牆會擋下各項非必要的輸出網路連線,其他防火牆明確授權的連線除外。詳情請參閱輸出案例。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
按一下「建立防火牆規則」。
為防火牆命名,並視需要輸入說明。
在「Direction of traffic」(流量方向) 下,選取 [Egress] (輸出)。
在「相符時執行的動作」下方,選取「拒絕」。
在「Targets」(目標) 下拉式選單中,選取「All instances in the network」(網路中的所有執行個體)。
在「目的地篩選器」下拉式選單中,選取「IP 範圍」,然後在「目的地 IP 範圍」方塊中輸入「
0.0.0.0/0
」。在「Protocols and ports」(通訊協定和通訊埠) 下方,選取「Deny all」(全部拒絕)。
按一下「停用規則」,然後在「強制執行」下方選取「已啟用」。
點選「建立」。
Essential contacts not configured
API 中的類別名稱:ESSENTIAL_CONTACTS_NOT_CONFIGURED
貴機構尚未指派人員或群組接收 Google Cloud 有關重要事件的通知,例如貴機構 Google Cloud 內發生的攻擊、安全漏洞和資料事件。建議您在貴商家機構中,指派一或多位人員或群組做為重要聯絡人。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「重要聯絡人」頁面。
確認頁面頂端的資源選取器中顯示了機構。資源選取器會指出您正在管理哪個專案、資料夾或組織的聯絡人。
按一下「+ 新增聯絡人」。「新增聯絡人」面板隨即開啟。
在「電子郵件地址」和「確認電子郵件地址」欄位中,輸入聯絡人的電子郵件地址。
在「通知類別」部分中,選取您希望聯絡人接收哪些通知類別的郵件。確認下列各個通知類別均已設定適當的電子郵件地址:
- 法律
- 安全性
- 停權
- 技術
按一下 [儲存]。
Firewall not monitored
API 中的類別名稱:FIREWALL_NOT_MONITORED
您未設定記錄指標和快訊,監控虛擬私有雲網路防火牆規則變更。
監控防火牆規則的建立和更新事件不僅能讓您深入瞭解網路存取權的變動情況,還可協助您快速偵測到可疑活動。詳情請參閱「記錄指標總覽」。
視資訊量而定,Cloud Monitoring 費用可能相當高昂。如要瞭解服務用量和費用,請參閱 Google Cloud Observability 定價。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
建立指標
前往 Google Cloud 控制台的「記錄指標」頁面。
按一下 [建立指標]。
在「指標類型」底下選取「計數器」。
在「詳細資料」下方:
- 設定「記錄指標名稱」。
- 新增說明。
- 將「單位」設為「1」。
如有需要,請複製下列文字並貼到「選取篩選條件」下方的「建立篩選器」方塊,藉此取代現有的文字:
resource.type="gce_firewall_rule" AND (protoPayload.methodName:"compute.firewalls.insert" OR protoPayload.methodName:"compute.firewalls.patch" OR protoPayload.methodName:"compute.firewalls.delete")
點選「建立指標」之後,就會看見確認訊息。
建立警告政策
-
在 Google Cloud 控制台中,前往「記錄指標」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
- 在「使用者定義指標」專區,選取您在前一個部分建立的指標。
-
依序點選「更多」圖示
和「運用指標建立快訊」。「新條件」對話方塊隨即開啟,並預先填入指標和資料轉換選項。
- 點選「Next」。
- 查看預先填入的設定。您可能想修改「門檻值」。
- 按一下「條件名稱」,然後輸入條件名稱。
- 點選「下一步」。
如要新增通知至快訊政策,請按一下「通知管道」。在對話方塊中,從選單選取一或多個通知管道,然後按一下「確定」。
如要在事件開啟和關閉時收到通知,請勾選「Notify on incident closure」(事件關閉時通知)。根據預設,系統只會在事件開啟時傳送通知。
- 選用:更新「事件自動關閉期限」。這個欄位會決定 Monitoring 何時會在沒有指標資料的情況下關閉事件。
- 選用:按一下「說明文件」,然後在通知訊息中新增任何資訊。
- 按一下「快訊名稱」,然後輸入快訊政策的名稱。
- 點選「建立政策」。
Firewall rule logging disabled
API 中的類別名稱:FIREWALL_RULE_LOGGING_DISABLED
防火牆規則記錄功能已停用。
您可以根據防火牆規則記錄,進一步稽核、驗證及分析防火牆規則的成效。這類記錄非常有用,可以稽核網路存取,或提供未按照核准方式使用網路的早期警告。記錄檔的費用可能相當可觀。如要進一步瞭解防火牆規則記錄和相關費用,請參閱「使用防火牆規則記錄」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下所需防火牆規則的名稱。
按一下「Edit」(編輯)
。在「記錄」下方,選取「開啟」。
按一下 [儲存]。
Flow logs disabled
API 中的類別名稱:FLOW_LOGS_DISABLED
虛擬私有雲子網路已停用流量記錄。
虛擬私有雲流量記錄會從 VM 執行個體收發的網路流量中取樣,並記錄下來。這類記錄可用於網路監控、鑑識、即時安全性分析和支出最佳化。如要進一步瞭解流量記錄及其費用,請參閱「使用虛擬私有雲流量記錄」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台的「VPC networks」(虛擬私有雲網路) 頁面。
在網路清單中,按一下所需網路的名稱。
在「虛擬私有雲網路詳細資料」頁面中,按一下「子網路」分頁標籤。
在子網路清單中,按一下調查結果中指出的子網路名稱。
在「Subnet details」(子網路詳細資料) 頁面中,按一下
「Edit」(編輯)。在「Flow logs」(流程記錄) 下方,選取 [On] (啟用)。
Flow logs settings not recommended
API 中的類別名稱:VPC_FLOW_LOGS_SETTINGS_NOT_RECOMMENDED
在虛擬私有雲網路的子網路設定中,虛擬私有雲流量記錄服務為停用狀態,或是未按照 CIS 基準 1.3 建議設定。虛擬私有雲流量記錄會從 VM 執行個體收發的網路流量中取樣,並記錄下來,這類記錄可以用來偵測威脅。
如要進一步瞭解虛擬私有雲流量記錄檔及其費用,請參閱「使用虛擬私有雲流量記錄檔」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台的「VPC networks」(虛擬私有雲網路) 頁面。
按一下網路清單中的網路名稱。
在「虛擬私有雲網路詳細資料」頁面中,按一下「子網路」分頁標籤。
在子網路清單中,按一下調查結果中指出的子網路名稱。
在「Subnet details」(子網路詳細資料) 頁面中,按一下
「Edit」(編輯)。在「Flow logs」(流程記錄) 下方,選取 [On] (啟用)。
- 您也可以點選「設定記錄檔」按鈕來展開分頁,並修改記錄檔設定。CIS 基準建議採用下列設定:
- 將「匯總時間間隔」設為「5 秒」。
- 在「其他欄位」核取方塊中,選取「包含中繼資料」選項。
- 將「取樣率」設為「100%」。
- 按一下 [儲存] 按鈕。
- 您也可以點選「設定記錄檔」按鈕來展開分頁,並修改記錄檔設定。CIS 基準建議採用下列設定:
Full API access
API 中的類別名稱:FULL_API_ACCESS
Compute Engine 執行個體已設為使用預設服務帳戶,該帳戶具備所有 Google Cloud API 的完整存取權。
如果執行個體設定為使用預設服務帳戶,且 API 存取範圍設為「允許所有 Cloud API 的完整存取權」,使用者或許可以在沒有相應 IAM 權限的情況下,執行作業或 API 呼叫。詳情請參閱「Compute Engine 預設服務帳戶」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
在執行個體清單中,按一下調查結果中的執行個體名稱。
如果執行個體正在執行,請按一下
「停止」。執行個體停止後,按一下「編輯」
。在「安全性與存取權」專區的「服務帳戶」下方,選取「Compute Engine 預設服務帳戶」。
在「Access scopes」(存取權範圍) 下方,選取「Allow default access」(允許預設存取權) 或「Set access for each API」(針對各個 API 設定存取權)。這會限制任何使用預設 VM 服務帳戶的程序或工作負載可存取的 API。
如果選取「針對各個 API 設定存取權」,請按照下列步驟操作:
- 將「雲端平台」設為「無」,即可停用 Cloud Platform。
- 啟用預設 VM 服務帳戶需要存取的特定 API。
按一下 [儲存]。
按一下「啟動」
,啟動執行個體。
HTTP load balancer
API 中的類別名稱:HTTP_LOAD_BALANCER
Compute Engine 執行個體使用的負載平衡器已設為使用目標 HTTP Proxy,而非目標 HTTPS Proxy。
為維護資料完整性並防止入侵者竄改通訊,請將 HTTP(S) 負載平衡器設為僅允許 HTTPS 流量。詳情請參閱外部 HTTP(S) 負載平衡總覽。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「目標 Proxy」頁面。
在目標 Proxy 清單中,按一下該發現項目中的目標 Proxy 名稱。
按一下「網址對應」下方的連結。
按一下「Edit」(編輯)
。按一下「前端設定」。
刪除允許 HTTP 流量的所有前端 IP 和通訊埠設定,然後建立允許 HTTPS 流量的新設定。
Instance OS login disabled
API 中的類別名稱:INSTANCE_OS_LOGIN_DISABLED
這個 Compute Engine 執行個體已停用 OS 登入。
OS 登入功能可讓您透過 IAM 集中管理安全殼層金鑰,並停用專案中所有執行個體的中繼資料型安全殼層金鑰設定。瞭解如何設定及設定 OS 登入。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
在執行個體清單中,按一下調查結果中的執行個體名稱。
在載入的「Instance details」(執行個體詳細資料) 頁面中,按一下
「Stop」(停止)。執行個體停止後,按一下「編輯」
。在「自訂中繼資料」專區,找出鍵為 enable-oslogin 的項目,並確認其值為 TRUE。
按一下 [儲存]。
按一下「啟動」
,啟動執行個體。
Integrity monitoring disabled
API 中的類別名稱:INTEGRITY_MONITORING_DISABLED
GKE 叢集已停用完整性監控功能。
完整性監控 功能可讓您使用 Monitoring 監控及驗證受防護節點的執行階段啟動完整性。這可讓您回應完整性失敗,並避免將遭到入侵的節點部署至叢集。
如要修正這項發現,請完成下列步驟:
節點一經佈建即無法更新,無法改為啟用完整性監控功能。 您必須建立啟用完整性監控功能的新節點集區。
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
按一下調查結果中的叢集名稱。
按一下「新增節點集區」。
在「安全性」分頁,確認已啟用「啟用完整性監控」。
點選「建立」。
如要將工作負載從不符合規定的現有節點集區遷移至新的節點集區,請參閱「將工作負載遷移至不同的機器類型」。
遷移工作負載之後,請刪除不符合規定的原有節點集區。
- 在「Kubernetes 叢集」頁面的「節點集區」選單中,按一下要刪除的節點集區名稱。
- 按一下 [移除節點集區]。
Intranode visibility disabled
API 中的類別名稱:INTRANODE_VISIBILITY_DISABLED
GKE 叢集的節點內瀏覽權限已停用。
啟用節點內瀏覽功能,即可讓網路架構檢視節點內的 Pod 對 Pod 流量。有了這項功能,您就能透過虛擬私有雲流量記錄或其他虛擬私有雲功能,監控或控管節點內的流量。如要取得記錄檔,您必須在所選子網路中啟用虛擬私有雲流量記錄。詳情請參閱「使用虛擬私有雲流量記錄檔」。
如要修正這項發現,請完成下列步驟:
節點一經佈建即無法更新,無法改為啟用完整性監控功能。 您必須建立啟用完整性監控功能的新節點集區。
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
在「網路」專區中,按一下「掌握節點內流量」列中的「編輯節點內瀏覽權限」
。如果叢集設定最近有所變更,編輯按鈕可能會遭停用。如果無法編輯叢集設定,請稍候幾分鐘再試。
選取對話方塊中的 [啟用節點內瀏覽權限]。
按一下 [儲存變更]。
IP alias disabled
API 中的類別名稱:IP_ALIAS_DISABLED
建立 GKE 叢集時停用了別名 IP 範圍。
啟用別名 IP 範圍時,GKE 叢集會分配已知 CIDR 區塊的 IP 位址,藉此提高叢集的擴充性,並改善叢集與 Google Cloud 產品和實體的互動情況。詳情請參閱別名 IP 範圍總覽。
如要修正這項發現,請完成下列步驟:
您無法遷移現有叢集來使用別名 IP。如要建立啟用別名 IP 的新叢集,請按照下列步驟操作:
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
點選「建立」。
在導覽窗格的「叢集」底下,按一下 [網路]。
在「進階網路選項」底下,選取「啟用虛擬私有雲原生流量轉送功能 (使用別名 IP)」。
點選「建立」。
IP forwarding enabled
API 中的類別名稱:IP_FORWARDING_ENABLED
在 Compute Engine 執行個體上啟用 IP 轉送功能。
停用 VM 的資料封包 IP 轉送功能,以防資料遺失或資訊外洩。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
在執行個體清單中,勾選發現項目中執行個體名稱旁的方塊。
按一下「刪除」圖示
。選取「建立執行個體」,建立新的執行個體來取代已刪除的執行個體。
如要確保 IP 轉送已停用,請按一下「管理、磁碟、網路、安全殼層金鑰」,然後按一下「網路」。
在「網路介面」下方,按一下「編輯」圖示
。在「IP 轉送」下方的下拉式選單中,確認已選取「關閉」。
指定其他任何的執行個體參數,然後按一下「建立」。詳情請參閱「建立及啟動 VM 執行個體」一文。
KMS key not rotated
API 中的類別名稱:KMS_KEY_NOT_ROTATED
Cloud KMS 加密金鑰未設定輪替。
定期輪替加密金鑰,可在金鑰遭駭時提供防護,並限制特定金鑰版本密碼分析可以使用的加密訊息數。詳情請參閱「金鑰輪替」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Cloud KMS keys」(Cloud KMS 金鑰) 頁面。
按一下調查結果中顯示的金鑰環名稱。
按一下調查結果中顯示的金鑰名稱。
按一下「編輯輪替週期」。
將輪替週期設為最多 90 天。
按一下 [儲存]。
KMS project has owner
API 中的類別名稱:KMS_PROJECT_HAS_OWNER
使用者對含有加密編譯金鑰的專案具有 roles/Owner
權限。詳情請參閱「權限和角色」。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「IAM」頁面。
如有必要,請選取調查結果中的專案。
針對獲派「擁有者」角色的每個主體:
- 按一下「Edit」(編輯) 。
- 在「編輯權限」面板中,找出「擁有者」角色,然後按一下旁邊的 「刪除」。
- 按一下 [儲存]。
KMS public key
API 中的類別名稱:KMS_PUBLIC_KEY
Cloud KMS CryptoKey 或 Cloud KMS 金鑰環對外公開,網際網路中的任何人都能存取。詳情請參閱「搭配 Cloud KMS 使用 IAM」一文。
如要修正這項發現項目 (如果與 Cryptokey 相關):
前往 Google Cloud 控制台的「Cryptographic Keys」(加密編譯金鑰) 頁面。
在「名稱」下方,選取包含與 Security Health Analytics 發現項目相關加密金鑰的金鑰環。
在載入的「金鑰環詳細資料」頁面中,勾選加密金鑰旁的核取方塊。
如果未顯示「資訊面板」,請按一下「顯示資訊面板」按鈕。
使用「角色 / 主體」前的篩選器方塊,搜尋擁有 allUsers 和 allAuthenticatedUsers 角色的主體,然後按一下「刪除」圖示
,移除這些主體的存取權。
如要修正這項發現項目 (如果與金鑰環有關),請按照下列步驟操作:
前往 Google Cloud 控制台的「Cryptographic Keys」(加密編譯金鑰) 頁面。
找出含有發現項目所述金鑰環的資料列,並勾選對應的核取方塊。
如果未顯示「資訊面板」,請按一下「顯示資訊面板」按鈕。
使用「角色 / 主體」前的篩選器方塊,搜尋擁有 allUsers 和 allAuthenticatedUsers 角色的主體,然後按一下「刪除」圖示
,移除這些主體的存取權。
KMS role separation
API 中的類別名稱:KMS_ROLE_SEPARATION
這個發現項目不適用於專案層級的啟用作業。
一或多個主體具備多項 Cloud KMS 權限。建議您不要同時指派 Cloud KMS 管理員和其他 Cloud KMS 權限給同一個帳戶。詳情請參閱權限與角色。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「IAM」頁面。
針對調查結果中列出的每個主體,請執行下列操作:
- 查看「繼承」欄,確認角色是否繼承自資料夾或機構資源。如果該欄含有父項資源的連結,請點選該連結,前往父項資源的「身分與存取權管理」頁面。
- 按一下主體旁的「編輯」 。
- 如要移除權限,請按一下「Cloud KMS 管理員」旁的「刪除」圖示 。如要移除主體的所有權限,請點選其他各項權限旁的「刪除」。
按一下 [儲存]。
Legacy authorization enabled
API 中的類別名稱:LEGACY_AUTHORIZATION_ENABLED
GKE 叢集已啟用舊版授權。
在 Kubernetes 中,角色型存取權控管 (RBAC) 可讓您利用含有一組權限的規則定義角色,並在叢集和命名空間層級授予權限。這項功能可確保使用者僅能存取特定資源,進而提高安全性。考慮停用舊版的屬性型存取權控管 (ABAC)。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
選取安全性狀態分析發現項目中列出的叢集。
按一下「Edit」(編輯)
。如果叢集設定最近有所變更,編輯按鈕可能會遭停用。如果無法編輯叢集設定,請稍候幾分鐘再試。
在「舊版授權」下拉式清單,選取「已停用」。
按一下 [儲存]。
Legacy metadata enabled
API 中的類別名稱:LEGACY_METADATA_ENABLED
GKE 叢集已啟用舊版中繼資料。
Compute Engine 的執行個體中繼資料伺服器所公開的舊版 /0.1/
和 /v1beta1/
端點,並不會強制使用中繼資料查詢標頭。這是 /v1/
API 中的功能,可讓潛在攻擊者更難以擷取執行個體中繼資料。除非有特別需求,否則我們建議您停用這些舊版 /0.1/
和 /v1beta1/
API。
詳情請參閱「停用舊版中繼資料 API 並進行轉換」。
如要修正這項發現,請完成下列步驟:
只有在建立新叢集,或是在現有叢集新增節點集區時,才能停用舊版中繼資料 API。如要更新現有叢集並停用舊版中繼資料 API,請參閱「將工作負載遷移至其他機器類型」。
瞭解這類發現項目支援的資產和掃描設定Legacy network
API 中的類別名稱:LEGACY_NETWORK
專案中存在舊版網路。
舊版網路不支援許多新推出的 Google Cloud 安全性功能,因此不建議使用舊版網路。請改用 VPC 網路。詳情請參閱「舊版網路」。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台的「VPC networks」(虛擬私有雲網路) 頁面。
如要建立新的非舊版網路,請按一下「建立網路」。
返回「虛擬私有雲網路」頁面。
按一下網路清單中的「legacy_network」。
在「虛擬私有雲網路詳細資料」頁面,點選「
刪除虛擬私有雲網路」。
Load balancer logging disabled
API 中的類別名稱:LOAD_BALANCER_LOGGING_DISABLED
負載平衡器後端服務的記錄功能已停用。
為負載平衡器啟用記錄功能之後,您就能查看網頁應用程式的 HTTP(S) 網路流量。詳情請參閱負載平衡器。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台的「Cloud Load Balancing」(雲端負載平衡) 頁面。
點選負載平衡器的名稱。
按一下「Edit」(編輯)
。按一下「後端設定」。
在「Backend configuration」(後端設定) 頁面中,按一下「Edit」(編輯)
。在「記錄功能」專區中選取「啟用記錄功能」,並選擇最合適的專案取樣率。
點選「更新」,完成編輯後端服務。
點選「更新」,完成編輯負載平衡器。
Locked retention policy not set
API 中的類別名稱:LOCKED_RETENTION_POLICY_NOT_SET
未為記錄檔設定鎖定的保留政策。
鎖定的資料保留政策可防止記錄檔遭到覆寫,也可避免記錄檔值區遭到刪除。詳情請參閱值區鎖定。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Storage Browser」(儲存空間瀏覽器) 頁面。
選取 Security Health Analytics 發現項目中列出的 bucket。
在「Bucket details」(值區詳細資料) 頁面上,按一下「Retention」(保留) 分頁標籤。
如果尚未設定資料保留政策,請按一下「設定保留政策」。
輸入保留期限。
按一下 [儲存]。保留政策會顯示在「保留」分頁中。
按一下「鎖定」,確保保留期限不會縮短或移除。
Log not exported
API 中的類別名稱:LOG_NOT_EXPORTED
資源未設定適當的記錄接收器。
Cloud Logging 可協助您迅速找出系統和應用程式的問題根源。不過,大部分的記錄檔預設只會保留 30 天。 匯出所有記錄項目的副本,延長儲存時間。詳情請參閱記錄匯出總覽。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「記錄檔路由器」頁面。
按一下「建立接收器」。
如要確保所有記錄都能順利匯出,請將「包含」和「排除」篩選器留空。
按一下「建立接收器」。
Master authorized networks disabled
API 中的類別名稱:MASTER_AUTHORIZED_NETWORKS_DISABLED
GKE 叢集未啟用控制層授權網路。
控制層授權網路會禁止指定 IP 位址存取叢集控制層,藉此提升容器叢集的安全性。詳情請參閱「新增控制層存取權的授權網路」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
選取安全性狀態分析發現項目中列出的叢集。
按一下「Edit」(編輯)
。如果叢集設定最近有所變更,編輯按鈕可能會遭停用。如果無法編輯叢集設定,請稍候幾分鐘再試。
在「控制層授權網路」下拉式清單中,選取「已啟用」。
點選「新增授權網路」。
指定要使用的授權網路。
按一下 [儲存]。
MFA not enforced
API 中的類別名稱:MFA_NOT_ENFORCED
這個發現項目不適用於專案層級的啟用作業。
貴機構中有部分使用者已停用多重驗證,特別是兩步驟驗證 (2SV)。
多重驗證機制可避免他人在未經授權的情況下擅自存取帳戶,這項重要工具也能保護貴機構,防止登入憑證遭人盜用。詳情請參閱「使用兩步驟驗證功能保障企業資料安全」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「管理控制台」頁面。
對所有組織單位強制執行兩步驟驗證。
略過這類發現項目
如要隱藏這類發現項目,請定義忽略規則,自動忽略這類型的後續發現項目。詳情請參閱「略過 Security Command Center 中的發現項目」。
雖然不建議使用這種方式抑制發現項目,但您也可以為資產新增專屬安全標記,這樣一來,安全性狀態分析偵測器就不會為這些資產建立安全發現項目。
- 如要避免再次啟用這項發現,請為資產新增安全標記
allow_mfa_not_enforced
,並將值設為true
。 - 如要忽略特定機構單位的潛在違規事項,請在資產中加入
excluded_orgunits
安全性標記,並在 value 欄位中以逗號分隔列出機構單位路徑。例如:excluded_orgunits:/people/vendors/vendorA,/people/contractors/contractorA
。
Network not monitored
API 中的類別名稱:NETWORK_NOT_MONITORED
系統未設定記錄指標和快訊,監控虛擬私有雲網路變更。
如要偵測網路設定是否有不正確或未經授權的變更,請監控虛擬私有雲網路變動。詳情請參閱「記錄指標總覽」。
視資訊量而定,Cloud Monitoring 費用可能相當高昂。如要瞭解服務用量和費用,請參閱 Google Cloud Observability 定價。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
建立指標
前往 Google Cloud 控制台的「記錄指標」頁面。
按一下 [建立指標]。
在「指標類型」底下選取「計數器」。
在「詳細資料」下方:
- 設定「記錄指標名稱」。
- 新增說明。
- 將「單位」設為「1」。
如有需要,請複製下列文字並貼到「選取篩選條件」下方的「建立篩選器」方塊,藉此取代現有的文字:
resource.type="gce_network" AND (protoPayload.methodName:"compute.networks.insert" OR protoPayload.methodName:"compute.networks.patch" OR protoPayload.methodName:"compute.networks.delete" OR protoPayload.methodName:"compute.networks.removePeering" OR protoPayload.methodName:"compute.networks.addPeering")
點選「建立指標」之後,就會看見確認訊息。
建立警告政策
-
在 Google Cloud 控制台中,前往「記錄指標」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
- 在「使用者定義指標」專區,選取您在前一個部分建立的指標。
-
依序點選「更多」圖示
和「運用指標建立快訊」。「新條件」對話方塊隨即開啟,並預先填入指標和資料轉換選項。
- 點選「Next」。
- 查看預先填入的設定。您可能想修改「門檻值」。
- 按一下「條件名稱」,然後輸入條件名稱。
- 點選「下一步」。
如要新增通知至快訊政策,請按一下「通知管道」。在對話方塊中,從選單選取一或多個通知管道,然後按一下「確定」。
如要在事件開啟和關閉時收到通知,請勾選「Notify on incident closure」(事件關閉時通知)。根據預設,系統只會在事件開啟時傳送通知。
- 選用:更新「事件自動關閉期限」。這個欄位會決定 Monitoring 何時會在沒有指標資料的情況下關閉事件。
- 選用:按一下「說明文件」,然後在通知訊息中新增任何資訊。
- 按一下「快訊名稱」,然後輸入快訊政策的名稱。
- 點選「建立政策」。
Network policy disabled
API 中的類別名稱:NETWORK_POLICY_DISABLED
GKE 叢集已停用網路政策。
根據預設,pod 對 pod 是開放式通訊。開放式通訊可讓 Pod 直接跨節點連線,無論是否使用網路位址轉譯皆可。NetworkPolicy
資源類似於 Pod 層級的防火牆,可限制 Pod 之間的連線,除非 NetworkPolicy
資源明確允許連線。瞭解如何定義網路政策。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
按一下安全性狀態分析發現項目中列出的叢集名稱。
在「網路」下方的「Calico Kubernetes Network 政策」列中,按一下「編輯」
。如果叢集設定最近有所變更,編輯按鈕可能會遭停用。如果無法編輯叢集設定,請稍候幾分鐘再試。
在對話方塊中,選取「針對控制層啟用 Calico Kubernetes Network 政策」和「為節點啟用 Calico Kubernetes Network 政策」。
按一下 [儲存變更]。
Nodepool boot CMEK disabled
API 中的類別名稱:NODEPOOL_BOOT_CMEK_DISABLED
這個節點集區的開機磁碟未以客戶自行管理的加密金鑰 (CMEK) 加密。使用者可以透過 CMEK,為節點集區中的開機磁碟設定預設加密金鑰。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
在叢集清單中,按一下調查結果中的叢集名稱。
按一下「Nodes」(節點) 分頁標籤。
針對每個 default-pool 節點集區,按一下
「Delete」(刪除)。當系統提示時,按一下「Delete」(刪除)。
如要使用 CMEK 建立新的節點集區,請參閱「使用客戶自行管理的加密金鑰 (CMEK)」。CMEK 會產生與 Cloud KMS 相關的額外費用。
Nodepool secure boot disabled
API 中的類別名稱:NODEPOOL_SECURE_BOOT_DISABLED
GKE 叢集已停用安全啟動功能。
為 Shielded GKE 節點啟用安全啟動功能,驗證節點啟動元件的數位簽章。詳情請參閱「安全啟動」。
如要修正這項發現,請完成下列步驟:
節點集區一經佈建即無法更新,無法改為啟用安全啟動功能。 您必須建立啟用安全啟動功能的新節點集區。
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
按一下調查結果中的叢集名稱。
按一下「新增節點集區」。
在「節點集區」選單中執行下列步驟:
- 按一下新節點集區的名稱來展開分頁。
- 依序選取「安全性」,以及「受防護的選項」下方的「啟用安全啟動功能」。
- 點選「建立」。
- 如要將工作負載從不符合規定的現有節點集區遷移至新的節點集區,請參閱「將工作負載遷移至不同的機器類型」。
- 遷移工作負載之後,請刪除不符合規定的原有節點集區。
Non org IAM member
API 中的類別名稱:NON_ORG_IAM_MEMBER
組織或專案的外部使用者具有專案或組織的 IAM 權限。進一步瞭解 IAM 權限。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「IAM」頁面。
選取機構或專案外部使用者旁的核取方塊。
按一下 [移除]。
Object versioning disabled
API 中的類別名稱:OBJECT_VERSIONING_DISABLED
如果儲存空間值區已設定接收器,就無法啟用物件版本管理功能。
為支援擷取已刪除或遭覆寫的物件,Cloud Storage 提供了「物件版本管理」功能。啟用「物件版本管理」功能可以避免您的 Cloud Storage 資料遭到覆寫或意外刪除。瞭解如何啟用物件版本管理。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請在 gcloud storage buckets update
指令中加上 --versioning
標記,並提供適當的值:
gcloud storage buckets update gs://finding.assetDisplayName --versioning
將 finding.assetDisplayName
替換為相關 bucket 的名稱。
Open Cassandra port
API 中的類別名稱:OPEN_CASSANDRA_PORT
如果防火牆規則允許所有 IP 位址連線至 Cassandra 通訊埠,Cassandra 服務可能會受到攻擊。詳情請參閱虛擬私有雲防火牆規則總覽。
Cassandra 服務通訊埠如下:
TCP - 7000, 7001, 7199, 8888, 9042, 9160, 61620, 61621
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此設定不安全。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open ciscosecure websm port
API 中的類別名稱:OPEN_CISCOSECURE_WEBSM_PORT
如果防火牆規則允許所有 IP 位址連線至 CiscoSecure/WebSM 通訊埠,CiscoSecure/WebSM 服務可能會受到攻擊。詳情請參閱 VPC 防火牆規則總覽。
CiscoSecure/WebSM 服務通訊埠如下:
TCP - 9090
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此設定不安全。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open directory services port
API 中的類別名稱:OPEN_DIRECTORY_SERVICES_PORT
如果防火牆規則允許所有 IP 位址連線至目錄通訊埠,目錄服務可能會受到攻擊。詳情請參閱虛擬私有雲防火牆規則總覽。
目錄服務通訊埠如下:
TCP - 445
UDP - 445
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此您應修正不安全的設定。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open DNS port
API 中的類別名稱:OPEN_DNS_PORT
如果防火牆規則允許所有 IP 位址連線至 DNS 通訊埠,DNS 服務可能會受到攻擊。詳情請參閱 VPC 防火牆規則總覽。
DNS 服務通訊埠如下:
TCP - 53
UDP - 53
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此您應修正不安全的設定。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open Elasticsearch port
API 中的類別名稱:OPEN_ELASTICSEARCH_PORT
如果防火牆規則允許所有 IP 位址連線至 Elasticsearch 通訊埠,Elasticsearch 服務可能會受到攻擊。詳情請參閱虛擬私有雲防火牆規則總覽。
Elasticsearch 服務通訊埠如下:
TCP - 9200, 9300
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此您應修正不安全的設定。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open firewall
API 中的類別名稱:OPEN_FIREWALL
如果防火牆規則允許來自所有 IP 位址 (例如 0.0.0.0/0
) 或所有通訊埠的連線,資源可能會受到非預期來源的攻擊。請移除這類規則,或明確規定只接受特定來源 IP 範圍或通訊埠連線。舉例來說,如果應用程式要公開發布,請考慮將允許的通訊埠限制為應用程式所需的通訊埠,例如 80 和 443。如果應用程式需要允許來自所有 IP 位址或連接埠的連線,請考慮將資產加入許可清單。進一步瞭解如何更新防火牆規則。
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此您應修正不安全的設定。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall rules」(防火牆規則) 頁面。
按一下安全性狀態分析發現項目中列出的防火牆規則,然後按一下
「編輯」。在「Source IP ranges」(來源 IP 範圍) 下方編輯 IP 值,藉此限制允許的 IP 範圍。
在「Protocols and ports」(通訊協定和通訊埠) 下選取「Specified protocols and ports」(指定的通訊協定和通訊埠),選取允許的通訊協定,然後輸入允許的通訊埠。
按一下 [儲存]。
Open FTP port
API 中的類別名稱:OPEN_FTP_PORT
如果防火牆規則允許所有 IP 位址連線至 FTP 通訊埠,FTP 服務可能會受到攻擊。詳情請參閱 VPC 防火牆規則總覽。
FTP 服務通訊埠如下:
TCP - 21
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此您應修正不安全的設定。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open group IAM member
API 中的類別名稱:OPEN_GROUP_IAM_MEMBER
一或多個可存取機構、專案或資料夾的主體是 Google 群組帳戶,無須核准即可加入。
Google Cloud 客戶可以使用 Google 群組,管理機構成員的角色和權限,或對使用者集合套用存取權政策。管理員可以將角色和權限授予 Google 群組,然後將成員新增至特定群組,不必直接授予成員角色。群組成員會繼承群組的所有角色和權限,因此可以存取特定資源和服務。
如果公開 Google 群組帳戶在 IAM 繫結中做為主體,任何人只要直接或間接 (透過子群組) 加入該群組,就能繼承相關聯的角色。建議您撤銷開放群組的角色,或限制這些群組的存取權。
如要修正這項發現,請執行下列其中一個程序。
從 IAM 政策中移除群組
限制開放群組的存取權
- 登入 Google 網路論壇。
- 更新每個開放群組及其子群組的設定,指定誰可以加入群組,以及誰必須核准加入要求。
Open HTTP port
API 中的類別名稱:OPEN_HTTP_PORT
如果防火牆規則允許所有 IP 位址連線至 HTTP 通訊埠,HTTP 服務可能會受到攻擊。詳情請參閱 VPC 防火牆規則總覽。
HTTP 服務通訊埠如下:
TCP - 80
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此您應修正不安全的設定。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open LDAP port
API 中的類別名稱:OPEN_LDAP_PORT
如果防火牆規則允許所有 IP 位址連線至 LDAP 通訊埠,LDAP 服務可能會受到攻擊。詳情請參閱 VPC 防火牆規則總覽。
LDAP 服務通訊埠如下:
TCP - 389, 636
UDP - 389
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此您應修正不安全的設定。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open Memcached port
API 中的類別名稱:OPEN_MEMCACHED_PORT
如果防火牆規則允許所有 IP 位址連線至 Memcached 通訊埠,Memcached 服務可能會受到攻擊。詳情請參閱虛擬私有雲防火牆規則總覽。
Memcached 服務通訊埠如下:
TCP - 11211, 11214, 11215
UDP - 11211, 11214, 11215
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此設定不安全。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open MongoDB port
API 中的類別名稱:OPEN_MONGODB_PORT
如果防火牆規則允許所有 IP 位址連線至 MongoDB 通訊埠,MongoDB 服務可能會受到攻擊。詳情請參閱虛擬私有雲防火牆規則總覽。
MongoDB 服務通訊埠如下:
TCP - 27017, 27018, 27019
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此您應修正不安全的設定。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open MySQL port
API 中的類別名稱:OPEN_MYSQL_PORT
如果防火牆規則允許所有 IP 位址連線至 MySQL 通訊埠,MySQL 服務可能會受到攻擊。詳情請參閱 VPC 防火牆規則總覽。
MySQL 服務通訊埠如下:
TCP - 3306
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此您應修正不安全的設定。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open NetBIOS port
API 中的類別名稱:`OPEN_NETBIOS_PORT
如果防火牆規則允許所有 IP 位址連線至 NetBIOS 通訊埠,NetBIOS 服務可能會受到攻擊。詳情請參閱虛擬私有雲防火牆規則總覽。
NetBIOS 服務通訊埠如下:
TCP - 137, 138, 139
UDP - 137, 138, 139
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此您應修正不安全的設定。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open OracleDB port
API 中的類別名稱:OPEN_ORACLEDB_PORT
如果防火牆規則允許所有 IP 位址連線至 OracleDB 通訊埠,OracleDB 服務可能會受到攻擊。詳情請參閱虛擬私有雲防火牆規則總覽。
OracleDB 服務通訊埠如下:
TCP - 1521, 2483, 2484
UDP - 2483, 2484
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此您應修正不安全的設定。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open POP3 port
API 中的類別名稱:OPEN_POP3_PORT
如果防火牆規則允許所有 IP 位址連線至 POP3 通訊埠,POP3 服務可能會受到攻擊。詳情請參閱 VPC 防火牆規則總覽。
POP3 服務通訊埠如下:
TCP - 110
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此您應修正不安全的設定。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open PostgreSQL port
API 中的類別名稱:OPEN_POSTGRESQL_PORT
如果防火牆規則允許所有 IP 位址連線至 PostgreSQL 通訊埠,PostgreSQL 服務可能會受到攻擊。詳情請參閱虛擬私有雲防火牆規則總覽。
PostgreSQL 服務通訊埠如下:
TCP - 5432
UDP - 5432
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此您應修正不安全的設定。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open RDP port
API 中的類別名稱:OPEN_RDP_PORT
如果防火牆規則允許所有 IP 位址連線至遠端桌面通訊協定 (RDP) 通訊埠,RDP 服務可能會受到攻擊。詳情請參閱 VPC 防火牆規則總覽。
RDP 服務通訊埠如下:
TCP - 3389
UDP - 3389
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此設定不安全。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open Redis port
API 中的類別名稱:OPEN_REDIS_PORT
如果防火牆規則允許所有 IP 位址連線至 Redis 通訊埠,Redis 服務可能會受到攻擊。詳情請參閱 VPC 防火牆規則總覽。
Redis 服務通訊埠如下:
TCP - 6379
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此您應修正不安全的設定。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open SMTP port
API 中的類別名稱:OPEN_SMTP_PORT
如果防火牆規則允許所有 IP 位址連線至 SMTP 通訊埠,SMTP 服務可能會受到攻擊。詳情請參閱 VPC 防火牆規則總覽。
SMTP 服務通訊埠如下:
TCP - 25
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此您應修正不安全的設定。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open SSH port
API 中的類別名稱:OPEN_SSH_PORT
如果防火牆規則允許所有 IP 位址連線至 SSH 通訊埠,SSH 服務可能會受到攻擊。詳情請參閱 VPC 防火牆規則總覽。
SSH 服務通訊埠如下:
SCTP - 22
TCP - 22
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此您應修正不安全的設定。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Open Telnet port
API 中的類別名稱:OPEN_TELNET_PORT
如果防火牆規則允許所有 IP 位址連線至 Telnet 通訊埠,Telnet 服務可能會受到攻擊。詳情請參閱 VPC 防火牆規則總覽。
Telnet 服務通訊埠如下:
TCP - 23
即使您有意停用規則,系統仍會針對有安全漏洞的防火牆規則產生這項發現。如果停用的防火牆規則有未解決的發現項目,表示啟用後會允許非預期流量,因此設定不安全。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
在防火牆規則清單中,按一下發現項目中的防火牆規則名稱。
按一下「Edit」(編輯)
。在「Source IP ranges」(來源 IP 範圍) 下方,刪除
0.0.0.0/0
。新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。
新增特定的通訊協定,以及要在執行個體上開放的通訊埠。
按一下 [儲存]。
Org policy Confidential VM policy
API 中的類別名稱:ORG_POLICY_CONFIDENTIAL_VM_POLICY
Compute Engine 資源不符合「constraints/compute.restrictNonConfidentialComputing
」機構政策。如要進一步瞭解這項機構政策限制,請參閱強制執行機構政策限制。
貴機構要求這個 VM 啟用機密 VM 服務。未啟用這項服務的 VM 就不會採用執行階段記憶體加密機制,因此容易遭到執行階段記憶體攻擊。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
在執行個體清單中,按一下調查結果中的執行個體名稱。
如果 VM 不需要機密 VM 服務,請將該 VM 移到新的資料夾或專案。
如果 VM 需要機密 VM,請按一下「刪除」
。如要建立啟用機密 VM 的新執行個體,請參閱「快速入門:建立機密 VM 執行個體」。
Org policy location restriction
API 中的類別名稱:ORG_POLICY_LOCATION_RESTRICTION
機構政策 gcp.resourceLocations
限制可讓您限制只能在選取的 Cloud 區域建立新資源。詳情請參閱「限制資源位置」。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
ORG_POLICY_LOCATION_RESTRICTION
偵測器涵蓋許多資源類型,且每項資源的修正說明都不同。修正位置資訊違規問題的一般做法如下:
- 將區域外資源或其資料複製、移動或備份至區域內資源。請參閱個別服務的說明文件,瞭解如何移動資源。
- 刪除原始的區域外資源或其資料。
並非所有資源類型都適用這種做法。如需指引,請參閱調查結果中提供的自訂建議。
其他事項
修正這項發現時,請考量下列事項。
代管資源
有時資源的生命週期是由其他資源管理及控管。舉例來說,代管 Compute Engine 執行個體群組會根據執行個體群組的自動調度資源政策,建立及終止 Compute Engine 執行個體。如果受管理和管理資源都屬於位置資訊強制執行的範圍,兩者都可能遭標示為違反機構政策。如要修正受管理資源的調查結果,請在管理資源上進行,確保運作穩定。
使用中的資源
其他資源正在使用特定資源。舉例來說,如果 Compute Engine 磁碟已連結至正在執行的 Compute Engine 執行個體,系統就會將該磁碟視為執行個體正在使用的磁碟。如果使用中的資源違反位置組織政策,請先確保資源未使用中,再解決位置違規問題。
瞭解這類發現項目支援的資產和掃描設定OS login disabled
API 中的類別名稱:OS_LOGIN_DISABLED
這項專案的 Compute Engine 執行個體已停用 OS 登入。
OS 登入功能可讓您透過 IAM 集中管理安全殼層金鑰,並停用專案中所有執行個體的中繼資料型安全殼層金鑰設定。瞭解如何設定及設定 OS 登入。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Metadata」(中繼資料) 頁面。
依序點選「編輯」和「新增項目」。
新增項目,其鍵為 enable-oslogin,值則為 TRUE。
Over privileged account
API 中的類別名稱:OVER_PRIVILEGED_ACCOUNT
GKE 節點使用 Compute Engine 預設服務節點,這類節點預設具備廣泛的存取權,權限可能比執行 GKE 叢集所需的權限高。
如要修正這項發現,請完成下列步驟:
按照操作說明使用最低權限的 Google 服務帳戶。
瞭解這類發現項目支援的資產和掃描設定Over privileged scopes
API 中的類別名稱:OVER_PRIVILEGED_SCOPES
節點服務帳戶的存取權範圍很廣。
存取權範圍是為執行個體指定權限的傳統方法。這樣遭受攻擊時,權限可能會提升。為降低發生這種情況的可能性,請建立及使用僅具備必要權限的服務帳戶來執行 GKE 叢集。
如要修正這項發現項目,請按照操作說明使用最低權限的 Google 服務帳戶。
瞭解這類發現項目支援的資產和掃描設定Over privileged service account user
API 中的類別名稱:OVER_PRIVILEGED_SERVICE_ACCOUNT_USER
使用者在專案、資料夾或機構層級擁有 iam.serviceAccountUser
或 iam.serviceAccountTokenCreator
角色,而非特定服務帳戶。
向使用者授予專案、資料夾或機構的這些角色之後,對方即可存取該範圍內現有和日後建立的所有服務帳戶。如果這麼做,可能會有非預期的權限提升情形。詳情請參閱「服務帳戶權限」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「IAM」頁面。
如有必要,請選取調查結果中的專案、資料夾或機構。
針對每個已指派
roles/iam.serviceAccountUser
或roles/iam.serviceAccountTokenCreator
的主體,執行下列操作:- 按一下「Edit」(編輯) 。
- 在「編輯權限」面板中,按一下角色旁的「刪除」圖示 。
- 按一下 [儲存]。
請按照這份指南,授予個別使用者模擬單一服務帳戶的權限。凡是要讓這些使用者模擬的服務帳戶,您都必須按照指南中的說明逐一授予權限。
Owner not monitored
API 中的類別名稱:OWNER_NOT_MONITORED
記錄指標和快訊未設定為監控專案擁有權指派或變更。
IAM 擁有者角色具備專案最高層級的權限。為保護資源,請設定警告,在新的擁有者加入或遭到移除時接收通知。詳情請參閱「記錄指標總覽」。
視資訊量而定,Cloud Monitoring 費用可能相當高昂。如要瞭解服務用量和費用,請參閱 Google Cloud Observability 定價。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
建立指標
前往 Google Cloud 控制台的「記錄指標」頁面。
按一下 [建立指標]。
在「指標類型」底下選取「計數器」。
在「詳細資料」下方:
- 設定「記錄指標名稱」。
- 新增說明。
- 將「單位」設為「1」。
如有需要,請複製下列文字並貼到「選取篩選條件」下方的「建立篩選器」方塊,藉此取代現有的文字:
(protoPayload.serviceName="cloudresourcemanager.googleapis.com") AND (ProjectOwnership OR projectOwnerInvitee) OR (protoPayload.serviceData.policyDelta.bindingDeltas.action="REMOVE" AND protoPayload.serviceData.policyDelta.bindingDeltas.role="roles/owner") OR (protoPayload.serviceData.policyDelta.bindingDeltas.action="ADD" AND protoPayload.serviceData.policyDelta.bindingDeltas.role="roles/owner")
點選「建立指標」之後,就會看見確認訊息。
建立警告政策
-
在 Google Cloud 控制台中,前往「記錄指標」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
- 在「使用者定義指標」專區,選取您在前一個部分建立的指標。
-
依序點選「更多」圖示
和「運用指標建立快訊」。「新條件」對話方塊隨即開啟,並預先填入指標和資料轉換選項。
- 點選「Next」。
- 查看預先填入的設定。您可能想修改「門檻值」。
- 按一下「條件名稱」,然後輸入條件名稱。
- 點選「下一步」。
如要新增通知至快訊政策,請按一下「通知管道」。在對話方塊中,從選單選取一或多個通知管道,然後按一下「確定」。
如要在事件開啟和關閉時收到通知,請勾選「Notify on incident closure」(事件關閉時通知)。根據預設,系統只會在事件開啟時傳送通知。
- 選用:更新「事件自動關閉期限」。這個欄位會決定 Monitoring 何時會在沒有指標資料的情況下關閉事件。
- 選用:按一下「說明文件」,然後在通知訊息中新增任何資訊。
- 按一下「快訊名稱」,然後輸入快訊政策的名稱。
- 點選「建立政策」。
Pod security policy disabled
API 中的類別名稱:POD_SECURITY_POLICY_DISABLED
GKE 叢集已停用 PodSecurityPolicy
。
PodSecurityPolicy
是一種許可控制器資源,可驗證在叢集中建立與更新 Pod 的要求。叢集不會接受不符合 PodSecurityPolicy
中定義條件的 Pod。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請定義並授權 PodSecurityPolicies
,然後啟用 PodSecurityPolicy
控制器。如需操作說明,請參閱「使用 PodSecurityPolicies
」一文。
Primitive roles used
API 中的類別名稱:PRIMITIVE_ROLES_USED
使用者具有下列其中一個 IAM 基本角色:roles/owner
、roles/editor
或 roles/viewer
。這些角色的權限過於寬鬆,不應使用。請改為只指派給專案。
詳情請參閱「瞭解角色」一文。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「IAM 政策」頁面。
對於指派了基本角色的使用者,建議改用較精細的角色。
Private cluster disabled
API 中的類別名稱:PRIVATE_CLUSTER_DISABLED
GKE 叢集已停用私人叢集。
私人叢集內的節點只能有私人 IP 位址,這項功能會限制節點的連出網際網路存取權。如果叢集節點沒有公開 IP 位址,就不會顯示在公開網際網路中,也無法偵測到。您還是可以使用內部負載平衡器,將流量轉送至節點。詳情請參閱「私人叢集」。
您無法將現有叢集設為私人叢集。如要修正這項發現項目,請建立新的私人叢集:
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
點選「建立叢集」。
在導覽選單的「叢集」底下,選取「網路」。
選取「私人叢集」的圓形按鈕。
在「進階網路選項」底下,勾選「啟用虛擬私有雲原生流量轉送功能 (使用別名 IP)」核取方塊。
點選「建立」。
Private Google access disabled
API 中的類別名稱:PRIVATE_GOOGLE_ACCESS_DISABLED
部分私人子網路無法存取 Google 公開 API。
啟用 Private Google Access 之後,只有內部 (私人) IP 位址的 VM 執行個體就能連上 Google API 和服務的公開 IP 位址。
詳情請參閱「設定 Google 私人存取權」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台的「VPC networks」(虛擬私有雲網路) 頁面。
在網路清單中,按一下所需網路的名稱。
在「虛擬私有雲網路詳細資料」頁面中,按一下「子網路」分頁標籤。
在子網路清單中,按一下與該 Kubernetes 叢集相關聯的子網路名稱。
在「Subnet details」(子網路詳細資料) 頁面中,按一下
「Edit」(編輯)。在「私人 Google 存取權」下方,選取「啟用」。
按一下 [儲存]。
如要從外部流量僅傳送至 Google API 的 VM 執行個體移除公開 (外部) IP,請參閱「取消指派靜態外部 IP 位址」。
Public bucket ACL
API 中的類別名稱:PUBLIC_BUCKET_ACL
值區是公開的,網際網路上的任何人都能存取。
詳情請參閱存取權控管總覽。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Storage Browser」(儲存空間瀏覽器) 頁面。
選取 Security Health Analytics 發現項目中列出的 bucket。
在「Bucket details」(值區詳細資料) 頁面上,按一下「Permissions」(權限) 分頁標籤。
按一下「檢視方式」旁的「角色」。
在「篩選器」方塊中,搜尋 allUsers 和 allAuthenticatedUsers。
按一下「刪除」
,移除授予 allUsers 和 allAuthenticatedUsers 的所有 IAM 權限。
Public Compute image
API 中的類別名稱:PUBLIC_COMPUTE_IMAGE
Compute Engine 映像檔對外公開,網際網路中的任何人都能存取。allUsers 代表網際網路中的任何使用者,allAuthenticatedUsers 則代表已透過 Google 帳戶通過驗證的任何使用者。貴機構以外的使用者也能屬於這兩個主體。
Compute Engine 映像檔可能含有加密金鑰或授權軟體等機密資訊,這類資訊不應開放公開存取。如果您打算對外公開此 Compute Engine 映像檔,請確保映像檔不包含任何機密資訊。
詳情請參閱存取權控管總覽。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台的「Compute Engine」映像檔頁面。
選取「public-image」圖片旁邊的方塊,然後按一下「Show Info Panel」(顯示資訊面板)。
在「篩選」方塊中,搜尋具備 allUsers 和 allAuthenticatedUsers 角色的主體。
展開要移除使用者的角色。
按一下「刪除」
,即可從該角色移除使用者。
Public dataset
API 中的類別名稱:PUBLIC_DATASET
BigQuery 資料集對外公開,網際網路中的任何人都能存取。身分與存取權管理主體 allUsers 代表網際網路上的任何使用者,allAuthenticatedUsers 則代表已登入 Google 服務的任何使用者。具有上述主體的人員不限於貴機構內的使用者。
詳情請參閱「控管資料集存取權」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的 BigQuery Explorer 頁面。
在資料集清單中,按一下調查結果中識別出的資料集名稱。「資料集資訊」面板隨即開啟。
在「資料集資訊」面板頂端附近,按一下「共用」。
在下拉式選單中,按一下「權限」。
在「資料集權限」面板中,輸入 allUsers 和 allAuthenticatedUsers,然後移除這些主體的存取權。
Public IP address
API 中的類別名稱:PUBLIC_IP_ADDRESS
Compute Engine 執行個體具有公開 IP 位址。
為縮小機構的攻擊面,請避免將公開 IP 位址指派給 VM。系統可能仍會將已停止的執行個體標記為公開的 IP 發現項目。比方說,如果您將網路介面設定為在啟動時指派臨時公開 IP,就會造成上述情況。因此,針對已停止的執行個體,請確認網路設定不包含外部存取權。
詳情請參閱「安全地連結至 VM 執行個體」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
在執行個體清單中,勾選發現項目中執行個體名稱旁的方塊。
按一下「Edit」(編輯)
。針對每個介面,按一下「網路介面」底下的「編輯」
,然後將「外部 IP」設定為「無」。依序按一下 [完成] 及 [儲存]。
Public log bucket
API 中的類別名稱:PUBLIC_LOG_BUCKET
這個發現項目不適用於專案層級的啟用作業。
儲存空間 bucket 對外公開,且做為記錄接收器,因此網際網路上的任何人都能存取這個 bucket 中儲存的記錄。allUsers 代表網際網路上的任何使用者,allAuthenticatedUsers 則代表已登入 Google 服務的任何使用者。這兩者都不限於貴機構內的使用者。
詳情請參閱存取權控管總覽。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台的「Cloud Storage 瀏覽器」頁面。
在值區清單中,按一下調查結果中指出值區的名稱。
按一下「Permissions」(權限) 分頁標籤。
從主體清單中移除 allUsers 和 allAuthenticatedUsers。
Public SQL instance
API 中的類別名稱:PUBLIC_SQL_INSTANCE
SQL 執行個體的可用網路為 0.0.0.0/0
。這表示任何 IPv4 用戶端都能通過網路防火牆,並嘗試登入您的執行個體,包括您可能不想允許的用戶端。用戶端仍須提供有效的憑證,才能順利登入執行個體。
詳情請參閱「使用授權網路授權」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在導覽面板中,按一下「連結」。
在「已授權的網路」底下,刪除
0.0.0.0/0
,然後新增特定的 IP 位址,或是您允許連線至執行個體的 IP 範圍。依序按一下 [完成] 及 [儲存]。
Pubsub CMEK disabled
API 中的類別名稱:PUBSUB_CMEK_DISABLED
Pub/Sub 主題未以客戶管理的加密金鑰 (CMEK) 加密。
如果使用 CMEK,您在 Cloud KMS 中建立及管理的金鑰會包裝 Google 用於加密資料的金鑰,讓您進一步掌控資料的存取權。
如要修正這項發現,請刪除現有主題並建立新主題:
前往 Google Cloud 控制台的 Pub/Sub「主題」頁面。
視需要選取包含 Pub/Sub 主題的專案。
勾選調查結果中列出的主題旁的核取方塊,然後按一下
「刪除」。如要建立啟用 CMEK 的新 Pub/Sub 主題,請參閱「使用客戶管理的加密金鑰」。CMEK 會產生與 Cloud KMS 相關的額外費用。
發布發現項目或其他資料至啟用 CMEK 的 Pub/Sub 主題。
Route not monitored
API 中的類別名稱:ROUTE_NOT_MONITORED
您未設定記錄指標和快訊,監控虛擬私有雲網路路徑變更。
Google Cloud 路徑是目的地和躍點,可定義網路流量從 VM 執行個體到目的地 IP 的路徑。您可以監控路徑資料表的變更,藉此確保所有虛擬私有雲流量都是經由預期的路徑傳輸。
詳情請參閱「記錄指標總覽」。
視資訊量而定,Cloud Monitoring 費用可能相當高昂。如要瞭解服務用量和費用,請參閱 Google Cloud Observability 定價。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
建立指標
前往 Google Cloud 控制台的「記錄指標」頁面。
按一下 [建立指標]。
在「指標類型」底下選取「計數器」。
在「詳細資料」下方:
- 設定「記錄指標名稱」。
- 新增說明。
- 將「單位」設為「1」。
如有需要,請複製下列文字並貼到「選取篩選條件」下方的「建立篩選器」方塊,藉此取代現有的文字:
resource.type="gce_route" AND (protoPayload.methodName:"compute.routes.delete" OR protoPayload.methodName:"compute.routes.insert")
點選「建立指標」之後,就會看見確認訊息。
建立警告政策
-
在 Google Cloud 控制台中,前往「記錄指標」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
- 在「使用者定義指標」專區,選取您在前一個部分建立的指標。
-
依序點選「更多」圖示
和「運用指標建立快訊」。「新條件」對話方塊隨即開啟,並預先填入指標和資料轉換選項。
- 點選「Next」。
- 查看預先填入的設定。您可能想修改「門檻值」。
- 按一下「條件名稱」,然後輸入條件名稱。
- 點選「下一步」。
如要新增通知至快訊政策,請按一下「通知管道」。在對話方塊中,從選單選取一或多個通知管道,然後按一下「確定」。
如要在事件開啟和關閉時收到通知,請勾選「Notify on incident closure」(事件關閉時通知)。根據預設,系統只會在事件開啟時傳送通知。
- 選用:更新「事件自動關閉期限」。這個欄位會決定 Monitoring 何時會在沒有指標資料的情況下關閉事件。
- 選用:按一下「說明文件」,然後在通知訊息中新增任何資訊。
- 按一下「快訊名稱」,然後輸入快訊政策的名稱。
- 點選「建立政策」。
Redis role used on org
API 中的類別名稱:REDIS_ROLE_USED_ON_ORG
這個發現項目不適用於專案層級的啟用作業。
在機構或資料夾層級指派 Redis IAM 角色。
下列 Redis IAM 角色只能在專案層級指派,不得在機構或資料夾層級指派:
roles/redis.admin
roles/redis.viewer
roles/redis.editor
詳情請參閱存取權控管和權限。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「IAM 政策」頁面。
請移除調查結果中指出的 Redis IAM 角色,並改為針對個別專案新增角色。
Release channel disabled
API 中的類別名稱:RELEASE_CHANNEL_DISABLED
GKE 叢集未訂閱發布管道。
訂閱發布版本,自動將 GKE 叢集升級至新版本。這些功能也會根據所需的功能數量和穩定程度,降低版本管理複雜度。詳情請參閱「發布管道」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
在「叢集基本資訊」專區中,按一下「發布版本」列中的
「升級叢集主節點版本」。如果叢集設定最近有所變更,編輯按鈕可能會遭停用。如果無法編輯叢集設定,請稍候幾分鐘再試。
在對話方塊中選取「發布版本」,然後選擇要訂閱的發布版本。
如果叢集的控制層版本無法升級至某個發布版本,該版本可能會停用。
按一下 [儲存變更]。
RSASHA1 for signing
API 中的類別名稱:RSASHA1_FOR_SIGNING
RSASHA1 用於 Cloud DNS 區域的金鑰簽署。用於簽署金鑰的演算法不應強度較低。
如要修正這項發現,請按照「使用進階簽署選項」指南操作,改用建議的演算法。
瞭解這類發現項目支援的資產和掃描設定Service account key not rotated
API 中的類別名稱:SERVICE_ACCOUNT_KEY_NOT_ROTATED
這個發現項目不適用於專案層級的啟用作業。
使用者管理的服務帳戶金鑰已超過 90 天未輪替。
一般而言,使用者管理的服務帳戶金鑰應至少每 90 天輪替一次,確保無法透過可能遺失、遭盜用或遭竊的舊金鑰存取資料。詳情請參閱「輪替服務帳戶金鑰,降低金鑰外洩造成的安全風險」。
如果您自行產生公開/私密金鑰組,並將私密金鑰儲存在硬體安全模組 (HSM),然後將公開金鑰上傳至 Google,則可能不需要每 90 天輪替金鑰。如果認為金鑰可能遭到盜用,可以輪替金鑰。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。
如有必要,請選取調查結果中指出的專案。
在服務帳戶清單中,找出調查結果中列出的服務帳戶。
按一下「金鑰」分頁標籤,然後找出要停用的金鑰。
如要停用金鑰,請按照「停用服務帳戶金鑰」一文中的操作說明進行。
選用:確認金鑰不再使用後,請刪除服務帳戶金鑰。
瞭解這類發現項目支援的資產和掃描設定
Service account role separation
API 中的類別名稱:SERVICE_ACCOUNT_ROLE_SEPARATION
這個發現項目不適用於專案層級的啟用作業。
貴機構中有一或多個主體具備多項服務帳戶權限。不建議同一個帳戶同時具備服務帳戶管理員和其他服務帳戶權限。如要瞭解服務帳戶和可用的角色,請參閱「服務帳戶」一文。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「IAM」IAM頁面。
針對調查結果中列出的每個主體,請執行下列操作:
- 查看「繼承」欄,確認角色是否繼承自資料夾或機構資源。如果該欄含有父項資源的連結,請點選該連結,前往父項資源的「身分與存取權管理」頁面。
- 按一下主體旁的「編輯」 。
- 如要移除權限,請按一下「服務帳戶管理員」旁的「刪除」 。如要移除所有服務帳戶權限,請點選其他各項權限旁的「刪除」。
按一下 [儲存]。
Shielded VM disabled
API 中的類別名稱:SHIELDED_VM_DISABLED
這個 Compute Engine 執行個體已停用受防護的 VM。
受防護的 VM 是 Google Cloud 上由一組安全控管機制所強化的虛擬機器 (VM),有助抵禦 Rootkit 與 Bootkit 攻擊。 Google Cloud 受防護的 VM 可確保啟動載入器和韌體經過簽署及驗證。進一步瞭解受防護的 VM。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
選取與 Security Health Analytics 發現項目相關的執行個體。
在載入的「Instance details」(執行個體詳細資料) 頁面中,按一下
「Stop」(停止)。執行個體停止後,按一下「編輯」
。在「受防護的 VM」專區,切換「啟用 vTPM」和「啟用完整性監控功能」,藉此啟用受防護的 VM。
如未使用任何自訂或未經簽署的驅動程式,請一併啟用安全啟動功能。
按一下 [儲存]。新設定會顯示在「執行個體詳細資料」頁面中。
按一下「啟動」
,啟動執行個體。
SQL CMEK disabled
API 中的類別名稱:SQL_CMEK_DISABLED
SQL 資料庫執行個體未使用客戶自行管理的加密金鑰 (CMEK)。
如果使用 CMEK,您在 Cloud KMS 中建立及管理的金鑰會包裝 Google 用於加密資料的金鑰,讓您進一步掌控資料的存取權。如需更多資訊,請參閱產品的 CMEK 總覽: MySQL 適用的 Cloud SQL、 PostgreSQL 適用的 Cloud SQL 或 SQL Server 適用的 Cloud SQL。CMEK 會產生與 Cloud KMS 相關的額外費用。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「刪除」圖示
。如要建立已啟用 CMEK 的新執行個體,請按照下列指示為產品設定 CMEK:
SQL contained database authentication
API 中的類別名稱:SQL_CONTAINED_DATABASE_AUTHENTICATION
Cloud SQL for SQL Server 資料庫執行個體的「contained database authentication」資料庫旗標未設為「Off」。
contained database authentication 旗標會決定您是否能建立自主資料庫,或是將自主資料庫附加至資料庫引擎。自主資料庫內含定義資料庫所需的各項資料庫設定和中繼資料,而且在安裝資料庫的資料庫引擎執行個體沒有設定依附元件。
不建議啟用這項旗標,原因如下:
- 使用者在資料庫引擎層級不需要驗證,即可連線至資料庫。
- 將資料庫與資料庫引擎隔離開來後,資料庫即可移至 SQL Server 的其他執行個體。
自主資料庫會面臨獨特的威脅,SQL Server 資料庫引擎管理員應加以瞭解,並減輕這些威脅的影響。多數威脅來自「USER WITH PASSWORD」驗證程序,這項程序會將驗證界線從資料庫引擎層級移至資料庫層級。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「資料庫旗標」專區,將「contained database authentication」資料庫旗標的值設為「Off」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL cross DB ownership chaining
API 中的類別名稱:SQL_CROSS_DB_OWNERSHIP_CHAINING
Cloud SQL for SQL Server 資料庫執行個體的「cross db ownership chaining」資料庫旗標未設為「Off」。
cross db ownership chaining 旗標可讓您控管資料庫層級的跨資料庫擁有權鏈結,或是允許所有資料庫陳述式的跨資料庫擁有權鏈結。
如果 SQL Server 執行個體託管的資料庫並未全數加入跨資料庫擁有權鏈結,而且您不瞭解這項設定的安全性疑慮,則不建議啟用這項旗標。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「資料庫旗標」專區,將 cross db ownership chaining 資料庫旗標的值設為「Off」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL external scripts enabled
API 中的類別名稱:SQL_EXTERNAL_SCRIPTS_ENABLED
Cloud SQL for SQL Server 資料庫執行個體的「external scripts enabled」資料庫旗標未設為「Off」。
啟用這項設定之後,您就能透過特定遠端語言擴充功能執行指令碼。這項功能可能會對系統安全性造成負面影響,因此建議您停用。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「資料庫旗標」專區中,將「external scripts enabled」資料庫旗標的值設為「Off」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL instance not monitored
API 中的類別名稱:SQL_INSTANCE_NOT_MONITORED
這個發現項目不適用於專案層級的啟用作業。
記錄指標和快訊未設定為監控 Cloud SQL 執行個體設定變更。
SQL 執行個體選項如果設定錯誤,可能會帶來安全性風險。停用自動備份和高可用性選項可能會影響業務持續性,而未限制授權網路則可能會增加接觸不受信任網路的風險。監控 SQL 執行個體設定的變更,有助於縮短偵測及修正錯誤設定的時間。
詳情請參閱「記錄指標總覽」。
視資訊量而定,Cloud Monitoring 費用可能相當高昂。如要瞭解服務用量和費用,請參閱 Google Cloud Observability 定價。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
建立指標
前往 Google Cloud 控制台的「記錄指標」頁面。
按一下 [建立指標]。
在「指標類型」底下選取「計數器」。
在「詳細資料」下方:
- 設定「記錄指標名稱」。
- 新增說明。
- 將「單位」設為「1」。
如有需要,請複製下列文字並貼到「選取篩選條件」下方的「建立篩選器」方塊,藉此取代現有的文字:
protoPayload.methodName="cloudsql.instances.update" OR protoPayload.methodName="cloudsql.instances.create" OR protoPayload.methodName="cloudsql.instances.delete"
點選「建立指標」之後,就會看見確認訊息。
建立警告政策
-
在 Google Cloud 控制台中,前往「記錄指標」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
- 在「使用者定義指標」專區,選取您在前一個部分建立的指標。
-
依序點選「更多」圖示
和「運用指標建立快訊」。「新條件」對話方塊隨即開啟,並預先填入指標和資料轉換選項。
- 點選「Next」。
- 查看預先填入的設定。您可能想修改「門檻值」。
- 按一下「條件名稱」,然後輸入條件名稱。
- 點選「下一步」。
如要新增通知至快訊政策,請按一下「通知管道」。在對話方塊中,從選單選取一或多個通知管道,然後按一下「確定」。
如要在事件開啟和關閉時收到通知,請勾選「Notify on incident closure」(事件關閉時通知)。根據預設,系統只會在事件開啟時傳送通知。
- 選用:更新「事件自動關閉期限」。這個欄位會決定 Monitoring 何時會在沒有指標資料的情況下關閉事件。
- 選用:按一下「說明文件」,然後在通知訊息中新增任何資訊。
- 按一下「快訊名稱」,然後輸入快訊政策的名稱。
- 點選「建立政策」。
SQL local infile
API 中的類別名稱:SQL_LOCAL_INFILE
Cloud SQL for MySQL 資料庫執行個體的 local_infile 資料庫旗標未設為「Off」。local_infile 旗標有安全性問題,因此應停用。詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「資料庫旗標」專區中,將 local_infile 資料庫旗標的值設為「Off」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL log checkpoints disabled
API 中的類別名稱:SQL_LOG_CHECKPOINTS_DISABLED
Cloud SQL for PostgreSQL 資料庫執行個體的 log_checkpoints 資料庫旗標未設為「On」。
只要啟用 log_checkpoints,伺服器記錄就會記下查核點和重新啟動點。記錄訊息中會有一些統計資料,包含寫入的緩衝區數量,以及寫入緩衝區時耗費的時間。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。前往「資料庫旗標」區段,將 log_checkpoints 資料庫旗標的值設為「On」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL log connections disabled
API 中的類別名稱:SQL_LOG_CONNECTIONS_DISABLED
Cloud SQL for PostgreSQL 資料庫執行個體的 log_connections 資料庫旗標未設為「On」。
只要啟用 log_connections 設定,系統就會記錄嘗試連線至伺服器的活動,以及順利完成用戶端驗證的活動。解決問題及確認不尋常的伺服器連線嘗試時,這些記錄可以派上用場。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「資料庫旗標」專區中,將 log_connections 資料庫旗標的值設為「On」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL log disconnections disabled
API 中的類別名稱:SQL_LOG_DISCONNECTIONS_DISABLED
Cloud SQL for PostgreSQL 資料庫執行個體的 log_disconnections 資料庫旗標未設為「On」。
只要啟用 log_disconnections 設定,系統就會在每個工作階段結束時建立記錄項目。解決問題及確認某段時間內的不尋常活動時,這些記錄可以派上用場。詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「資料庫旗標」專區中,將 log_disconnections 資料庫旗標的值設為「On」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL log duration disabled
API 中的類別名稱:SQL_LOG_DURATION_DISABLED
Cloud SQL for PostgreSQL 資料庫執行個體的「log_duration」資料庫旗標未設為「On」。
啟用 log_duration 後,系統會記錄各個已完成陳述式的執行時間與持續時間。如要找出執行速度緩慢的查詢及解決資料庫問題,監控查詢執行時間即為關鍵。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「資料庫旗標」專區中,將 log_duration 資料庫旗標設為「On」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL log error verbosity
API 中的類別名稱:SQL_LOG_ERROR_VERBOSITY
Cloud SQL for PostgreSQL 資料庫執行個體的 log_error_verbosity 資料庫旗標未設為 default 或 verbose。
log_error_verbosity 旗標可控制系統記錄的訊息詳細資料量。詳細程度越高,記錄的訊息就會越詳細。建議您將這項旗標設為「default」或「verbose」。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「資料庫旗標」專區,將 log_error_verbosity 資料庫旗標設為「default」或「verbose」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL log lock waits disabled
API 中的類別名稱:SQL_LOG_LOCK_WAITS_DISABLED
Cloud SQL for PostgreSQL 資料庫執行個體的 log_lock_waits 資料庫旗標未設為「On」。
啟用 log_lock_waits 設定之後,只要工作階段在鎖定前的等待時間超過 deadlock_timeout 的時間,系統就會建立記錄項目。判斷等待鎖定的情況是否導致效能不佳時,這些記錄即可派上用場。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「資料庫旗標」專區中,將 log_lock_waits 資料庫旗標的值設為「On」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL log min duration statement enabled
API 中的類別名稱:SQL_LOG_MIN_DURATION_STATEMENT_ENABLED
PostgreSQL 適用的 Cloud SQL 資料庫執行個體未將 log_min_duration_statement 資料庫旗標設為 -1。
啟用 log_min_duration_statement 旗標之後,系統就會記錄執行時間超過指定時長的 SQL 陳述式。建議您停用這項設定,因為 SQL 陳述式可能含有不應記下的機密資訊。詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「資料庫旗標」專區,將 log_min_duration_statement 資料庫旗標的值設為「-1」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL log min error statement
API 中的類別名稱:SQL_LOG_MIN_ERROR_STATEMENT
Cloud SQL for PostgreSQL 資料庫執行個體的「log_min_error_statement」log_min_error_statement資料庫旗標未正確設定。
log_min_error_statement 旗標會決定伺服器記錄中是否會記下產生錯誤狀況的 SQL 陳述式。系統會記錄嚴重性達指定等級以上的錯誤 SQL 陳述式和相關訊息。嚴重性越高,可記錄的訊息越少。
如果 log_min_error_statement 未設為正確的值,系統可能無法將訊息歸類為錯誤訊息。嚴重性等級設得太低,會導致訊息數量增加,因而難以找到實際錯誤。設定的嚴重性等級過高,則有可能未記錄真正錯誤的錯誤訊息。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。前往「資料庫旗標」區段,並根據貴機構的記錄政策,將「log_min_error_statement」資料庫旗標設為以下其中一個建議值。
debug5
debug4
debug3
debug2
debug1
info
notice
warning
error
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL log min error statement severity
API 中的類別名稱:SQL_LOG_MIN_ERROR_STATEMENT_SEVERITY
Cloud SQL for PostgreSQL 資料庫執行個體的「log_min_error_statement」log_min_error_statement資料庫旗標未正確設定。
log_min_error_statement 旗標會決定伺服器記錄中是否會記下產生錯誤狀況的 SQL 陳述式。系統會記錄嚴重性達指定等級以上的錯誤 SQL 陳述式和相關訊息。嚴重性等級越高,記下的訊息就越少。
如果 log_min_error_statement 未設為正確的值,系統可能無法將訊息歸類為錯誤訊息。嚴重性等級設得太低,會導致訊息數量增加,因而難以找到實際錯誤。如果嚴重性等級過高 (過於嚴格),系統可能不會記錄實際錯誤的錯誤訊息。
建議您將這項旗標設為「error」或更嚴格的值。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「資料庫旗標」專區,依據貴機構的記錄政策,將 log_min_error_statement 資料庫旗標設為下列其中一個建議值。
error
log
fatal
panic
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL log min messages
API 中的類別名稱:SQL_LOG_MIN_MESSAGES
Cloud SQL for PostgreSQL 資料庫執行個體的 log_min_messages 資料庫旗標未設為至少 warning。
log_min_messages 旗標可控管系統在伺服器記錄檔中記錄哪些訊息層級。嚴重性等級越高,記下的訊息就越少。如果門檻設得太低,記錄可能會變長、儲存空間規模也有可能變大,難以找到實際錯誤。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。前往「資料庫旗標」區段,並根據貴機構的記錄政策,將「log_min_messages」資料庫旗標設為以下其中一個建議值。
debug5
debug4
debug3
debug2
debug1
info
notice
warning
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL log executor stats enabled
API 中的類別名稱:SQL_LOG_EXECUTOR_STATS_ENABLED
Cloud SQL for PostgreSQL 資料庫執行個體的 log_executor_stats 資料庫旗標未設為「Off」。
啟用 log_executor_stats 旗標後,系統會在每項查詢的 PostgreSQL 記錄檔中納入執行程式效能統計資料。這項設定在疑難排解時相當實用,但可能會大幅增加記錄檔數量和效能負擔。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。前往「資料庫旗標」專區,將「log_executor_stats」資料庫旗標設為「Off」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL log hostname enabled
API 中的類別名稱:`SQL_LOG_HOSTNAME_ENABLED
Cloud SQL for PostgreSQL 資料庫執行個體的 log_hostname 資料庫旗標未設為「Off」。
啟用 log_hostname 旗標後,系統會記錄連線主機的主機名稱。連線記錄訊息預設只會顯示 IP 位址。這項設定在疑難排解時相當實用,不過可能會影響伺服器效能,因為記下的每個陳述式都必須進行 DNS 解析,將 IP 位址轉換為主機名稱。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「資料庫旗標」專區中,將「log_hostname」資料庫旗標設為「Off」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL log parser stats enabled
API 中的類別名稱:SQL_LOG_PARSER_STATS_ENABLED
Cloud SQL for PostgreSQL 資料庫執行個體的 log_parser_stats 資料庫旗標未設為「Off」。
啟用 log_parser_stats 旗標後,系統會在每項查詢的 PostgreSQL 記錄檔中納入剖析器效能統計資料。這項設定在疑難排解時相當實用,不過記錄數量和效能負擔可能會大幅增加。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。前往「資料庫旗標」區段,將「log_parser_stats」資料庫旗標設為「Off」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL log planner stats enabled
API 中的類別名稱:SQL_LOG_PLANNER_STATS_ENABLED
Cloud SQL for PostgreSQL 資料庫執行個體的 log_planner_stats 資料庫旗標未設為「Off」。
啟用 log_planner_stats 旗標後,系統會使用原始剖析方法來記錄 PostgreSQL 規劃工具的效能統計資料。這項設定在疑難排解時相當實用,不過記錄數量和效能負擔可能會大幅增加。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。前往「資料庫旗標」區段,將「log_planner_stats」資料庫旗標設為「Off」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL log statement
API 中的類別名稱:SQL_LOG_STATEMENT
Cloud SQL for PostgreSQL 資料庫執行個體的 log_statement 資料庫旗標未設為 ddl
。
這項旗標的值會決定要記錄哪些 SQL 陳述式。您可以運用 Logging 解決作業問題及執行鑑識分析。如果這項旗標未設為正確的值,您可能會因訊息過多而找不到相關資訊,或是未記下相關資訊。如果貴機構的記錄政策未另行指定,建議您使用「ddl」(所有資料定義陳述式) 這個值。ddl
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「資料庫旗標」專區中,將「log_statement」資料庫旗標設為
ddl
。按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL log statement stats enabled
API 中的類別名稱:SQL_LOG_STATEMENT_STATS_ENABLED
Cloud SQL for PostgreSQL 資料庫執行個體的 log_statement_stats 資料庫旗標未設為 Off。
啟用 log_statement_stats 旗標後,系統會在每項查詢的 PostgreSQL 記錄檔中納入端對端效能統計資料。這項設定在疑難排解時相當實用,但可能會大幅增加記錄檔數量和效能負擔。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。前往「資料庫旗標」區段,將「log_statement_stats」資料庫旗標設為「Off」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL log temp files
API 中的類別名稱:SQL_LOG_TEMP_FILES
Cloud SQL for PostgreSQL 資料庫執行個體的 log_temp_files 資料庫旗標未設為 0。
系統可能會針對排序作業、雜湊作業和臨時查詢結果建立暫存檔案。將 log_temp_files 旗標設為 0,即可記錄所有暫存檔案資訊。記錄所有暫存檔案可協助您找出潛在的效能問題。詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「資料庫旗標」專區中,將 log_temp_files 資料庫旗標的值設為「0」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL no root password
API 中的類別名稱:SQL_NO_ROOT_PASSWORD
MySQL 資料庫執行個體的超級帳戶未設定密碼。您應為 MySQL 資料庫執行個體新增密碼。詳情請參閱「MySQL 使用者」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
在載入的「執行個體詳細資料」頁面中,選取「使用者」分頁標籤。
按一下「
root
」使用者旁的「更多」圖示 ,然後選取「變更密碼」。輸入高強度的新密碼,然後點選「確定」。
SQL public IP
API 中的類別名稱:SQL_PUBLIC_IP
Cloud SQL 資料庫具有公開 IP 位址。
為縮小貴機構的攻擊面,Cloud SQL 資料庫不應使用公開 IP 位址。私人 IP 位址可提高應用程式的網路安全性並縮短延遲時間。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下左側選單中的「連結」。
按一下「網路」分頁標籤,然後取消勾選「公開 IP」核取方塊。
如果執行個體尚未設為使用私人 IP,請參閱為現有執行個體設定私人 IP。
按一下 [儲存]。
SQL remote access enabled
API 中的類別名稱:SQL_REMOTE_ACCESS_ENABLED
Cloud SQL for SQL Server 資料庫執行個體的「remote access」資料庫旗標未設為「Off」。
啟用這項設定之後,系統會授予權限,讓您從遠端伺服器執行本機預存程序,或是從本機伺服器執行遠端預存程序。如果這項功能遭到濫用,可能會將查詢處理程序卸載至目標,進而對遠端伺服器展開阻斷服務 (DoS) 攻擊。為防止濫用,建議停用這項設定。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「旗標」專區中,將「遠端存取」設為「關閉」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL skip show database disabled
API 中的類別名稱:SQL_SKIP_SHOW_DATABASE_DISABLED
Cloud SQL for MySQL 資料庫執行個體的 skip_show_database 資料庫旗標未設為「On」。
啟用這個旗標之後,如果使用者沒有 SHOW DATABASES 權限,就無法使用 SHOW DATABASES 陳述式。有了這項設定,未明確取得權限的使用者就無法看見其他使用者的資料庫。建議啟用這項旗標。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「旗標」專區,將 skip_show_database 設為「On」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL trace flag 3625
API 中的類別名稱:SQL_TRACE_FLAG_3625
Cloud SQL for SQL Server 資料庫執行個體的 3625 (追蹤記錄旗標) 資料庫旗標未設為「On」。
這項旗標會以星號 (******
) 遮蓋部分錯誤訊息的參數。如果使用者並非固定伺服器角色 sysadmin 的成員,就只能看見有限的資訊。為避免機密資訊外洩,建議您啟用這項旗標。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「資料庫旗標」專區,將 3625 設為「On」。
按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL user connections configured
API 中的類別名稱:SQL_USER_CONNECTIONS_CONFIGURED
SQL Server 適用的 Cloud SQL 資料庫執行個體已設定 user connections 資料庫旗標。
user connections 選項會指定 SQL Server 執行個體上允許的使用者同時連線數量上限。由於這是動態 (自行設定) 選項,因此 SQL Server 會視需要自動調整使用者連線數量上限 (以允許的上限值為限)。預設值為 0,代表最多允許 32,767 個使用者連線。因此,我們不建議設定 user connections 資料庫旗標。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「資料庫旗標」專區中找到「使用者連線」,並點選一旁的
「刪除」。按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL user options configured
API 中的類別名稱:SQL_USER_OPTIONS_CONFIGURED
Cloud SQL for SQL Server 資料庫執行個體已設定 user options 資料庫旗標。
這項設定會覆寫所有使用者的「設定」選項全域預設值。使用者和應用程式可能會假設已選用預設的資料庫「設定」選項。在這種情況下,設定使用者選項可能會產生非預期的結果。因此,我們不建議設定 user options 資料庫旗標。
詳情請參閱「設定資料庫標記」。
如要修正這項發現,請完成下列步驟:
前往Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
按一下「Edit」(編輯)
。在「資料庫旗標」專區,點選「user options」旁的
「刪除」。按一下 [儲存]。新設定會顯示在「執行個體總覽」頁面中。
SQL weak root password
API 中的類別名稱:SQL_WEAK_ROOT_PASSWORD
MySQL 資料庫執行個體的超級帳戶密碼強度低。您應為執行個體設定高強度密碼。詳情請參閱「MySQL 使用者」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
在載入的「執行個體詳細資料」頁面中,選取「使用者」分頁標籤。
按一下「
root
」使用者旁的「更多」圖示 ,然後選取「變更密碼」。輸入高強度的新密碼,然後點選「確定」。
SSL not enforced
API 中的類別名稱:SSL_NOT_ENFORCED
Cloud SQL 資料庫執行個體未要求所有連入連線都使用 SSL。
為避免未加密的通訊洩漏傳輸中的機密資料,SQL 資料庫執行個體的所有連入連線皆應使用 SSL。進一步瞭解如何設定 SSL/TLS。
如要修正這項發現,請僅允許 SQL 執行個體的 SSL 連線:
前往 Google Cloud 控制台中的「Cloud SQL 執行個體」頁面。
選取安全性狀態分析發現項目中列出的執行個體。
在「連線」分頁,點選「僅允許 SSL 連線」或「要求使用信任的用戶端憑證」。詳情請參閱「強制執行 SSL/TLS 加密機制」。
如果您選擇「要求使用信任的用戶端憑證」,請建立新的用戶端憑證。詳情請參閱「建立新的用戶端憑證」。
Too many KMS users
API 中的類別名稱:TOO_MANY_KMS_USERS
將可使用加密編譯金鑰的主體使用者人數限制為三位。 指派下列預先定義的角色,即可授予使用加密編譯金鑰加密、解密或簽署資料的權限:
roles/owner
roles/cloudkms.cryptoKeyEncrypterDecrypter
roles/cloudkms.cryptoKeyEncrypter
roles/cloudkms.cryptoKeyDecrypter
roles/cloudkms.signer
roles/cloudkms.signerVerifier
詳情請參閱「權限和角色」。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Cloud KMS keys」(Cloud KMS 金鑰) 頁面。
按一下調查結果中顯示的金鑰環名稱。
按一下調查結果中顯示的金鑰名稱。
選取主要版本旁的方塊,然後按一下「顯示資訊面板」。
將具加密、解密或簽署資料權限的主體數量減至三個以下。如要撤銷權限,請按一下每個主體旁的「刪除」
。
Unconfirmed AppArmor profile
API 中的類別名稱:GKE_APP_ARMOR
容器可明確設為不受 AppArmor 限制。這樣可以確保容器不會套用任何 AppArmor 設定檔,因此不會受到設定檔的限制。停用預防性安全性控管機制會提高容器跳脫的風險。
如要修正這項發現,請對受影響的工作負載執行下列步驟:
- 開啟每個受影響工作負載的資訊清單。
- 將下列受限制的欄位設為其中一個允許值。
受限制的欄位
metadata.annotations["container.apparmor.security.beta.kubernetes.io/*"]
接受的值
- false
User managed service account key
API 中的類別名稱:USER_MANAGED_SERVICE_ACCOUNT_KEY
使用者管理服務帳戶金鑰。 如未妥善管理服務帳戶金鑰,可能會產生安全性風險,請盡可能 選用比服務帳戶金鑰更安全的替代方案。如必須使用服務帳戶金鑰進行驗證,您有責任保護私密金鑰的安全,並執行 管理服務帳戶金鑰的最佳做法一文所述的其他作業。如果無法建立服務帳戶金鑰,可能是因為貴機構已停用這項功能。詳情請參閱「 管理預設安全機構資源」。
如果您是從外部來源取得服務帳戶金鑰,必須先驗證金鑰,才能使用。 詳情請參閱「 外部來源憑證的安全規定」。
如要修正這項發現,請完成下列步驟:
前往 Google Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。
如有必要,請選取調查結果中指出的專案。
如果使用者自行管理的服務帳戶金鑰沒有任何應用程式會使用,請刪除該金鑰。
Weak SSL policy
API 中的類別名稱:WEAK_SSL_POLICY
Compute Engine 執行個體採用低強度的 SSL 政策,或使用 TLS 版本低於 1.2 的 Google Cloud預設 SSL 政策。
HTTPS 和 SSL Proxy 負載平衡器會根據 SSL 政策,判斷使用者與網際網路之間建立 TLS 連線時,要使用什麼通訊協定和加密套件。這些連線會加密機密資料,以防惡意人士竊取資料。強度較低的安全資料傳輸層 (SSL) 政策會允許使用舊版傳輸層安全標準 (TLS) 的用戶端,以安全性較低的加密套件或通訊協定進行連線。如需建議的加密套件和舊版加密套件清單,請造訪 iana.org 傳輸層安全標準 (TLS) 參數頁面。
如果在專案層級啟用 Security Command Center Premium 方案,只有在父項機構啟用 Standard 方案時,才能使用這項發現項目。
根據這項發現是由預設 Google Cloud SSL 政策,還是允許低強度加密套件或最低 TLS 版本小於 1.2 的 SSL 政策所觸發,補救步驟會有所不同。請根據發現項目的觸發原因,按照下列程序操作。
預設 Google Cloud SSL 政策補救措施
前往 Google Cloud 控制台的「目標 Proxy」頁面。
找出調查結果中顯示的目標 Proxy,並記下「使用者」欄中的轉送規則。
如要建立新的 SSL 政策,請參閱「使用 SSL 政策」。政策的「最低傳輸層安全標準 (TLS) 版本」應為 1.2,「設定檔」則應為「新型」或「受限」。
如要使用「自訂」設定檔,請務必停用下列加密套件:
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
將安全資料傳輸層 (SSL) 政策套用至您先前記下的每個轉送規則。
允許使用低強度加密套件或舊版 TLS 版本的修正措施
前往 Google Cloud 控制台的「SSL policies」(SSL 政策) 頁面。
找出「使用目標 Proxy 的資源」欄中顯示的負載平衡器。
按一下政策名稱下方。
按一下「Edit」(編輯)
。將「最低傳輸層安全標準 (TLS) 版本」變更為「TLS 1.2」,並將「設定檔」改為「新型」或「受限」。
如要使用「自訂」設定檔,請務必停用下列加密套件:
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
按一下 [儲存]。
Web UI enabled
API 中的類別名稱:WEB_UI_ENABLED
已啟用 GKE 網頁版 UI (資訊主頁)。
高權限的 Kubernetes 服務帳戶支援 Kubernetes 網頁介面。如果遭到盜用,服務帳戶可能會遭到濫用。如果您已使用 Google Cloud 控制台,則無須啟用 Kubernetes 網頁介面,以免擴大攻擊面。瞭解如何停用 Kubernetes 網頁介面。
如要修正這項發現,請停用 Kubernetes 網頁介面:
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
按一下安全性狀態分析發現項目中列出的叢集名稱。
按一下「Edit」(編輯)
。如果叢集設定最近有所變更,編輯按鈕可能會遭停用。如果無法編輯叢集設定,請稍候幾分鐘再試。
按一下 [外掛程式]。這個部分會展開,顯示可用的外掛程式。
在「Kubernetes 資訊主頁」下拉式清單中,選取 [已停用]。
按一下 [儲存]。
Workload Identity disabled
API 中的類別名稱:WORKLOAD_IDENTITY_DISABLED
GKE 叢集已停用 Workload Identity。
Workload Identity 的安全性較高,且更易於管理,因此建議您使用這項功能,從 GKE 中存取 Google Cloud 服務。啟用後即可保護某些可能為機密的系統中繼資料,讓叢集內運作的使用者工作負載無法存取這類中繼資料。瞭解中繼資料隱藏功能。
如要修正這項發現,請按照指南在叢集上啟用 Workload Identity。
瞭解這類發現項目支援的資產和掃描設定修正 AWS 設定錯誤
AWS Cloud Shell Full Access Restricted
API 中的類別名稱:ACCESS_AWSCLOUDSHELLFULLACCESS_RESTRICTED
AWS CloudShell 方便您對 AWS 服務執行 CLI 指令;受管理的 IAM 政策 (「AWSCloudShellFullAccess」) 提供 CloudShell 的完整存取權,讓使用者可在本機系統和 CloudShell 環境之間上傳及下載檔案。使用者在 Cloud Shell 環境中擁有 sudo 權限,且可存取網際網路。因此,您可以安裝檔案傳輸軟體 (例如),然後將資料從 Cloud Shell 移至外部網際網路伺服器。
建議:確保 AWSCloudShellFullAccess 存取權受到限制 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 控制台
- 在左側窗格中選取「政策」
- 搜尋並選取 AWSCloudShellFullAccess
- 在「附加的實體」分頁中,勾選每個項目的方塊,然後選取「取消連結」
Access Keys Rotated Every 90 Days or Less
API 中的類別名稱:ACCESS_KEYS_ROTATED_90_DAYS_LESS
存取金鑰包含存取金鑰 ID 和存取密鑰,可用於簽署您向 AWS 發出的程式輔助要求。AWS 使用者必須擁有自己的存取金鑰,才能透過 AWS Command Line Interface (AWS CLI)、適用於 Windows PowerShell 的工具、AWS SDK,或使用個別 AWS 服務的 API 進行直接 HTTP 呼叫,以程式輔助方式呼叫 AWS。建議定期輪替所有存取金鑰。
建議:確保存取金鑰最多每隔 90 天輪替一次 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 前往管理控制台 (https://console.aws.amazon.com/iam)
- 按一下
Users
- 按一下
Security Credentials
- 管理員
- 點選Make Inactive
,查看在90
天內未輪替的金鑰 - 以 IAM 使用者身分
- 點選
Make Inactive
或Delete
,查看未輪替或在90
天內未使用的金鑰 - 按一下
Create Access Key
- 使用新的存取金鑰憑證更新程式輔助呼叫
AWS CLI
- 在第一個存取金鑰仍處於啟用狀態時,建立第二個存取金鑰 (預設為啟用狀態)。執行下列指令:
aws iam create-access-key
此時,使用者有兩個有效的存取金鑰。
- 更新所有應用程式和工具,改用新的存取金鑰。
- 使用下列指令,判斷第一個存取金鑰是否仍在使用中:
aws iam get-access-key-last-used
- 其中一種做法是等待幾天,然後檢查舊存取金鑰是否曾使用過,再繼續操作。
即使步驟 3 顯示未使用舊金鑰,建議您不要立即刪除第一個存取金鑰。請改用下列指令,將第一個存取金鑰的狀態變更為「停用」:
aws iam update-access-key
-
只使用新的存取金鑰,確認應用程式是否正常運作。此時,任何仍使用原始存取金鑰的應用程式和工具都會停止運作,因為這些應用程式和工具已無法存取 AWS 資源。如果找到這類應用程式或工具,可以將狀態改回「有效」,重新啟用第一個存取金鑰。然後返回步驟 2,更新這個應用程式以使用新金鑰。
-
等待一段時間,確認所有應用程式和工具都已更新後,即可使用下列指令刪除第一個存取金鑰:
aws iam delete-access-key
All Expired Ssl Tls Certificates Stored Aws Iam Removed
API 中的類別名稱:ALL_EXPIRED_SSL_TLS_CERTIFICATES_STORED_AWS_IAM_REMOVED
如要在 AWS 中為網站或應用程式啟用 HTTPS 連線,您需要 SSL/TLS 伺服器憑證。您可以使用 ACM 或 IAM 儲存及部署伺服器憑證。
只有在必須支援 ACM 不支援區域的 HTTPS 連線時,才使用 IAM 做為憑證管理工具。IAM 會安全地加密私密金鑰,並將加密版本儲存在 IAM SSL 憑證儲存空間。IAM 支援在所有區域部署伺服器憑證,但您必須向外部供應商取得憑證,才能搭配 AWS 使用。您無法將 ACM 憑證上傳至 IAM。此外,您無法透過 IAM 控制台管理憑證。
AWS 管理主控台
AWS 管理控制台目前不支援移除過期憑證。如要透過 AWS API 刪除儲存在 IAM 中的 SSL/TLS 憑證,請使用指令列介面 (CLI)。
AWS CLI
如要刪除過期憑證,請執行下列指令,並將 CERTIFICATE_NAME
替換為要刪除的憑證名稱:
aws iam delete-server-certificate --server-certificate-name <CERTIFICATE_NAME>
如果上述指令執行成功,不會傳回任何輸出內容。
Autoscaling Group Elb Healthcheck Required
API 中的類別名稱:AUTOSCALING_GROUP_ELB_HEALTHCHECK_REQUIRED
這項檢查會確認與負載平衡器相關聯的自動調度資源群組是否使用彈性負載平衡健康狀態檢查。
這可確保群組能根據負載平衡器提供的額外測試,判斷執行個體的健康狀態。使用彈性負載平衡健康狀態檢查,有助於支援使用 EC2 自動調度資源群組的應用程式可用性。
建議:檢查與負載平衡器相關聯的所有自動調度資源群組,確認是否使用健康狀態檢查 如要修正這項發現,請完成下列步驟:AWS 管理主控台
如要啟用 Elastic Load Balancing 健康狀態檢查
- 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 控制台。
- 在導覽窗格中,選擇「Auto Scaling」下方的「Auto Scaling Groups」。
- 勾選群組的核取方塊。
- 選擇「編輯」。
- 在「健康狀態檢查」下方,選擇「健康狀態檢查類型」的「ELB」。
- 在「健康狀態檢查寬限期」中輸入 300。
- 在頁面底部選擇「更新」。
如要進一步瞭解如何搭配使用負載平衡器與 Auto Scaling 群組,請參閱 AWS Auto Scaling 使用者指南。
Auto Minor Version Upgrade Feature Enabled Rds Instances
API 中的類別名稱:AUTO_MINOR_VERSION_UPGRADE_FEATURE_ENABLED_RDS_INSTANCES
請確保 RDS 資料庫執行個體已啟用子版本自動升級標記,以便在指定維護時段內自動升級引擎子版本。因此,RDS 執行個體可以取得資料庫引擎的新功能、錯誤修正和安全性修補程式。
建議:確保 RDS 執行個體已啟用子版本自動升級功能 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 登入 AWS 管理主控台,然後前往 https://console.aws.amazon.com/rds/ 開啟 RDS 資訊主頁。
- 按一下左側導覽面板中的
Databases
。 - 選取要更新的 RDS 執行個體。
- 按一下右上方的
Modify
按鈕。 - 在「
Modify DB Instance: <instance identifier>
」頁面的「Maintenance
」部分,選取「Auto minor version upgrade
」並點按「Yes
」圓形按鈕。 - 按一下頁面底部的
Continue
,勾選「立即套用」即可立即套用變更,或選取Apply during the next scheduled maintenance window
避免停機。 - 查看變更,然後按一下
Modify DB Instance
。執行個體狀態應從「可用」變更為「正在修改」,然後再變回「可用」。啟用這項功能後,Auto Minor Version Upgrade
狀態應會變更為Yes
。
AWS CLI
- 執行
describe-db-instances
指令,列出所選 AWS 區域中所有可用的 RDS 資料庫執行個體名稱:
aws rds describe-db-instances --region <regionName> --query 'DBInstances[*].DBInstanceIdentifier'
- 指令輸出應會傳回每個資料庫執行個體 ID。
- 執行
modify-db-instance
指令來修改所選 RDS 執行個體設定,這項指令會立即套用變更。如要等到下一個排定的維護期間再套用變更,並避免任何停機時間,請移除--apply-immediately
:
aws rds modify-db-instance --region <regionName> --db-instance-identifier <dbInstanceIdentifier> --auto-minor-version-upgrade --apply-immediately
- 指令輸出內容應會顯示 RDS 執行個體的新設定中繼資料,並檢查
AutoMinorVersionUpgrade
參數值。 - 執行
describe-db-instances
指令,檢查是否已成功啟用子版本自動升級功能:
aws rds describe-db-instances --region <regionName> --db-instance-identifier <dbInstanceIdentifier> --query 'DBInstances[*].AutoMinorVersionUpgrade'
- 指令輸出內容應會傳回設為
true
的功能目前狀態,表示該功能為enabled
,且系統會將次要引擎升級套用至所選 RDS 執行個體。
Aws Config Enabled All Regions
API 中的類別名稱:AWS_CONFIG_ENABLED_ALL_REGIONS
AWS Config 是一項網路服務,可對您帳戶中支援的 AWS 資源執行設定管理,並將記錄檔傳送給您。記錄的資訊包括設定項目 (AWS 資源)、設定項目 (AWS 資源) 之間的關係,以及資源之間的任何設定變更。建議您在所有區域啟用 AWS Config。
建議:確保所有區域都已啟用 AWS Config 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 在主控台右上角選取要著重的區域
- 按一下「服務」
- 按一下「設定」
- 如果這個區域已啟用 Config 記錄器,請前往左側導覽選單的「設定」頁面。如果這個區域尚未啟用 Config 記錄器,請選取「開始使用」。
- 選取「記錄這個區域支援的所有資源」
- 選擇是否要納入全域資源 (IAM 資源)
- 在相同帳戶或另一個受管理的 AWS 帳戶中指定 S3 bucket
- 從相同 AWS 帳戶或其他代管 AWS 帳戶建立 SNS 主題
AWS CLI
- 請確認您已根據 AWS Config 服務必要條件,設定適當的 S3 值區、SNS 主題和 IAM 角色。
- 執行下列指令來建立新的設定記錄器:
aws configservice put-configuration-recorder --configuration-recorder name=default,roleARN=arn:aws:iam::012345678912:role/myConfigRole --recording-group allSupported=true,includeGlobalResourceTypes=true
- 在本地建立運送管道設定檔,指定管道屬性,並從先前設定的必要條件填入:
{
"name": "default",
"s3BucketName": "my-config-bucket",
"snsTopicARN": "arn:aws:sns:us-east-1:012345678912:my-config-notice",
"configSnapshotDeliveryProperties": {
"deliveryFrequency": "Twelve_Hours"
}
}
- 執行這項指令,建立新的傳送管道,並參照上一個步驟中建立的 JSON 設定檔:
aws configservice put-delivery-channel --delivery-channel file://deliveryChannel.json
- 執行下列指令來啟動設定記錄器:
aws configservice start-configuration-recorder --configuration-recorder-name default
Aws Security Hub Enabled
API 中的類別名稱:AWS_SECURITY_HUB_ENABLED
Security Hub 會從 AWS 帳戶、服務和支援的第三方合作夥伴產品收集安全性資料,協助您分析安全性趨勢,並找出優先順序最高的安全性問題。啟用 Security Hub 後,系統會開始取用、彙整、整理及優先處理您已啟用的 AWS 服務 (例如 Amazon GuardDuty、Amazon Inspector 和 Amazon Macie) 發現的問題。您也可以啟用與 AWS 合作夥伴安全產品的整合功能。
建議:確保已啟用 AWS Security Hub 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 使用 IAM 身分憑證登入 Security Hub 控制台。
- 首次開啟 Security Hub 控制台時,請選擇「Enable AWS Security Hub」。
- 在歡迎頁面中,「安全性標準」會列出 Security Hub 支援的安全性標準。
- 選擇「啟用 Security Hub」。
AWS CLI
- 執行 enable-security-hub 指令。如要啟用預設標準,請加入
--enable-default-standards
。
aws securityhub enable-security-hub --enable-default-standards
- 如要啟用安全中心,但不使用預設標準,請加入
--no-enable-default-standards
。
aws securityhub enable-security-hub --no-enable-default-standards
Cloudtrail Logs Encrypted Rest Using Kms Cmks
API 中的類別名稱:CLOUDTRAIL_LOGS_ENCRYPTED_REST_USING_KMS_CMKS
AWS CloudTrail 是一項網路服務,可記錄帳戶的 AWS API 呼叫,並根據 IAM 政策,向使用者和資源提供這些記錄。AWS Key Management Service (KMS) 是一項代管服務,可協助建立及控管用於加密帳戶資料的加密金鑰,並使用硬體安全模組 (HSM) 保護加密金鑰的安全。您可以設定 CloudTrail 日誌,使用伺服器端加密 (SSE) 和 KMS 客戶建立的主金鑰 (CMK),進一步保護 CloudTrail 日誌。建議將 CloudTrail 設為使用 SSE-KMS。
建議:確保 CloudTrail 記錄檔使用 KMS CMK 加密靜態資料 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 登入 AWS 管理主控台,然後前往 https://console.aws.amazon.com/cloudtrail 開啟 CloudTrail 控制台。
- 在左側導覽窗格中,選擇
Trails
。 - 按一下路徑
- 在
S3
部分下方,按一下編輯按鈕 (鉛筆圖示) - 按一下 [
Advanced
]。 - 從
KMS key Id
下拉式選單選取現有的 CMK
- 注意:請確認 CMK 與 S3 bucket 位於相同區域
- 注意:您必須在所選 CMK 上套用 KMS 金鑰政策,CloudTrail 服務才能使用提供的 CMK 加密及解密記錄檔。如要編輯所選 CMK 金鑰政策,請參閱這篇文章 - 按一下 [
Save
]。 - 系統會顯示通知訊息,指出您必須擁有指定 KMS 金鑰的解密權限,才能解密記錄檔。
- 按一下 [
Yes
]。
AWS CLI
aws cloudtrail update-trail --name <trail_name> --kms-id <cloudtrail_kms_key>
aws kms put-key-policy --key-id <cloudtrail_kms_key> --policy <cloudtrail_kms_key_policy>
Cloudtrail Log File Validation Enabled
API 中的類別名稱:CLOUDTRAIL_LOG_FILE_VALIDATION_ENABLED
CloudTrail 記錄檔驗證功能會建立數位簽章摘要檔,其中包含 CloudTrail 寫入 S3 的每個記錄的雜湊。這些摘要檔案可用於判斷 CloudTrail 傳送記錄後,記錄檔是否經過變更、刪除或未變更。建議您在所有 CloudTrail 上啟用檔案驗證功能。
建議:確保 CloudTrail 日誌檔案驗證功能已啟用 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 登入 AWS 管理主控台,然後前往 https://console.aws.amazon.com/cloudtrail 開啟 IAM 控制台。
- 按一下左側導覽窗格中的
Trails
- 按一下目標路徑
- 在「
General details
」部分中,按一下edit
- 「
Advanced settings
」部分下方 - 勾選「啟用」方塊
Log file validation
- 按一下 [
Save changes
]。
AWS CLI
aws cloudtrail update-trail --name <trail_name> --enable-log-file-validation
請注意,如要使用這些摘要定期驗證記錄,可以執行下列指令:
aws cloudtrail validate-logs --trail-arn <trail_arn> --start-time <start_time> --end-time <end_time>
Cloudtrail Trails Integrated Cloudwatch Logs
API 中的類別名稱:CLOUDTRAIL_TRAILS_INTEGRATED_CLOUDWATCH_LOGS
AWS CloudTrail 是一項網路服務,可記錄特定 AWS 帳戶中發出的 AWS API 呼叫。記錄的資訊包括 API 呼叫者的身分、API 呼叫時間、API 呼叫者的來源 IP 位址、要求參數,以及 AWS 服務傳回的回應元素。CloudTrail 使用 Amazon S3 儲存及傳送記錄檔,因此記錄檔會永久儲存。除了在指定的 S3 儲存空間中擷取 CloudTrail 記錄以供長期分析,您也可以將 CloudTrail 設為將記錄傳送至 CloudWatch Logs,進行即時分析。如果帳戶中所有區域都已啟用追蹤,CloudTrail 會將所有這些區域的記錄檔傳送至 CloudWatch Logs 記錄檔群組。建議您將 CloudTrail 記錄傳送至 CloudWatch Logs。
注意:這項最佳化建議的目的是確保系統能擷取、監控 AWS 帳戶活動,並適時發出警報。CloudWatch Logs 是使用 AWS 服務完成這項作業的原生方式,但不排除使用替代解決方案。
建議:確保 CloudTrail 追蹤已與 CloudWatch Logs 整合 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 在
https://console.aws.amazon.com/cloudtrail/
登入 CloudTrail 控制台 - 選取要更新的
Trail
。 - 向下捲動至「
CloudWatch Logs
」 - 按一下 [
Edit
]。 - 在「
CloudWatch Logs
」下方,按一下方塊Enabled
- 在
Log Group
下方,選擇新記錄群組或選取現有群組 - 編輯
Log group name
,使其與 CloudTrail 相符,或選取現有的 CloudWatch 群組。 - 在「
IAM Role
」下方,選擇新項目或選取現有項目。 - 編輯
Role name
以符合 CloudTrail,或選取現有的 IAM 角色。 - 按一下「儲存變更」。
AWS CLI
aws cloudtrail update-trail --name <trail_name> --cloudwatch-logs-log-group-arn <cloudtrail_log_group_arn> --cloudwatch-logs-role-arn <cloudtrail_cloudwatchLogs_role_arn>
Cloudwatch Alarm Action Check
API 中的類別名稱:CLOUDWATCH_ALARM_ACTION_CHECK
這項檢查會確認 Amazon CloudWatch 是否已定義警示在「OK」、「ALARM」和「INSUFFICIENT_DATA」狀態之間轉換時的動作。
在 Amazon CloudWatch 警報中設定 ALARM 狀態的動作非常重要,因為這樣一來,監控指標超出閾值時,系統就會立即觸發回應。
確保快速解決問題、減少停機時間,並啟用自動修復功能,維持系統健康狀態並防止中斷。
警示至少有一項動作。
當警示從任何其他狀態轉換為「INSUFFICIENT_DATA」狀態時,至少會執行一項動作。
(選用) 警示從任何其他狀態轉換為「OK」狀態時,至少會執行一個動作。
AWS 管理主控台
如要為 Amazon CloudWatch 警示設定 ALARM 動作,請按照下列步驟操作。
- 前往 https://console.aws.amazon.com/cloudwatch/ 開啟 Amazon CloudWatch 控制台。
- 在導覽窗格中,選取「警報」下方的「所有警報」。
- 選擇要修改的 Amazon CloudWatch 警報,然後依序選擇「Actions」(動作) 和「Edit」(編輯)。
- 從左側選擇「步驟 2 - 選擇性設定動作」
- 在「Alarm state trigger」(鬧鐘狀態觸發) 中選取「In alarm」(鬧鐘響起) 選項,設定以鬧鐘為觸發條件的動作。
- 如要將通知傳送至新建立的 SNS 主題,請選取「建立新主題」。
- 在「Create new topic...」(建立新主題...) 方塊中,指定不重複的 SNS 主題名稱。
- 在「Email endpoints that will receive the notification…」方塊中,指定一或多個電子郵件地址。
- 然後選取「建立主題」,建立必要的 Amazon SNS 主題。
- 依序選取右下方的「下一步」、「下一步」,然後選擇「更新鬧鐘」套用變更。
- 開啟電子郵件用戶端,在 AWS Notifications 寄來的郵件中,按一下連結,確認您訂閱了相關的 SNS 主題。
- 重複步驟 4 至 11,並在步驟 5 中選擇「確定」和「資料不足」的「警報狀態觸發條件」,為這兩種狀態設定動作。
- 針對相同 AWS 區域內的所有其他 CloudWatch 警報,重複執行這個程序。
- 針對所有其他 AWS 區域中的所有其他 CloudWatch 警報,重複執行上述程序。
Cloudwatch Log Group Encrypted
API 中的類別名稱:CLOUDWATCH_LOG_GROUP_ENCRYPTED
這項檢查可確保 CloudWatch 日誌已設定 KMS。
CloudWatch Logs 一律會加密日誌群組資料。根據預設,CloudWatch Logs 會對靜態記錄資料使用伺服器端加密。您也可以使用 AWS Key Management Service 進行這項加密作業。如果啟用,系統會使用 AWS KMS 金鑰進行加密。如要使用 AWS KMS 加密,請在建立記錄群組時或建立後,將 KMS 金鑰與記錄群組建立關聯,即可在記錄群組層級啟用加密功能。
建議:確認 Amazon CloudWatch 日誌中的所有日誌群組是否透過 KMS 加密詳情請參閱 Amazon CloudWatch 使用者指南中的「使用 AWS Key Management Service 加密 CloudWatch Logs 中的記錄資料」。
瞭解這類發現項目支援的資產和掃描設定CloudTrail CloudWatch Logs Enabled
API 中的類別名稱:CLOUD_TRAIL_CLOUD_WATCH_LOGS_ENABLED
這項控制項會檢查 CloudTrail 追蹤是否已設為將記錄傳送至 CloudWatch Logs。如果追蹤記錄的 CloudWatchLogsLogGroupArn 屬性為空白,控制項就會失敗。
CloudTrail 會記錄特定帳戶中發出的 AWS API 呼叫。記錄的資訊包括:
- API 呼叫者的身分
- API 呼叫時間
- API 呼叫端的來源 IP 位址
- 要求參數
- AWS 服務傳回的回應元素
CloudTrail 會使用 Amazon S3 儲存及傳送記錄檔。您可以擷取指定 S3 儲存貯體中的 CloudTrail 記錄,以供長期分析。如要執行即時分析,您可以將 CloudTrail 設為將記錄傳送至 CloudWatch Logs。
如果帳戶中所有區域都已啟用追蹤,CloudTrail 會將所有這些區域的記錄檔傳送至 CloudWatch Logs 記錄群組。
Security Hub 建議您將 CloudTrail 記錄檔傳送至 CloudWatch Logs。請注意,這項最佳化建議的目的是確保系統能擷取及監控帳戶活動,並在適當的時機發出警報。您可以使用 CloudWatch Logs,透過 AWS 服務設定這項功能。這項建議並不排除使用其他解決方案。
將 CloudTrail 記錄傳送至 CloudWatch Logs,有助於根據使用者、API、資源和 IP 位址,記錄即時和歷史活動。您可以運用這種方法,針對異常或敏感的帳戶活動設定警報和通知。
建議:確認所有 CloudTrail 追蹤都設為將日誌傳送至 AWS CloudWatch如要整合 CloudTrail 與 CloudWatch Logs,請參閱《AWS CloudTrail 使用者指南》中的「將事件傳送至 CloudWatch Logs」。
瞭解這類發現項目支援的資產和掃描設定No AWS Credentials in CodeBuild Project Environment Variables
API 中的類別名稱:CODEBUILD_PROJECT_ENVVAR_AWSCRED_CHECK
這會檢查專案是否包含環境變數 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
。
驗證憑證 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
絕不應以純文字形式儲存,否則可能導致資料意外曝光和未經授權的存取。
如要從 CodeBuild 專案移除環境變數,請參閱 AWS CodeBuild 使用者指南中的「在 AWS CodeBuild 中變更建構專案的設定」。確認未選取任何環境變數。
您可以將含有機密值的環境變數儲存在 AWS Systems Manager 參數存放區或 AWS Secrets Manager 中,然後從建構規格擷取這些變數。如需操作說明,請參閱《AWS CodeBuild 使用者指南》「環境」一節中標示為「重要」的方塊。
瞭解這類發現項目支援的資產和掃描設定Codebuild Project Source Repo Url Check
API 中的類別名稱:CODEBUILD_PROJECT_SOURCE_REPO_URL_CHECK
這項檢查會確認 AWS CodeBuild 專案的 Bitbucket 來源存放區網址是否含有個人存取權杖,或使用者名稱和密碼。如果 Bitbucket 來源存放區網址包含個人存取權杖,或是使用者名稱和密碼,控制項就會失敗。
登入憑證不應以純文字形式儲存或傳輸,也不應出現在來源存放區網址中。您應該在 CodeBuild 中存取來源供應商,並變更來源存放區網址,只包含 Bitbucket 存放區位置的路徑,而非個人存取權杖或登入憑證。使用個人存取權杖或登入憑證可能會導致資料意外曝光或未經授權存取。
建議:確認使用 GitHub 或 Bitbucket 做為來源的所有專案都使用 OAuth您可以更新 CodeBuild 專案,改用 OAuth。
從 CodeBuild 專案來源移除基本驗證 / (GitHub) 個人存取權杖
- 前往 https://console.aws.amazon.com/codebuild/ 開啟 CodeBuild 控制台。
- 選擇含有個人存取權杖或使用者名稱和密碼的建構專案。
- 從「編輯」選取「來源」。
- 選擇「取消連結 GitHub / Bitbucket」。
- 選擇「使用 OAuth 連線」,然後選擇「連結至 GitHub / Bitbucket」。
- 出現提示時,請視需要選擇授權。
- 視需要重新設定存放區網址和其他設定。
- 選擇「更新來源」。
詳情請參閱《AWS CodeBuild 使用者指南》中的「CodeBuild use case-based samples」。
瞭解這類發現項目支援的資產和掃描設定Credentials Unused 45 Days Greater Disabled
API 中的類別名稱:CREDENTIALS_UNUSED_45_DAYS_GREATER_DISABLED
AWS IAM 使用者可以使用不同類型的憑證 (例如密碼或存取金鑰) 存取 AWS 資源。建議停用或移除 45 天以上未使用的所有憑證。
建議:確保 45 天以上未使用的憑證已停用 如要修正這項發現,請完成下列步驟:AWS 管理主控台
如要管理未使用的密碼 (IAM 使用者控制台存取權),請執行下列操作:
- 登入 AWS 管理主控台:
- 按一下 [
Services
]。 - 按一下 [
IAM
]。 - 按一下
Users
- 按一下
Security Credentials
- 選取
Console last sign-in
大於 45 天的使用者 - 按一下 [
Security credentials
]。 - 在「
Sign-in credentials
」部分,按一下「Manage
」Console password
- 在「主控台存取權」下方選取
Disable
10.按一下Apply
如要停用存取金鑰,請按照下列步驟操作:
- 登入 AWS 管理主控台:
- 按一下 [
Services
]。 - 按一下 [
IAM
]。 - 按一下
Users
- 按一下
Security Credentials
- 選取任何超過 45 天且已使用的存取金鑰,然後點選
-Make Inactive
- 選取任何超過 45 天且未使用的存取金鑰,然後按一下 X
Delete
Default Security Group Vpc Restricts All Traffic
API 中的類別名稱:DEFAULT_SECURITY_GROUP_VPC_RESTRICTS_ALL_TRAFFIC
虛擬私有雲隨附預設安全性群組,其初始設定會拒絕所有傳入流量、允許所有傳出流量,並允許指派給安全性群組的執行個體之間的所有流量。如果您在啟動執行個體時未指定安全性群組,系統會自動將執行個體指派給這個預設安全性群組。安全性群組會對 AWS 資源的輸入/輸出網路流量進行有狀態的篩選。建議預設安全性群組限制所有流量。
每個區域的預設虛擬私有雲都應更新預設安全性群組,以符合規定。新建立的 VPC 會自動包含預設安全群組,您必須修正這些群組,才能符合這項建議。
注意:實作這項建議時,虛擬私有雲流量記錄功能可記錄目前安全群組下發生的所有封包接受和拒絕情況,因此有助於判斷系統正常運作所需的最低權限連接埠存取權。這項功能可大幅降低最低權限工程的主要障礙,也就是找出環境中系統所需的最低連接埠。即使您並未將本基準中的虛擬私有雲流量記錄建議做為永久安全措施,在探索和工程期間,也應使用這項建議,以取得最低權限安全群組。
建議:確保各個虛擬私有雲的預設安全性群組會限制所有流量安全性群組成員
請執行下列步驟,實作規定的狀態:
- 找出預設安全群組中的 AWS 資源
- 為這些資源建立一組最低權限安全性群組
- 將資源放入這些安全性群組
- 從預設安全群組中移除步驟 1 中列出的資源
安全性群組狀態
- 前往 https://console.aws.amazon.com/vpc/home 登入 AWS 管理主控台
- 針對所有 VPC (包括每個 AWS 區域中的預設 VPC) 重複執行下列步驟:
- 在左側窗格中,按一下
Security Groups
- 針對每個預設安全性群組執行下列操作:
- 選取
default
安全性群組 - 按一下「
Inbound Rules
」分頁標籤 - 移除所有輸入規則
- 按一下「
Outbound Rules
」分頁標籤 - 移除所有 Outbound 規則
建議:
您可以在 IAM 群組中編輯「名稱」欄位。針對所有區域中所有虛擬私有雲的預設群組規則完成補救措施後,請編輯這個欄位,加入類似「DO NOT USE. DO NOT ADD RULES」
瞭解這類發現項目支援的資產和掃描設定Dms Replication Not Public
API 中的類別名稱:DMS_REPLICATION_NOT_PUBLIC
檢查 AWS DMS 複製執行個體是否為公開資源。為此,系統會檢查 PubliclyAccessible
欄位的值。
私人複寫執行個體具有私人 IP 位址,您無法從複寫網路外部存取。如果來源和目標資料庫位於相同網路,複寫執行個體應具備私人 IP 位址。網路也必須使用 VPN、AWS Direct Connect 或 VPC 對等互連,連線至複寫執行個體的 VPC。如要進一步瞭解公開和私有複製執行個體,請參閱 AWS Database Migration Service 使用者指南中的「公開和私有複製執行個體」。
此外,您也應確保只有授權使用者可以存取 AWS DMS 執行個體設定。如要這麼做,請限制使用者修改 AWS DMS 設定和資源的 IAM 權限。
建議:檢查 AWS Database Migration Service 的複製執行個體是否為公開資源建立 DMS 複寫執行個體後,就無法變更公開存取權設定。如要變更公開存取設定,請刪除目前的執行個體,然後重新建立。請勿選取「可公開存取」選項。
瞭解這類發現項目支援的資產和掃描設定Do Setup Access Keys During Initial User Setup All Iam Users Console
API 中的類別名稱:DO_SETUP_ACCESS_KEYS_DURING_INITIAL_USER_SETUP_ALL_IAM_USERS_CONSOLE
建立新的 IAM 使用者時,AWS 主控台預設不會選取任何核取方塊。建立 IAM 使用者憑證時,您必須決定使用者需要的存取權類型。
程式存取權:IAM 使用者可能需要呼叫 API、使用 AWS CLI 或使用適用於 Windows PowerShell 的工具。在這種情況下,請為該使用者建立存取金鑰 (存取金鑰 ID 和存取密鑰)。
AWS 管理主控台存取權:如果使用者需要存取 AWS 管理主控台,請為使用者建立密碼。
建議:執行初始使用者設定步驟時,不要為擁有控制台密碼的任何 IAM 使用者設定存取金鑰 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 登入 AWS 管理主控台:
- 按一下 [
Services
]。 - 按一下 [
IAM
]。 - 按一下
Users
- 按一下
Security Credentials
- 管理員
- 點選與使用者設定檔同時建立但未使用的金鑰 X(Delete)
。 - IAM 使用者
- 點選與使用者設定檔同時建立但未使用的金鑰 X(Delete)
。
AWS CLI
aws iam delete-access-key --access-key-id <access-key-id-listed> --user-name <users-name>
Dynamodb Autoscaling Enabled
API 中的類別名稱:DYNAMODB_AUTOSCALING_ENABLED
這項檢查會確認 Amazon DynamoDB 資料表是否能視需要調整讀取和寫入容量。如果資料表使用隨選容量模式,或已設定自動調整資源配置的佈建模式,這項控制項就會通過。根據需求調度容量可避免發生節流例外狀況,有助於維持應用程式的可用性。
採用隨需容量模式的 DynamoDB 資料表只會受到 DynamoDB 預設資料表配額的總處理量限制。如要提高這些配額,請透過 AWS Support 提交支援單。
在佈建模式下,如果 DynamoDB 資料表啟用自動調度資源功能,系統會根據流量模式動態調整佈建的輸送量容量。如要進一步瞭解 DynamoDB 請求節流,請參閱 Amazon DynamoDB 開發人員指南中的「請求節流和爆量容量」。
建議:應將 DynamoDB 資料表設為視需求自動調整容量配置如需在容量模式下,為現有資料表啟用 DynamoDB 自動調度資源功能的詳細操作說明,請參閱 Amazon DynamoDB 開發人員指南中的「為現有資料表啟用 DynamoDB 自動調度資源功能」。
瞭解這類發現項目支援的資產和掃描設定Dynamodb In Backup Plan
API 中的類別名稱:DYNAMODB_IN_BACKUP_PLAN
這項控制項會評估 DynamoDB 資料表是否在備份方案的涵蓋範圍內。如果 DynamoDB 資料表不在備份方案的涵蓋範圍內,這項控制項就會失敗。這項控制項只會評估處於 ACTIVE 狀態的 DynamoDB 資料表。
備份有助於在發生安全性事件後更快復原。同時提升系統的復原力。在備份計畫中加入 DynamoDB 表格,有助於保護資料,避免意外遺失或刪除。
建議:DynamoDB 資料表應在備份方案的涵蓋範圍內如要將 DynamoDB 資料表新增至 AWS Backup 備份方案,請參閱《AWS Backup 開發人員指南》中的「將資源指派給備份方案」。
瞭解這類發現項目支援的資產和掃描設定Dynamodb Pitr Enabled
API 中的類別名稱:DYNAMODB_PITR_ENABLED
時間點復原 (PITR) 是備份 DynamoDB 資料表的機制之一。
時間點備份會保留 35 天。如果需要較長的保留期限,請參閱 AWS 說明文件中的「使用 AWS Backup 設定 Amazon DynamoDB 的排程備份」。
建議:檢查所有 AWS DynamoDB 資料表,確認是否已啟用時間點復原 (PITR) 功能 如要修正這項發現,請完成下列步驟:Terraform
如要為 DynamoDB 資料表設定 PITR,請設定 point_in_time_recovery
區塊:
resource "aws_dynamodb_table" "example" {
# ... other configuration ...
point_in_time_recovery {
enabled = true
}
}
AWS 管理主控台
為現有資料表啟用 DynamoDB 時間點復原功能
- 前往 https://console.aws.amazon.com/dynamodb/ 開啟 DynamoDB 控制台。
- 選擇要使用的資料表,然後選擇「備份」。
- 在「時間點復原」專區的「狀態」下方,選擇「啟用」。
- 再次選擇「啟用」確認變更。
AWS CLI
aws dynamodb update-continuous-backups \
--table-name "GameScoresOnDemand" \
--point-in-time-recovery-specification "PointInTimeRecoveryEnabled=true"
Dynamodb Table Encrypted Kms
API 中的類別名稱:DYNAMODB_TABLE_ENCRYPTED_KMS
檢查所有 DynamoDB 資料表是否都使用客戶自行管理的 KMS 金鑰 (非預設)。
建議:檢查所有 DynamoDB 資料表,確認是否已透過 AWS Key Management Service (KMS) 加密 如要修正這項發現,請完成下列步驟:Terraform
如要修正這項控制項,請建立 AWS KMS 金鑰,並使用該金鑰加密違規的 DynamoDB 資源。
resource "aws_kms_key" "dynamodb_encryption" {
description = "Used for DynamoDB encryption configuration"
enable_key_rotation = true
}
resource "aws_dynamodb_table" "example" {
# ... other configuration ...
server_side_encryption {
enabled = true
kms_key_arn = aws_kms_key.dynamodb_encryption.arn
}
}
AWS 管理主控台
假設現有 AWS KMS 金鑰可用於加密 DynamoDB。
將 DynamoDB 資料表加密方式變更為客戶管理和擁有的 KMS 金鑰。
- 前往 https://console.aws.amazon.com/dynamodb/ 開啟 DynamoDB 控制台。
- 選擇要使用的表格,然後選擇「其他設定」。
- 在「Encryption」(加密) 下方,選擇「Manage encryption」(管理加密)。
- 如要進行靜態加密,請選擇「儲存在您的帳戶中,由您擁有及管理」。
- 選取要使用的 AWS 金鑰。儲存變更。
AWS CLI
aws dynamodb update-table \
--table-name <value> \
--sse-specification "Enabled=true,SSEType=KMS,KMSMasterKeyId=<kms_key_arn>"
Ebs Optimized Instance
API 中的類別名稱:EBS_OPTIMIZED_INSTANCE
檢查可進行 EBS 最佳化的 EC2 執行個體是否已啟用 EBS 最佳化功能
建議:檢查支援 EBS 最佳化的所有執行個體是否已啟用 EBS 最佳化功能如要設定 EBS 最佳化執行個體,請參閱 Amazon EC2 使用者指南中的「Amazon EBS 最佳化執行個體」。
瞭解這類發現項目支援的資產和掃描設定Ebs Snapshot Public Restorable Check
API 中的類別名稱:EBS_SNAPSHOT_PUBLIC_RESTORABLE_CHECK
檢查 Amazon Elastic Block Store 快照是否未公開。如果任何人都能還原 Amazon EBS 快照,這項控制項就會失敗。
EBS 快照可用於在特定時間點將 EBS 磁碟區的資料備份至 Amazon S3。您可以使用快照還原 EBS 磁碟區的先前狀態。通常不適合公開分享快照。通常是誤判或未完全瞭解影響,才決定公開分享快照。這項檢查可確保所有這類共用行為都是經過完整規劃且有意為之。
建議:Amazon EBS 快照不建議設為可公開還原 如要修正這項發現,請完成下列步驟:AWS 管理主控台
如要修正這個問題,請更新 EBS 快照,將其設為私有而非公開。
如要將公開 EBS 快照設為私有,請按照下列步驟操作:
- 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 控制台。
- 在導覽窗格中,選取「Elastic Block Store」下方的「快照」選單,然後選擇公開快照。
- 在「動作」中,選擇「修改權限」。
- 選擇「私人」。
- (選用) 新增已授權帳戶的 AWS 帳戶號碼,與這些帳戶共用快照,然後選擇「新增權限」。
- 選擇「儲存」。
Ebs Volume Encryption Enabled All Regions
API 中的類別名稱:EBS_VOLUME_ENCRYPTION_ENABLED_ALL_REGIONS
使用 Elastic Block Store (EBS) 服務時,Elastic Compute Cloud (EC2) 支援靜態資料加密。雖然預設為停用,但系統支援在建立 EBS 磁碟區時強制加密。
建議:確保所有區域都已啟用 EBS 磁碟區加密功能 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 登入 AWS 管理主控台,然後使用 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 控制台
- 按一下「
Account attributes
」下方的「EBS encryption
」。 - 按一下「
Manage
」。 - 按一下「
Enable
」核取方塊。 - 按一下 [
Update EBS encryption
]。 - 針對需要變更的每個區域重複上述步驟。
注意:EBS 磁碟區加密功能是依區域設定。
AWS CLI
- 執行
aws --region <region> ec2 enable-ebs-encryption-by-default
- 確認是否顯示
"EbsEncryptionByDefault": true
。 - 針對需要變更的每個區域重複上述步驟。
注意:EBS 磁碟區加密功能是依區域設定。
Ec2 Instances In Vpc
API 中的類別名稱:EC2_INSTANCES_IN_VPC
Amazon VPC 提供的安全性功能比 EC2 Classic 更多。建議所有節點都屬於 Amazon VPC。
建議:確保所有執行個體都在虛擬私有雲中 如要修正這項發現,請完成下列步驟:Terraform
如果您在 Terraform 中定義了 EC2 Classic 執行個體,可以修改資源,使其成為虛擬私有雲的一部分。遷移作業會根據最符合您需求的架構進行。以下是簡單的 Terraform 範例,說明虛擬私有雲中公開的 EC2。
resource "aws_vpc" "example_vpc" {
cidr_block = "10.0.0.0/16"
}
resource "aws_subnet" "example_public_subnet" {
vpc_id = aws_vpc.example_vpc.id
cidr_block = "10.0.1.0/24"
availability_zone = "1a"
}
resource "aws_internet_gateway" "example_igw" {
vpc_id = aws_vpc.example_vpc.id
}
resource "aws_key_pair" "example_key" {
key_name = "web-instance-key"
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD3F6tyPEFEzV0LX3X8BsXdMsQz1x2cEikKDEY0aIj41qgxMCP/iteneqXSIFZBp5vizPvaoIR3Um9xK7PGoW8giupGn+EPuxIA4cDM4vzOqOkiMPhz5XK0whEjkVzTo4+S0puvDZuwIsdiW9mxhJc7tgBNL0cYlWSYVkz4G/fslNfRPW5mYAM49f4fhtxPb5ok4Q2Lg9dPKVHO/Bgeu5woMc7RY0p1ej6D4CKFE6lymSDJpW0YHX/wqE9+cfEauh7xZcG0q9t2ta6F6fmX0agvpFyZo8aFbXeUBr7osSCJNgvavWbM/06niWrOvYX2xwWdhXmXSrbX8ZbabVohBK41 email@example.com"
}
resource "aws_security_group" "web_sg" {
name = "http and ssh"
vpc_id = aws_vpc.some_custom_vpc.id
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = -1
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_instance" "web" {
ami = <ami_id>
instance_type = <instance_flavor>
key_name = aws_key_pair.example_key.name
monitoring = true
subnet_id = aws_subnet.example_public_subnet.id
vpc_security_group_ids = [aws_security_group.web_sg.id]
metadata_options {
http_tokens = "required"
}
}
AWS 管理主控台
如要將 EC2 Classic 遷移至 VPC,請參閱「從 EC2-Classic 遷移至 VPC」。
AWS CLI
這個 AWS CLI 範例說明以 Terraform 定義的相同基礎架構。這是虛擬私有雲中公開 EC2 執行個體的簡單範例
建立虛擬私有雲
aws ec2 create-vpc \
--cidr-block 10.0.0.0/16
建立公用子網路
aws ec2 create-subnet \
--availability-zone 1a \
--cidr-block 10.0.1.0/24 \
--vpc-id <id_from_create-vpc_command>
建立網際網路閘道
aws ec2 create-internet-gateway
將網際網路閘道附加至虛擬私有雲
aws ec2 attach-internet-gateway \
--internet-gateway-id <id_from_create-internet-gateway_command> \
--vpc-id <id_from_create-vpc_command>
建立金鑰組 - 這會將私密金鑰儲存在 /.ssh/web-instance-key.pem
aws ec2 create-key-pair \
--key-name web-instance-key \
--query "KeyMaterial" \
--output text > ~/.ssh/web-instance-key.pem && \
chmod 400 ~/.ssh/web-instance-key.pem
建立安全性群組
aws ec2 create-security-group \
--group-name "http and ssh" \
--vpc-id <id_from_create-vpc_command>
建立安全性群組規則 - 如要限制存取權,請為通訊埠 22 上的 SSH 定義更嚴格的 CIDR
aws ec2 authorize-security-group-ingress \
--group-id <id_from_create-security-group_command>
--protocol tcp \
--port 80 \
--cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress \
--group-id <id_from_create-security-group_command>
--protocol tcp \
--port 22 \
--cidr 0.0.0.0/0
aws ec2 authorize-security-group-egress \
--group-id <id_from_create-security-group_command>
--protocol -1 \
--port 0 \
--cidr 0.0.0.0/0
建立 EC2 執行個體
aws ec2 run-instances \
--image-id <ami_id> \
--instance-type <instance_flavor> \
--metadata-options "HttpEndpoint=enabled,HttpTokens=required" \
--monitoring true \
--key-name web-instance-key \
--subnet-id <id_from_create-subnet_command> \
--security-group-ids <id_from_create-security-group_command>
Ec2 Instance No Public Ip
API 中的類別名稱:EC2_INSTANCE_NO_PUBLIC_IP
具有公開 IP 位址的 EC2 執行個體遭到入侵的風險較高。建議不要為 EC2 執行個體設定公開 IP 位址。
建議:確保所有執行個體都沒有公開 IP 如要修正這項發現,請完成下列步驟:Terraform
搭配 aws_instance
資源使用 associate_public_ip_address = false
引數,確保佈建的 EC2 執行個體沒有公開 IP 位址
resource "aws_instance" "no_public_ip" {
...
associate_public_ip_address = false
}
AWS 管理主控台
根據預設,非預設子網路的 IPv4 公開定址屬性會設為 false,預設子網路則會設為 true。但 Amazon EC2 啟動執行個體精靈建立的非預設子網路是例外狀況,因為精靈會將屬性設為 true。您可以使用 Amazon VPC 控制台修改這項屬性。
如要修改子網路的公開 IPv4 位址指派行為
- 前往 https://console.aws.amazon.com/vpc/ 開啟 Amazon VPC 控制台。
- 在導覽窗格中,選擇「子網路」。
- 選取子網路,然後依序選擇「動作」和「編輯子網路設定」。
- 如果勾選「啟用自動指派公開 IPv4 位址」核取方塊,系統會為啟動至所選子網路的所有執行個體要求公開 IPv4 位址。視需要選取或取消勾選核取方塊,然後選擇「儲存」。
AWS CLI
下列指令會在預設子網路中執行 EC2 執行個體,但不會將公開 IP 位址與其建立關聯。
aws ec2 run-instances \
--image-id <ami_id> \
--instance-type <instance_flavor> \
--no-associate-public-ip-address \
--key-name MyKeyPair
Ec2 Managedinstance Association Compliance Status Check
API 中的類別名稱:EC2_MANAGEDINSTANCE_ASSOCIATION_COMPLIANCE_STATUS_CHECK
State Manager 關聯是指派給受管理執行個體的設定。設定會定義您要在執行個體上維護的狀態。舉例來說,關聯可以指定執行個體必須安裝並執行防毒軟體,或是必須關閉特定連接埠。與 AWS Systems Manager 建立關聯的 EC2 執行個體會由 Systems Manager 管理,因此更容易套用修補程式、修正錯誤設定及回應安全事件。
建議:確認 Amazon Systems Manager 的關聯建立狀態 如要修正這項發現,請完成下列步驟:Terraform
以下範例說明如何建立簡單的 EC2 執行個體、AWS Systems Manager (SSM) 文件,以及 SSM 與 EC2 執行個體之間的關聯。支援的文件類型為 Command
和 Policy
。
resource "aws_instance" "web" {
ami = "<iam_id>"
instance_type = "<instance_flavor>"
}
resource "aws_ssm_document" "check_ip" {
name = "check-ip-config"
document_type = "Command"
content = <<DOC
{
"schemaVersion": "1.2",
"description": "Check ip configuration of a Linux instance.",
"parameters": {
},
"runtimeConfig": {
"aws:runShellScript": {
"properties": [
{
"id": "0.aws:runShellScript",
"runCommand": ["ifconfig"]
}
]
}
}
}
DOC
}
resource "aws_ssm_association" "check_ip_association" {
name = aws_ssm_document.check_ip.name
targets {
key = "InstanceIds"
values = [aws_instance.web.id]
}
}
AWS 管理主控台
如要瞭解如何使用主控台設定與 AWS Systems Manager 的關聯,請參閱 AWS Systems Manager 說明文件中的「建立關聯」。
AWS CLI
建立 SSM 文件
aws ssm create-document \
--name <document_name> \
--content file://path/to-file/document.json \
--document-type "Command"
建立 SSM 關聯
aws ssm create-association \
--name <association_name> \
--targets "Key=InstanceIds,Values=<instance-id-1>,<instance-id-2>"
Ec2 Managedinstance Patch Compliance Status Check
API 中的類別名稱:EC2_MANAGEDINSTANCE_PATCH_COMPLIANCE_STATUS_CHECK
這項控制項會檢查在執行關聯後,AWS Systems Manager 關聯合規狀態是否為「COMPLIANT」或「NON_COMPLIANT」。如果關聯的法規遵循狀態為 NON_COMPLIANT,控制項就會失敗。
State Manager 關聯是指派給受管理執行個體的設定。設定會定義您要在執行個體上維護的狀態。舉例來說,關聯可以指定執行個體必須安裝並執行防毒軟體,或必須關閉特定通訊埠。
建立一或多個 State Manager 關聯後,您就能立即取得合規狀態資訊。您可以在控制台或 AWS CLI 指令的回應中,或透過對應的 Systems Manager API 動作,查看合規狀態。如果是關聯,設定法規遵循會顯示法規遵循狀態 (「符合規定」或「不符合規定」)。此外,也會顯示指派給關聯的嚴重性等級,例如「重大」或「中等」。
如要進一步瞭解 State Manager 關聯合規性,請參閱《AWS Systems Manager 使用者指南》中的「About State Manager association compliance」。
建議:檢查 AWS Systems Manager 修補程式的安裝狀態關聯失敗的原因有很多,包括目標和 SSM 文件名稱。如要修正這個問題,請先查看關聯記錄,找出並調查關聯。如需查看關聯記錄的操作說明,請參閱《AWS Systems Manager 使用者指南》中的「查看關聯記錄」。
調查完畢後,你可以編輯關聯,修正已識別的問題。您可以編輯關聯,指定新名稱、時間表、嚴重程度或目標。編輯關聯後,AWS Systems Manager 會建立新版本。如需編輯關聯的說明,請參閱 AWS Systems Manager 使用者指南中的「編輯關聯並建立新版本」。
瞭解這類發現項目支援的資產和掃描設定Ec2 Metadata Service Allows Imdsv2
API 中的類別名稱:EC2_METADATA_SERVICE_ALLOWS_IMDSV2
在 AWS EC2 執行個體上啟用中繼資料服務時,使用者可以選擇使用執行個體中繼資料服務第 1 版 (IMDSv1;要求/回應方法) 或執行個體中繼資料服務第 2 版 (IMDSv2;以工作階段為導向的方法)。
建議:確保 EC2 中繼資料服務僅允許 IMDSv2透過控制台:
1. 登入 AWS 管理主控台,然後使用 https://console.aws.amazon.com/ec2/
開啟 Amazon EC2 控制台。
2. 在「執行個體」選單下方,選取「執行個體」。
3. 針對每個執行個體,選取執行個體,然後依序選擇「Actions」>「Modify instance metadata options」。
4. 如果已啟用執行個體中繼資料服務,請將 IMDSv2 設為「必要」。
使用指令列:
aws ec2 modify-instance-metadata-options --instance-id <instance_id> --http-tokens required
Ec2 Volume Inuse Check
API 中的類別名稱:EC2_VOLUME_INUSE_CHECK
找出並移除 AWS 帳戶中未附加 (未使用) 的 Elastic Block Store (EBS) 磁碟區,以降低每月 AWS 帳單費用。刪除未使用的 EBS 磁碟區也能降低機密/私密資料離開您所在位置的風險。此外,這項控制項也會檢查封存的 EC2 執行個體是否已設定在終止時刪除磁碟區。
根據預設,EC2 執行個體會刪除與執行個體相關聯的任何 EBS 磁碟區中的資料,並刪除執行個體的根 EBS 磁碟區。不過,在啟動或執行期間,附加至執行個體的任何非根 EBS 磁碟區,預設會在終止後保留。
建議:檢查 EBS 磁碟區是否已連接至 EC2 執行個體,並設定執行個體終止時的刪除功能 如要修正這項發現,請完成下列步驟:Terraform
如要使用 Terraform 避免這種情況,請建立內嵌 EBS 區塊的 EC2 執行個體。這可確保執行個體終止時,與執行個體相關聯的所有 EBS 區塊 (不只是根目錄) 都會遭到刪除,因為屬性 ebs_block_device.delete_on_termination
預設為 true
。
resource "aws_instance" "web" {
ami = <ami_id>
instance_type = <instance_flavor>
ebs_block_device {
delete_on_termination = true # Default
device_name = "/dev/sdh"
}
AWS 管理主控台
使用控制台刪除 EBS 磁碟區
- 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 控制台。
- 在導覽窗格中,選擇「Volumes」(磁碟區)。
- 選取要刪除的磁碟區,然後依序選擇「動作」和「刪除磁碟區」。
- 注意:如果「刪除磁碟區」呈現灰色,表示該磁碟區已連結至執行個體。您必須先將磁碟區從執行個體卸離,才能刪除磁碟區。
- 在確認對話方塊中,選擇「刪除」。
AWS CLI
這個範例指令會刪除可用磁碟區,磁碟區 ID 為 vol-049df61146c4d7901。如果指令執行成功,系統不會傳回任何輸出內容。
aws ec2 delete-volume --volume-id vol-049df61146c4d7901
Efs Encrypted Check
API 中的類別名稱:EFS_ENCRYPTED_CHECK
Amazon EFS 支援兩種檔案系統加密形式:傳輸中資料加密和靜態資料加密。這項檢查會確認帳戶中所有已啟用區域的 EFS 檔案系統,是否都已設定靜態資料加密機制。
建議:檢查 EFS 是否已設為使用 KMS 將檔案資料加密 如要修正這項發現,請完成下列步驟:Terraform
您可以使用下列程式碼片段建立 KMS 加密的 EFS (注意:kms_key_id
屬性為選用屬性,如果未傳遞任何 KMS 金鑰 ID,系統會建立金鑰)
resource "aws_efs_file_system" "encrypted-efs" {
creation_token = "my-kms-encrypted-efs"
encrypted = true
kms_key_id = "arn:aws:kms:us-west-2:12344375555:key/16393ebd-3348-483f-b162-99b6648azz23"
tags = {
Name = "MyProduct"
}
}
AWS 管理主控台
如要使用 AWS 管理控制台設定 EFS 加密,請參閱「使用管理控制台加密靜態檔案系統」。
AWS CLI
請務必注意,透過控制台建立 EFS 時,系統會預設啟用待機加密功能,但使用 CLI、API 或 SDK 建立 EFS 時則不會。以下範例說明如何在基礎架構中建立加密的檔案系統。
aws efs create-file-system \
--backup \
--encrypted \
--region us-east-1 \
Efs In Backup Plan
API 中的類別名稱:EFS_IN_BACKUP_PLAN
Amazon 最佳做法建議您為 Elastic File System (EFS) 設定備份。這項檢查會針對 AWS 帳戶中每個已啟用的區域,檢查所有 EFS 是否已啟用備份。
建議:檢查 EFS 檔案系統是否已納入 AWS 備份方案 如要修正這項發現,請完成下列步驟:Terraform
使用 aws_efs_backup_policy
資源為 EFS 檔案系統設定備份政策。
resource "aws_efs_file_system" "encrypted-efs" {
creation_token = "my-encrypted-efs"
encrypted = true
tags = merge({
Name = "${local.resource_prefix.value}-efs"
}, {
git_file = "terraform/aws/efs.tf"
git_org = "your_git_org"
git_repo = "your_git_repo"
})
}
resource "aws_efs_backup_policy" "policy" {
file_system_id = aws_efs_file_system.encrypted-efs.id
backup_policy {
status = "ENABLED"
}
}
AWS 管理主控台
備份 EFS 的方法有兩種:AWS Backup 服務和 EFS 對 EFS 備份解決方案。如要使用主控台修正未備份的 EFS,請參閱:
AWS CLI
您可以使用 CLI 建立符合規範的 EFS 檔案系統,方法如下:
- 建立已啟用自動備份功能的 EFS (One Zone 儲存空間的預設設定,且備份功能須視 AWS 區域的可用性而定)
- 建立 EFS 並設定備份政策
不過,假設您需要在現有 EFS 中進行補救,最佳做法是建立備份政策,並將其與不符規定的 EFS 建立關聯。基礎架構中的每個 EFS 都需要一個指令。
arr=( $(aws efs describe-file-systems | jq -r '.FileSystems[].FileSystemId') )
for efs in "${arr[@]}"
do
aws efs put-backup-policy \
--file-system-id "${efs}" \
--backup-policy "Status=ENABLED"
done
Elb Acm Certificate Required
API 中的類別名稱:ELB_ACM_CERTIFICATE_REQUIRED
檢查傳統版負載平衡器是否使用 AWS Certificate Manager (ACM) 提供的 HTTPS/SSL 憑證。如果設定 HTTPS/SSL 事件監聽器的傳統版負載平衡器未使用 ACM 提供的憑證,這項控制項就會失敗。
如要建立憑證,可以使用 ACM 或支援 SSL 和 TLS 通訊協定的工具,例如 OpenSSL。Security Hub 建議您使用 ACM 為負載平衡器建立或匯入憑證。
ACM 與傳統負載平衡器整合,因此您可以在負載平衡器上部署憑證。您也應該自動續訂這些憑證。
建議:檢查所有傳統版負載平衡器,確認是否使用 AWS Certificate Manager 提供的 SSL 憑證如要瞭解如何將 ACM SSL/TLS 憑證與 Classic Load Balancer 建立關聯,請參閱 AWS 知識中心文章「如何將 ACM SSL/TLS 憑證與 Classic、Application 或 Network Load Balancer 建立關聯?」。
瞭解這類發現項目支援的資產和掃描設定Elb Deletion Protection Enabled
API 中的類別名稱:ELB_DELETION_PROTECTION_ENABLED
檢查應用程式負載平衡器是否已啟用防刪除功能。如果未設定防刪除功能,控制項就會失敗。
啟用防刪除功能,保護應用程式負載平衡器不遭刪除。
建議:應啟用應用程式負載平衡器防刪除功能 如要修正這項發現,請完成下列步驟:AWS 管理主控台
為防止負載平衡器遭意外刪除,您可以啟用防刪除功能。根據預設,系統會停用負載平衡器的刪除保護功能。
如果為負載平衡器啟用防刪除功能,您必須先停用這項功能,才能刪除負載平衡器。
如要從控制台啟用防刪除功能,請按照下列步驟操作。
- 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 控制台。
- 在導覽窗格中,選擇「LOAD BALANCING」(負載平衡) 下方的「Load Balancers」(負載平衡器)。
- 選擇負載平衡器。
- 在「說明」分頁中,選擇「編輯屬性」。
- 在「Edit load balancer attributes」(編輯負載平衡器屬性) 頁面,選取「Enable for Delete Protection」(啟用刪除保護機制),然後選擇「Save」(儲存)。
- 選擇「儲存」。
Elb Logging Enabled
API 中的類別名稱:ELB_LOGGING_ENABLED
這項檢查會確認應用程式負載平衡器和傳統負載平衡器是否已啟用記錄功能。如果 access_logs.s3.enabled 為 false,控制項就會失敗。
Elastic Load Balancing 提供存取記錄,可擷取傳送至負載平衡器的要求詳細資訊。每份記錄都包含要求接收時間、用戶端 IP 位址、延遲時間、要求路徑和伺服器回應等資訊。您可以利用這些存取記錄檔分析流量模式,並排解問題。
詳情請參閱「User Guide for Classic Load Balancers」中的「Access logs for your Classic Load Balancer」。
建議:檢查傳統版負載平衡器和應用程式負載平衡器,確認是否已啟用記錄功能 如要修正這項發現,請完成下列步驟:AWS 管理主控台
如要解決這個問題,請更新負載平衡器以啟用記錄功能。
如何啟用存取記錄檔
- 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 控制台。
- 在導覽窗格中,選擇「Load balancers」(負載平衡器)。
- 選擇應用程式負載平衡器或傳統負載平衡器。
- 在「動作」中選擇「編輯屬性」。
- 在「存取記錄」下方,選擇「啟用」。
- 輸入 S3 位置。這個位置可以存在,也可以為您建立。如未指定前置字串,存取記錄會儲存在 S3 值區的根目錄中。
- 選擇「儲存」。
Elb Tls Https Listeners Only
API 中的類別名稱:ELB_TLS_HTTPS_LISTENERS_ONLY
這項檢查可確保所有傳統版負載平衡器都已設定為使用安全通訊。
接聽程式是檢查連線要求的程序。並設定前端 (用戶端到負載平衡器) 連線的通訊協定和通訊埠,以及後端 (負載平衡器到執行個體) 連線的通訊協定和通訊埠。如要瞭解 Elastic Load Balancing 支援的通訊埠、通訊協定和接聽器設定,請參閱「傳統型負載平衡器的接聽器」。
建議:檢查是否所有傳統版負載平衡器都已設定 SSL 或 HTTPS 事件監聽器如要為傳統負載平衡器設定 SSL 或 TLS,請參閱「使用 AWS 管理控制台建立 HTTPS/SSL 負載平衡器」。
瞭解這類發現項目支援的資產和掃描設定Encrypted Volumes
API 中的類別名稱:ENCRYPTED_VOLUMES
檢查處於已連線狀態的 EBS 磁碟區是否已加密。如要通過這項檢查,EBS 磁碟區必須正在使用中,且已加密。如果 EBS 磁碟區未附加,則不受這項檢查影響。
如要為 EBS 磁碟區中的機密資料提供額外一層安全防護,請啟用 EBS 靜態加密功能。Amazon EBS 加密功能為 EBS 資源提供簡單的加密解決方案,您不必自行建構、維護及保護金鑰管理基礎架構。建立加密磁碟區和快照時,會使用 KMS 金鑰。
如要進一步瞭解 Amazon EBS 加密,請參閱《Amazon EC2 User Guide for Linux Instances》中的「Amazon EBS encryption」。
建議:應為連接的 Amazon EBS 磁碟區設定靜態資料加密機制 如要修正這項發現,請完成下列步驟:AWS 管理主控台
您無法直接加密現有的未加密磁碟區或快照。您只能在建立新磁碟區或快照時進行加密。
如果您已啟用預設加密,Amazon EBS 會使用 Amazon EBS 加密預設金鑰,加密產生的新磁碟區或快照。即使您未預設啟用加密功能,也可以在建立個別磁碟區或快照時啟用加密功能。在這兩種情況下,您都可以覆寫 Amazon EBS 加密的預設金鑰,並選擇對稱的客戶管理金鑰。
詳情請參閱《Amazon EC2 User Guide for Linux Instances》中的「建立 Amazon EBS 磁碟區」和「複製 Amazon EBS 快照」。
Encryption At Rest Enabled Rds Instances
API 中的類別名稱:ENCRYPTION_AT_REST_ENABLED_RDS_INSTANCES
Amazon RDS 加密資料庫執行個體會使用業界標準的 AES-256 加密演算法,在代管 Amazon RDS 資料庫執行個體的伺服器上加密資料。資料加密後,Amazon RDS 會以公開透明的方式處理存取驗證和資料解密作業,對效能的影響極小。
建議:確保 RDS 執行個體已啟用靜態資料加密功能 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 登入 AWS 管理主控台,然後前往 https://console.aws.amazon.com/rds/ 開啟 RDS 資訊主頁。
- 按一下左側導覽面板中的
Databases
- 選取需要加密的資料庫執行個體。
- 按一下右上方的
Actions
按鈕,然後選取Take Snapshot
。 - 在「Take Snapshot」(拍攝快照) 頁面中,於
Snapshot Name
欄位輸入要拍攝快照的資料庫名稱,然後按一下Take Snapshot
。 - 選取新建立的快照,然後點選右上方的
Action
按鈕,並從「動作」選單中選取Copy snapshot
。 - 在「Make Copy of DB Snapshot」(建立資料庫快照副本) 頁面中,執行下列操作:
- 在「New DB Snapshot Identifier」(新的資料庫快照 ID) 欄位中,輸入
new snapshot
的名稱。 - 勾選
Copy Tags
,新快照必須與來源快照具有相同標記。 - 從
Enable Encryption
下拉式清單選取Yes
即可啟用加密功能。您可以選擇使用 AWS 預設加密金鑰,或從「主金鑰」下拉式清單選取自訂金鑰。
- 按一下
Copy Snapshot
,建立所選執行個體快照的加密副本。 - 選取新的 Snapshot Encrypted Copy,然後按一下右上方的
Action
按鈕,並從「動作」選單中選取Restore Snapshot
按鈕,即可將加密快照還原至新的資料庫執行個體。 - 在「Restore DB Instance」(還原資料庫執行個體) 頁面中,於「DB Instance Identifier」(資料庫執行個體 ID) 欄位輸入新資料庫執行個體的專屬名稱。
- 查看執行個體設定詳細資料,然後按一下
Restore DB Instance
。 - 新的執行個體佈建程序完成後,即可更新應用程式設定,參照新的加密資料庫執行個體端點。在應用程式層級變更資料庫端點後,即可移除未加密的執行個體。
AWS CLI
- 執行
describe-db-instances
指令,列出所選 AWS 區域中的所有 RDS 資料庫名稱。指令輸出內容應會傳回資料庫執行個體 ID。
aws rds describe-db-instances --region <region-name> --query 'DBInstances[*].DBInstanceIdentifier'
- 執行
create-db-snapshot
指令,為所選資料庫執行個體建立快照。指令輸出內容會傳回new snapshot
,並顯示資料庫快照名稱。
aws rds create-db-snapshot --region <region-name> --db-snapshot-identifier <DB-Snapshot-Name> --db-instance-identifier <DB-Name>
- 現在請執行
list-aliases
指令,列出指定區域中可用的 KMS 金鑰別名。指令輸出內容應會傳回每個key alias currently available
。在 RDS 加密啟用程序中,找出 AWS 預設 KMS 金鑰的 ID。
aws kms list-aliases --region <region-name>
- 使用先前傳回的 RDS 執行個體預設 KMS 金鑰 ID 執行
copy-db-snapshot
指令,建立資料庫執行個體快照的加密副本。指令輸出內容會傳回encrypted instance snapshot configuration
。
aws rds copy-db-snapshot --region <region-name> --source-db-snapshot-identifier <DB-Snapshot-Name> --target-db-snapshot-identifier <DB-Snapshot-Name-Encrypted> --copy-tags --kms-key-id <KMS-ID-For-RDS>
- 執行
restore-db-instance-from-db-snapshot
指令,將上一個步驟建立的加密快照還原至新的資料庫執行個體。如果成功,指令輸出內容應會傳回新的加密資料庫執行個體設定。
aws rds restore-db-instance-from-db-snapshot --region <region-name> --db-instance-identifier <DB-Name-Encrypted> --db-snapshot-identifier <DB-Snapshot-Name-Encrypted>
- 執行
describe-db-instances
指令,列出所選 AWS 區域中所有可用的 RDS 資料庫名稱。輸出內容會傳回資料庫執行個體 ID 名稱。選取我們剛建立的加密資料庫名稱 DB-Name-Encrypted。
aws rds describe-db-instances --region <region-name> --query 'DBInstances[*].DBInstanceIdentifier'
- 再次執行
describe-db-instances
指令,並使用先前傳回的 RDS 執行個體 ID,判斷所選資料庫執行個體是否已加密。指令輸出內容應會傳回加密狀態True
。
aws rds describe-db-instances --region <region-name> --db-instance-identifier <DB-Name-Encrypted> --query 'DBInstances[*].StorageEncrypted'
Encryption Enabled Efs File Systems
API 中的類別名稱:ENCRYPTION_ENABLED_EFS_FILE_SYSTEMS
EFS 資料應使用 AWS KMS (Key Management Service) 加密靜態資料。
建議:確保 EFS 檔案系統已啟用加密機制 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 登入 AWS 管理主控台,然後前往
Elastic File System (EFS)
資訊主頁。 - 選取左側導覽面板中的
File Systems
。 - 按一下資訊主頁頂端選單的
Create File System
按鈕,開始設定檔案系統。 -
在
Configure file system access
設定頁面中,執行下列動作。
- 從 VPC 下拉式清單中選擇正確的 VPC。
- 在「建立掛接目標」部分中,選取所選虛擬私有雲內所有可用區的核取方塊。這些是你的坐騎目標。
- 按一下Next step
繼續。 -
在
Configure optional settings
頁面執行下列操作。
- 建立tags
來描述新的檔案系統。
- 根據需求選擇performance mode
。
- 勾選「Enable encryption
」核取方塊,然後從「Select KMS master key」(選取 KMS 主金鑰) 下拉式清單中選擇「aws/elasticfilesystem
」,即可使用 AWS KMS 提供及管理預設主金鑰,為新檔案系統啟用加密功能。
- 按一下Next step
繼續。 -
在
review and create
頁面中檢查檔案系統設定詳細資料,然後按一下Create File System
建立新的 AWS EFS 檔案系統。 - 將舊的未加密 EFS 檔案系統中的資料,複製到新建立的加密檔案系統。
- 資料遷移至新建立的加密檔案系統完成後,請立即移除未加密的檔案系統。
- 從導覽列變更 AWS 區域,然後針對其他 AWS 區域重複整個程序。
透過 CLI:
1. 執行 describe-file-systems 指令,說明所選 (未加密) 檔案系統可用的設定資訊 (請參閱「稽核」一節,找出正確的資源):
aws efs describe-file-systems --region <region> --file-system-id <file-system-id from audit section step 2 output>
- 指令輸出內容應會傳回要求的設定資訊。
- 如要佈建新的 AWS EFS 檔案系統,您需要產生通用唯一識別碼 (UUID),才能建立 create-file-system 指令所需的權杖。如要建立必要權杖,可以使用「https://www.uuidgenerator.net」隨機產生的 UUID。
- 使用上一步建立的專屬權杖,執行 create-file-system 指令。
aws efs create-file-system --region <region> --creation-token <Token (randomly generated UUID from step 3)> --performance-mode generalPurpose --encrypted
- 指令輸出內容應會傳回新的檔案系統設定中繼資料。
- 使用上一步傳回的新建 EFS 檔案系統 ID 做為 ID,並使用代表掛接點的可用區 (AZ) ID,執行 create-mount-target 指令:
aws efs create-mount-target --region <region> --file-system-id <file-system-id> --subnet-id <subnet-id>
- 指令輸出內容應會傳回新的掛接目標中繼資料。
- 現在可以從 EC2 執行個體掛接檔案系統。
- 將舊的未加密 EFS 檔案系統中的資料,複製到新建立的加密檔案系統。
- 資料遷移至新建立的加密檔案系統完成後,請立即移除未加密的檔案系統。
aws efs delete-file-system --region <region> --file-system-id <unencrypted-file-system-id>
- 更新 --region 即可變更 AWS 區域,並針對其他 AWS 區域重複整個程序。
Iam Password Policy
API 中的類別名稱:IAM_PASSWORD_POLICY
AWS 允許您在 AWS 帳戶中自訂密碼政策,指定 IAM 使用者密碼的複雜度規定和強制輪替週期。如果您未設定自訂密碼政策,IAM 使用者密碼就必須符合 AWS 預設密碼政策。AWS 安全防護最佳做法建議採用下列密碼複雜度規定:
- 密碼至少須有一個大寫英文字元。
- 密碼至少須有一個小寫英文字元。
- 密碼至少要包含一個符號。
- 密碼至少須包含一個數字。
- 密碼長度至少須為 14 個字元。
- 至少須達 24 個密碼,才能重複使用。
- 密碼到期前至少 90 天
這項操作會檢查是否符合所有指定的密碼政策規定。
建議:檢查 IAM 使用者的帳戶密碼政策是否符合指定規定 如要修正這項發現,請完成下列步驟:Terraform
resource "aws_iam_account_password_policy" "strict" {
allow_users_to_change_password = true
require_uppercase_characters = true
require_lowercase_characters = true
require_symbols = true
require_numbers = true
minimum_password_length = 14
password_reuse_prevention = 24
max_password_age = 90
}
AWS 管理主控台
如何建立自訂密碼政策
- 登入 AWS 管理主控台並前往 https://console.aws.amazon.com/iam/,開啟 IAM 控制台。
- 在導覽窗格中,選擇「帳戶設定」。
- 在「密碼政策」部分中,選擇「變更密碼政策」。
- 選取要套用至密碼政策的選項,然後選擇「儲存變更」。
如要變更自訂密碼政策
- 登入 AWS 管理主控台並前往 https://console.aws.amazon.com/iam/,開啟 IAM 控制台。
- 在導覽窗格中,選擇「帳戶設定」。
- 在「密碼政策」部分中,選擇「變更」。
- 選取要套用至密碼政策的選項,然後選擇「儲存變更」。
AWS CLI
aws iam update-account-password-policy \
--allow-users-to-change-password \
--require-uppercase-characters \
--require-lowercase-characters \
--require-symbols \
--require-numbers \
--minimum-password-length 14 \
--password-reuse-prevention 24 \
--max-password-age 90
Iam Password Policy Prevents Password Reuse
API 中的類別名稱:IAM_PASSWORD_POLICY_PREVENTS_PASSWORD_REUSE
IAM 密碼政策可禁止同一位使用者重複使用特定密碼。建議密碼政策禁止重複使用密碼。
建議:確保 IAM 密碼政策禁止重複使用密碼 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 登入 AWS 控制台 (具備查看身分與存取權管理帳戶設定的適當權限)
- 前往 AWS 控制台的 IAM 服務
- 按一下左側窗格中的「帳戶設定」
- 勾選「禁止重複使用密碼」
- 將「要記住的密碼數量」設為
24
AWS CLI
aws iam update-account-password-policy --password-reuse-prevention 24
注意:所有以「aws iam update-account-password-policy」開頭的指令都可以合併為單一指令。
Iam Password Policy Requires Minimum Length 14 Greater
API 中的類別名稱:IAM_PASSWORD_POLICY_REQUIRES_MINIMUM_LENGTH_14_GREATER
密碼政策的部分用途是強制執行密碼複雜度規定。IAM 密碼政策可確保密碼至少達到指定長度。建議密碼政策規定的密碼長度下限為 14 個字元。
建議:確保 IAM 密碼政策規定的長度下限為 14 個字元以上 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 登入 AWS 控制台 (具備查看身分與存取權管理帳戶設定的適當權限)
- 前往 AWS 控制台的 IAM 服務
- 按一下左側窗格中的「帳戶設定」
- 將「密碼長度下限」設為
14
以上。 - 按一下「套用密碼政策」
AWS CLI
aws iam update-account-password-policy --minimum-password-length 14
注意:所有以「aws iam update-account-password-policy」開頭的指令都可以合併為單一指令。
Iam Policies Allow Full Administrative Privileges Attached
API 中的類別名稱:IAM_POLICIES_ALLOW_FULL_ADMINISTRATIVE_PRIVILEGES_ATTACHED
身分與存取權管理政策是授予使用者、群組或角色權限的方式。建議您授予最低權限,也就是只授予執行工作所需的權限,這也是標準的安全建議。判斷使用者需要執行的工作,然後為他們制定政策,讓使用者只能執行這些工作,而非授予完整管理員權限。
建議:確保未附加允許完整「*:*」管理員權限的 IAM 政策 如要修正這項發現,請完成下列步驟:AWS 管理主控台
如要卸離具有完整管理權限的政策,請執行下列操作:
- 登入 AWS 管理主控台,並前往 https://console.aws.amazon.com/iam/ 開啟 IAM 控制台。
- 在導覽窗格中,按一下「政策」,然後搜尋稽核步驟中找到的政策名稱。
- 選取要刪除的政策。
- 在政策動作選單中,先選取
Detach
- 選取所有附加這項政策的使用者、群組和角色
- 按一下 [
Detach Policy
]。 - 在政策動作選單中,選取
Detach
AWS CLI
請執行下列操作,卸離稽核步驟中找到的完整管理權限政策:
- 列出指定受管理政策所連結的所有 IAM 使用者、群組和角色。
aws iam list-entities-for-policy --policy-arn <policy_arn>
- 從所有 IAM 使用者卸離政策:
aws iam detach-user-policy --user-name <iam_user> --policy-arn <policy_arn>
- 從所有 IAM 群組中分離政策:
aws iam detach-group-policy --group-name <iam_group> --policy-arn <policy_arn>
- 從所有 IAM 角色卸離政策:
aws iam detach-role-policy --role-name <iam_role> --policy-arn <policy_arn>
Iam Users Receive Permissions Groups
API 中的類別名稱:IAM_USERS_RECEIVE_PERMISSIONS_GROUPS
IAM 使用者可透過 IAM 政策取得服務、函式和資料的存取權。您可以透過四種方式為使用者定義政策:1) 直接編輯使用者政策 (又稱內嵌或使用者政策);2) 直接將政策附加至使用者;3) 將使用者新增至附加政策的 IAM 群組;4) 將使用者新增至附加內嵌政策的 IAM 群組。
建議您只採用第三種做法。
建議:確保 IAM 使用者僅透過群組接收權限請按照下列步驟建立 IAM 群組,並為其指派政策:
- 登入 AWS 管理主控台,並前往 https://console.aws.amazon.com/iam/ 開啟 IAM 控制台。
- 在導覽窗格中,依序點選
Groups
和Create New Group
。 - 在
Group Name
方塊中輸入群組名稱,然後按一下Next Step
。 - 在政策清單中,找出要套用至群組所有成員的政策,然後勾選對應的核取方塊。然後按一下
Next Step
。 - 按一下 [
Create Group
]。
如要將使用者加入特定群組,請按照下列步驟操作:
- 登入 AWS 管理主控台,並前往 https://console.aws.amazon.com/iam/ 開啟 IAM 控制台。
- 在導覽窗格中,按一下
Groups
- 選取要新增使用者的群組
- 按一下 [
Add Users To Group
]。 - 選取要加入群組的使用者
- 按一下 [
Add Users
]。
如要移除使用者與政策之間的直接關聯,請執行下列操作:
- 登入 AWS 管理主控台,並前往 https://console.aws.amazon.com/iam/ 開啟 IAM 控制台。
- 在左側導覽窗格中,按一下「使用者」
- 針對每位使用者:
- 選取使用者
- 按一下「Permissions
」分頁標籤
- 展開「Permissions policies
」
- 針對每項政策按一下「X
」,然後按一下「Detach」(卸離) 或「Remove」(移除) (視政策類型而定)
Iam User Group Membership Check
API 中的類別名稱:IAM_USER_GROUP_MEMBERSHIP_CHECK
為遵循 IAM 安全性最佳做法,IAM 使用者一律應加入 IAM 群組。
將使用者加入群組後,即可在不同類型的使用者之間共用政策。
建議:檢查 IAM 使用者是否至少加入一個 IAM 群組 如要修正這項發現,請完成下列步驟:Terraform
resource "aws_iam_user" "example" {
name = "test-iam-user"
path = "/users/dev/"
}
resource "aws_iam_group" "example" {
name = "Developers"
path = "/users/dev/"
}
resource "aws_iam_user_group_membership" "example" {
user = aws_iam_user.example.name
groups = [aws_iam_group.example.name]
}
AWS 管理主控台
使用 AWS 管理主控台刪除 IAM 使用者時,IAM 會自動為您刪除下列資訊:
- 使用者
- 所有使用者群組成員資格,也就是從使用者所屬的任何 IAM 使用者群組中移除使用者
- 與使用者相關聯的任何密碼
- 使用者擁有的任何存取金鑰
- 使用者內嵌的所有內嵌政策 (透過使用者群組權限套用至使用者的政策不受影響)
如要刪除 IAM 使用者,請按照下列步驟操作:
- 登入 AWS 管理主控台並前往 https://console.aws.amazon.com/iam/,開啟 IAM 控制台。
- 在導覽窗格中選擇「使用者」,然後選取要刪除的使用者名稱旁的核取方塊。
- 選擇頁面頂端的「刪除」。
- 在確認對話方塊中,於文字輸入欄位輸入使用者名稱,確認要刪除使用者。
- 選擇「刪除」。
如要將使用者新增至 IAM 使用者群組,請按照下列步驟操作:
- 登入 AWS 管理主控台並前往 https://console.aws.amazon.com/iam/,開啟 IAM 控制台。
- 在導覽窗格中,依序選擇「使用者群組」和群組名稱。
- 選擇「使用者」分頁標籤,然後選擇「新增使用者」。找出要新增的使用者,然後勾選旁邊的核取方塊。
- 選擇「新增使用者」。
AWS CLI
與 Amazon Web Services 管理主控台不同,以程式輔助方式刪除使用者時,您必須手動刪除附加至使用者的項目,否則刪除作業會失敗。
嘗試刪除使用者前,請先移除下列項目:
- 密碼 ( DeleteLoginProfile)
- 存取金鑰 ( DeleteAccessKey )
- 簽署憑證 ( DeleteSigningCertificate )
- 安全殼層公開金鑰 ( DeleteSSHPublicKey )
- Git 憑證 ( DeleteServiceSpecificCredential )
- 多重驗證 (MFA) 裝置 ( DeactivateMFADevice 、 DeleteVirtualMFADevice )
- 內嵌政策 ( DeleteUserPolicy )
- 附加的代管政策 ( DetachUserPolicy )
- 群組成員資格 ( RemoveUserFromGroup )
如要刪除使用者,請先刪除所有附加至該使用者的項目,然後按照下列步驟操作:
aws iam delete-user \
--user-name "test-user"
如要將 IAM 使用者新增至 IAM 群組,請按照下列步驟操作:
aws iam add-user-to-group \
--group-name "test-group"
--user-name "test-user"
Iam User Mfa Enabled
API 中的類別名稱:IAM_USER_MFA_ENABLED
多重驗證 (MFA) 是一種最佳做法,除了使用者名稱和密碼之外,還能提供額外的保護層。啟用多重驗證後,使用者登入 AWS 管理主控台時,必須提供註冊虛擬或實體裝置產生的時效性驗證碼。
建議:檢查 AWS IAM 使用者是否已啟用多重驗證 (MFA) 如要修正這項發現,請完成下列步驟:Terraform
在 Terraform 中,您可以透過幾種方式解決缺少 MFA 裝置的問題。您可能已建立合理的架構,將使用者歸入群組並設定限制性政策。
以下範例說明如何執行下列操作:
- 建立使用者。
- 使用 PGP 公開金鑰建立使用者登入設定檔。
- 建立群組和群組政策,允許自行管理 IAM 設定檔。
- 將使用者附加至群組。
- 為使用者建立虛擬 MFA 裝置。
- 將輸出內容中的 QR code 和密碼提供給每位使用者。
variable "users" {
type = set(string)
default = [
"test@example.com",
"test2@example.com"
]
}
resource "aws_iam_user" "test_users" {
for_each = toset(var.users)
name = each.key
}
resource "aws_iam_user_login_profile" "test_users_profile" {
for_each = var.users
user = each.key
# Key pair created using GnuPG, this is the public key
pgp_key = file("path/to/gpg_pub_key_base64.pem")
password_reset_required = true
lifecycle {
ignore_changes = [
password_length,
password_reset_required,
pgp_key,
]
}
}
resource "aws_iam_virtual_mfa_device" "test_mfa" {
for_each = toset(var.users)
virtual_mfa_device_name = each.key
}
resource "aws_iam_group" "enforce_mfa_group" {
name = "EnforceMFAGroup"
}
resource "aws_iam_group_membership" "enforce_mfa_group_membership" {
name = "EnforceMFAGroupMembership"
group = aws_iam_group.enforce_mfa_group.name
users = [for k in aws_iam_user.test_users : k.name]
}
resource "aws_iam_group_policy" "enforce_mfa_policy" {
name = "EnforceMFAGroupPolicy"
group = aws_iam_group.enforce_mfa_group.id
policy = <<POLICY
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowViewAccountInfo",
"Effect": "Allow",
"Action": [
"iam:GetAccountPasswordPolicy",
"iam:ListVirtualMFADevices"
],
"Resource": "*"
},
{
"Sid": "AllowManageOwnPasswords",
"Effect": "Allow",
"Action": [
"iam:ChangePassword",
"iam:GetUser"
],
"Resource": "arn:aws:iam::*:user/$${aws:username}"
},
{
"Sid": "AllowManageOwnAccessKeys",
"Effect": "Allow",
"Action": [
"iam:CreateAccessKey",
"iam:DeleteAccessKey",
"iam:ListAccessKeys",
"iam:UpdateAccessKey"
],
"Resource": "arn:aws:iam::*:user/$${aws:username}"
},
{
"Sid": "AllowManageOwnSigningCertificates",
"Effect": "Allow",
"Action": [
"iam:DeleteSigningCertificate",
"iam:ListSigningCertificates",
"iam:UpdateSigningCertificate",
"iam:UploadSigningCertificate"
],
"Resource": "arn:aws:iam::*:user/$${aws:username}"
},
{
"Sid": "AllowManageOwnSSHPublicKeys",
"Effect": "Allow",
"Action": [
"iam:DeleteSSHPublicKey",
"iam:GetSSHPublicKey",
"iam:ListSSHPublicKeys",
"iam:UpdateSSHPublicKey",
"iam:UploadSSHPublicKey"
],
"Resource": "arn:aws:iam::*:user/$${aws:username}"
},
{
"Sid": "AllowManageOwnGitCredentials",
"Effect": "Allow",
"Action": [
"iam:CreateServiceSpecificCredential",
"iam:DeleteServiceSpecificCredential",
"iam:ListServiceSpecificCredentials",
"iam:ResetServiceSpecificCredential",
"iam:UpdateServiceSpecificCredential"
],
"Resource": "arn:aws:iam::*:user/$${aws:username}"
},
{
"Sid": "AllowManageOwnVirtualMFADevice",
"Effect": "Allow",
"Action": [
"iam:CreateVirtualMFADevice",
"iam:DeleteVirtualMFADevice"
],
"Resource": "arn:aws:iam::*:mfa/$${aws:username}"
},
{
"Sid": "AllowManageOwnUserMFA",
"Effect": "Allow",
"Action": [
"iam:DeactivateMFADevice",
"iam:EnableMFADevice",
"iam:ListMFADevices",
"iam:ResyncMFADevice"
],
"Resource": "arn:aws:iam::*:user/$${aws:username}"
},
{
"Sid": "DenyAllExceptListedIfNoMFA",
"Effect": "Deny",
"NotAction": [
"iam:CreateVirtualMFADevice",
"iam:EnableMFADevice",
"iam:GetUser",
"iam:ListMFADevices",
"iam:ListVirtualMFADevices",
"iam:ResyncMFADevice",
"sts:GetSessionToken"
],
"Resource": "*",
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false"
}
}
}
]
}
POLICY
}
output "user_password_map" {
# Outputs a map in the format {"test@example.com": <PGPEncryptedPassword>, "test2@example.com": <PGPEncryptedPassword>}
value = { for k, v in aws_iam_user_login_profile.test_users_profile : k => v.password }
}
output "user_qr_map" {
# Outputs a map in the format {"test@example.com": <QRCode>, "test2@example.com": <QRCode>}
value = { for k, v in aws_iam_virtual_mfa_device.test_mfa : k => v.qr_code_png }
}
AWS 管理主控台
如要為任何可存取 AWS 控制台的使用者帳戶啟用 MFA,請參閱 AWS 文件中的「啟用虛擬多重驗證 (MFA) 裝置 (控制台)」。
AWS CLI
建立 MFA 裝置
aws iam create-virtual-mfa-device \
--virtual-mfa-device-name "test@example.com" \
--outfile ./QRCode.png \
--bootstrap-method QRCodePNG
為現有使用者啟用 MFA 裝置
aws iam enable-mfa-device \
--user-name "test@example.com" \
--serial-number "arn:aws:iam::123456976749:mfa/test@example.com" \
--authentication-code1 123456 \
--authentication-code2 654321
Iam User Unused Credentials Check
API 中的類別名稱:IAM_USER_UNUSED_CREDENTIALS_CHECK
這項檢查會找出過去 90 天內未使用的 IAM 密碼或有效存取金鑰。
最佳做法建議您移除、停用或輪替所有 90 天以上未使用的憑證。這樣一來,與遭盜用或已停用帳戶相關聯的憑證,就不會被有心人士利用。
建議:檢查所有 AWS IAM 使用者,確認是否擁有密碼或有效的存取金鑰,而且過去 maxCredentialUsageAge 天 (預設為 90 天) 內均未使用這類存取金鑰 如要修正這項發現,請完成下列步驟:Terraform
如要移除透過 Terraform 建立的過期存取金鑰,請從模組中移除 aws_iam_access_key
資源,然後套用變更。
如要重設 IAM 使用者登入密碼,請在執行 terraform apply
時使用 -replace
。
假設有以下使用者登入設定檔
resource "aws_iam_user" "example" {
name = "test@example.com"
path = "/users/"
force_destroy = true
}
resource "aws_iam_user_login_profile" "example" {
user = aws_iam_user.example.name
pgp_key = "keybase:some_person_that_exists"
}
執行下列指令,重設使用者的登入設定檔密碼
terraform apply -replace="aws_iam_user_login_profile.example"
AWS 管理主控台
如要停用閒置帳戶的憑證,請按照下列步驟操作:
- 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 控制台。
- 選擇「使用者」。
- 選擇憑證超過 90 天未更新/使用的使用者名稱。
- 選擇「安全憑證」。
- 針對至少 90 天未使用的登入憑證和存取金鑰,選擇「設為無效」。
如要要求主控台使用者在下次登入時輸入新密碼,請按照下列步驟操作:
- 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 控制台。
- 選擇「使用者」。
- 選擇憑證超過 90 天未更新/使用的使用者名稱。
- 選擇「安全憑證」。
- 在「登入憑證和控制台密碼」下方,選擇「管理」。
- 設定新密碼 (自動產生或自訂)。
- 勾選「必須重設密碼」方塊。
- 選擇「套用」。
AWS CLI
如何停用存取金鑰
aws iam update-access-key \
--access-key-id <value> \
--status "Inactive"
如何刪除存取金鑰
aws iam delete-access-key \
--access-key-id <value>
如何重設使用者登入設定檔密碼
aws iam update-login-profile \
--user-name "test@example.com" \
--password <temporary_password> \
--password-reset-required
Kms Cmk Not Scheduled For Deletion
API 中的類別名稱:KMS_CMK_NOT_SCHEDULED_FOR_DELETION
這項控制項會檢查 KMS 金鑰是否已排定刪除時間。如果 KMS 金鑰已排定刪除時間,這項控制項就會失敗。
KMS 金鑰刪除後即無法復原。如果刪除 KMS 金鑰,以該金鑰加密的資料也將永久無法復原。如果重要資料已使用排定刪除的 KMS 金鑰加密,請考慮解密資料或使用新的 KMS 金鑰重新加密資料,除非您有意執行加密清除作業。
排定刪除 KMS 金鑰時,系統會強制執行等待期,以便在排定刪除作業時發生錯誤時,有時間撤銷刪除作業。預設等待期為 30 天,但如果 KMS 金鑰已排定刪除時間,等待期最短可縮短至 7 天。等待期間可以取消排定刪除作業,KMS 金鑰不會遭到刪除。
如要進一步瞭解如何刪除 KMS 金鑰,請參閱《AWS Key Management Service 開發人員指南》中的「刪除 KMS 金鑰」。
建議:確認沒有安排刪除任何 CMK如要取消排定的 KMS 金鑰刪除作業,請參閱《AWS Key Management Service 開發人員指南》中的「排定及取消金鑰刪除作業 (主控台)」。
瞭解這類發現項目支援的資產和掃描設定Lambda Concurrency Check
API 中的類別名稱:LAMBDA_CONCURRENCY_CHECK
檢查 Lambda 函式是否設有函式層級的並行執行限制。如果 Lambda 函式未設定函式層級的並行執行限制,規則就會顯示為「不符合規定」。
建議:檢查 Lambda 函式是否設有函式層級的並行執行限制如要設定函式層級的並行執行限制,請參閱 AWS Lambda 說明文件中的「設定預留並行」。
瞭解這類發現項目支援的資產和掃描設定Lambda Dlq Check
API 中的類別名稱:LAMBDA_DLQ_CHECK
檢查 Lambda 函式是否已設定無效信件佇列。如果 Lambda 函式未設定無效信件佇列,規則就會顯示為 NON_COMPLIANT。
建議:檢查 Lambda 函式是否已設為使用無效信件佇列如要更新 Lambda 函式以使用 DLQ,請參閱 AWS 說明文件中的「無效信件佇列」。
瞭解這類發現項目支援的資產和掃描設定Lambda Function Public Access Prohibited
API 中的類別名稱:LAMBDA_FUNCTION_PUBLIC_ACCESS_PROHIBITED
根據 AWS 最佳做法,Lambda 函式不應公開。這項政策會檢查帳戶中所有已啟用區域部署的所有 Lambda 函式,如果函式設定允許公開存取,就會檢查失敗。
建議:檢查附加至 Lambda 函式的政策是否禁止公開存取 如要修正這項發現,請完成下列步驟:Terraform
以下範例說明如何使用 Terraform 佈建 IAM 角色,限制對 Lambda 函式的存取權,並將該角色附加至 Lambda 函式
resource "aws_iam_role" "iam_for_lambda" {
name = "iam_for_lambda"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}
resource "aws_lambda_function" "test_lambda" {
filename = "lambda_function_payload.zip"
function_name = "lambda_function_name"
role = aws_iam_role.iam_for_lambda.arn
handler = "index.test"
source_code_hash = filebase64sha256("lambda_function_payload.zip")
runtime = "nodejs12.x"
}
AWS 管理主控台
如果 Lambda 函式未通過這項控制項檢查,表示 Lambda 函式的資源型政策陳述式允許公開存取。
如要解決這個問題,請更新政策,移除權限或新增 AWS:SourceAccount
條件。您只能透過 Lambda API 更新以資源為準的政策。
下列操作說明會使用主控台檢視政策,並使用 AWS Command Line Interface 移除權限。
查看 Lambda 函式的資源型政策
- 前往 https://console.aws.amazon.com/lambda/ 開啟 AWS Lambda 控制台。
- 在導覽窗格中選擇「函式」。
- 選擇函式。
- 選擇「權限」。以資源為基礎的政策會顯示其他帳戶或 AWS 服務嘗試存取函式時套用的權限。
- 檢查以資源為準的政策。
- 找出主體欄位值會將政策設為公開的政策聲明。例如允許
"*"
或{ "AWS": "*" }
。
您無法透過控制台編輯政策。如要從函式移除權限,請使用 AWS CLI 的 remove-permission 指令。
記下要移除陳述式的陳述式 ID (Sid) 值。
AWS CLI
如要使用 CLI 從 Lambda 函式移除權限,請發出 remove-permission
指令,如下所示。
aws lambda remove-permission \
--function-name <value> \
--statement-id <value>
Lambda Inside Vpc
API 中的類別名稱:LAMBDA_INSIDE_VPC
檢查 Lambda 函式是否位於虛擬私有雲中。您可能會看到 Lambda@Edge 資源的失敗發現項目。
不會評估虛擬私有雲子網路轉送設定,判斷是否可公開連線。
建議:檢查 Lambda 函式是否在虛擬私有雲中 如要修正這項發現,請完成下列步驟:AWS 管理主控台
如要設定函式,以便連線至帳戶中虛擬私有雲 (VPC) 的私有子網路,請按照下列步驟操作:
- 前往 https://console.aws.amazon.com/lambda/ 開啟 AWS Lambda 控制台。
- 前往「Functions」,然後選取 Lambda 函式。
- 捲動至「網路」,然後選取符合函式連線需求的虛擬私有雲。
- 如要在高可用性模式下執行函式,Security Hub 建議您至少選擇兩個子網路。
- 請選擇至少一個符合函式連線需求的安全性群組。
- 選擇「儲存」。
詳情請參閱 AWS Lambda 開發人員指南中,關於設定 Lambda 函式以存取 VPC 資源的章節。
Mfa Delete Enabled S3 Buckets
API 中的類別名稱:MFA_DELETE_ENABLED_S3_BUCKETS
在機密和分類的 S3 值區啟用 MFA Delete 後,使用者必須通過兩種形式的驗證。
建議:確保 S3 值區已啟用 MFA Delete請按照下列步驟,在 S3 值區上啟用 MFA Delete。
注意:
- 您無法使用 AWS 管理主控台啟用 MFA 刪除功能。您必須使用 AWS CLI 或 API。
- 您必須使用「超級」帳戶,才能在 S3 值區中啟用 MFA Delete。
使用指令列:
- 執行 s3api put-bucket-versioning 指令
aws s3api put-bucket-versioning --profile my-root-profile --bucket Bucket_Name --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa “arn:aws:iam::aws_account_id:mfa/root-account-mfa-device passcode”
Mfa Enabled Root User Account
API 中的類別名稱:MFA_ENABLED_ROOT_USER_ACCOUNT
「根」使用者帳戶是 AWS 帳戶中權限最高的使用者。多重驗證 (MFA) 除了使用者名稱和密碼外,還會提供額外的保護層。啟用多重驗證後,使用者登入 AWS 網站時,系統會提示他們輸入使用者名稱和密碼,以及 AWS 多重驗證裝置的驗證碼。
注意:如果虛擬 MFA 用於「根」帳戶,建議不要使用個人裝置,而是專用的行動裝置 (平板電腦或手機),並確保裝置電量充足且安全無虞,不受任何個人裝置影響。(「非個人虛擬 MFA」),可降低因裝置遺失、以舊換新,或裝置擁有者已離職而無法存取 MFA 的風險。
建議:確保「超級」使用者帳戶已啟用 MFA如要為「超級使用者」帳戶啟用 MFA,請執行下列操作:
- 登入 AWS 管理主控台,並前往 https://console.aws.amazon.com/iam/ 開啟 IAM 控制台。
注意:如要管理「根」AWS 帳戶的 MFA 裝置,您必須使用「根」帳戶憑證登入 AWS。您無法使用其他憑證管理「根」帳戶的 MFA 裝置。
- 選擇
Dashboard
,然後在Security Status
下方,展開根帳戶的Activate MFA
。 - 選用「
Activate MFA
」 - 在精靈中選擇
A virtual MFA
裝置,然後選擇Next Step
。 - IAM 會產生並顯示虛擬 MFA 裝置的設定資訊,包括 QR code 圖片。圖片:代表「密碼設定金鑰」,適用於不支援 QR code 的裝置,可手動輸入。
- 開啟虛擬 MFA 應用程式。(如需可用於代管虛擬 MFA 裝置的應用程式清單,請參閱「虛擬 MFA 應用程式」。)如果虛擬 MFA 應用程式支援多個帳戶 (多個虛擬 MFA 裝置),請選擇建立新帳戶 (新虛擬 MFA 裝置) 的選項。
- 判斷 MFA 應用程式是否支援 QR code,然後執行下列其中一項操作:
- 使用應用程式掃描 QR code。例如,選取相機圖示或「掃描代碼」等類似選項,然後使用裝置的相機掃描代碼。
- 在「管理多重驗證裝置」精靈中,選擇「顯示密鑰以手動設定」,然後在多重驗證應用程式中輸入密鑰。
完成後,虛擬 MFA 裝置就會開始產生一次性密碼。
在「管理多重驗證裝置」精靈的「驗證碼 1」方塊中,輸入虛擬多重驗證裝置目前顯示的動態密碼。等待最多 30 秒,讓裝置產生新的一次性密碼。然後在「驗證碼 2」方塊中輸入第二組一次性密碼。選擇「指派虛擬 MFA」。
瞭解這類發現項目支援的資產和掃描設定Multi Factor Authentication Mfa Enabled All Iam Users Console
API 中的類別名稱:MULTI_FACTOR_AUTHENTICATION_MFA_ENABLED_ALL_IAM_USERS_CONSOLE
多重驗證 (MFA) 除了傳統憑證外,還提供額外的驗證保障。啟用多重驗證後,使用者登入 AWS 控制台時,系統會提示他們輸入使用者名稱和密碼,以及實體或虛擬多重驗證權杖的驗證碼。建議您為所有設有控制台密碼的帳戶啟用 MFA。
建議:確保擁有控制台密碼的所有 IAM 使用者均已啟用多重驗證 (MFA) 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 登入 AWS 管理主控台,並前往「https://console.aws.amazon.com/iam/」開啟 IAM 控制台。
- 選取左側窗格中的
Users
。 - 在
User Name
清單中,選擇要為其啟用多重驗證的使用者名稱。 - 選擇
Security Credentials
分頁,然後選擇Manage MFA Device
。 - 在
Manage MFA Device wizard
中選擇Virtual MFA
裝置,然後選擇Continue
。
IAM 會產生並顯示虛擬 MFA 裝置的設定資訊,包括 QR code 圖片。圖片:代表「密碼設定金鑰」,適用於不支援 QR code 的裝置,可手動輸入。
- 開啟虛擬 MFA 應用程式。(如需可用於代管虛擬 MFA 裝置的應用程式清單,請參閱 https://aws.amazon.com/iam/details/mfa/#Virtual_MFA_Applications 的「虛擬 MFA 應用程式」)。如果虛擬 MFA 應用程式支援多個帳戶 (多個虛擬 MFA 裝置),請選擇建立新帳戶 (新虛擬 MFA 裝置) 的選項。
- 判斷 MFA 應用程式是否支援 QR code,然後執行下列其中一項操作:
- 使用應用程式掃描 QR code。例如,選取相機圖示或「掃描代碼」等類似選項,然後使用裝置的相機掃描代碼。
- 在「管理多重驗證裝置」精靈中,選擇「顯示密鑰以手動設定」,然後在多重驗證應用程式中輸入密鑰。
完成後,虛擬 MFA 裝置就會開始產生一次性密碼。
-
在
Manage MFA Device wizard
的MFA Code 1 box
中,輸入虛擬 MFA 裝置目前顯示的one-time password
。等待最多 30 秒,讓裝置產生新的一次性密碼。然後在MFA Code 2 box
中輸入第二個one-time password
。 -
按一下「
Assign MFA
」。
No Network Acls Allow Ingress 0 0 0 0 Remote Server Administration
API 中的類別名稱:NO_NETWORK_ACLS_ALLOW_INGRESS_0_0_0_0_REMOTE_SERVER_ADMINISTRATION
網路存取控制清單 (NACL) 功能可對 AWS 資源的輸入和輸出網路流量進行無狀態篩選。建議不要使用 TDP (6)、UDP (17) 或 ALL (-1) 通訊協定,允許 NACL 無限制地輸入存取遠端伺服器管理通訊埠,例如 SSH 至通訊埠 22
,以及 RDP 至通訊埠 3389
AWS 管理主控台
請執行下列操作:
1. 前往 https://console.aws.amazon.com/vpc/home 登入 AWS 管理主控台
2. 在左側窗格中,按一下 Network ACLs
。
3. 針對要修正的每個網路 ACL,請執行下列操作:
- 選取網路 ACL
- 按一下「Inbound Rules
」分頁標籤
- 按一下「Edit inbound rules
」
- 視情況執行下列操作:A) 將「來源」欄位更新為 0.0.0.0/0 以外的範圍,或 B) 按一下「Delete
」移除違規的輸入規則
- 按一下「Save
」
No Root User Account Access Key Exists
API 中的類別名稱:NO_ROOT_USER_ACCOUNT_ACCESS_KEY_EXISTS
「根」使用者帳戶是 AWS 帳戶中權限最高的使用者。AWS 存取金鑰可提供特定 AWS 帳戶的程式輔助存取權。建議您刪除與「超級」使用者帳戶相關聯的所有存取金鑰。
建議:確保沒有「超級」使用者帳戶存取金鑰 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 以「根」身分登入 AWS 管理主控台,然後前往 https://console.aws.amazon.com/iam/ 開啟 IAM 控制台。
- 按一下右上方的
<root_account>
,然後從下拉式清單中選取My Security Credentials
。 - 在彈出式視窗中,按一下
Continue to Security Credentials
。 - 按一下
Access Keys
(存取金鑰 ID 和私密存取金鑰)。 - 在
Status
欄下方 (如有任何有效金鑰)。 - 按一下
Delete
(注意:刪除的金鑰無法復原)。
注意:雖然可以停用金鑰,但停用的金鑰仍會顯示在稽核程序的 CLI 指令中,可能導致金鑰遭到錯誤標示為不符規定。
No Security Groups Allow Ingress 0 0 0 0 Remote Server Administration
API 中的類別名稱:NO_SECURITY_GROUPS_ALLOW_INGRESS_0_0_0_0_REMOTE_SERVER_ADMINISTRATION
安全性群組可對 AWS 資源的輸入和輸出網路流量進行有狀態的篩選。建議不要使用 TDP (6)、UDP (17) 或 ALL (-1) 通訊協定,允許無限制的輸入存取權至遠端伺服器管理通訊埠,例如 SSH 至通訊埠 22
,以及 RDP 至通訊埠 3389
請執行下列步驟,實作規定的狀態:
- 前往 https://console.aws.amazon.com/vpc/home 登入 AWS 管理主控台
- 在左側窗格中,按一下
Security Groups
- 針對每個安全性群組執行下列操作:
- 選取安全性群組
- 按一下「
Inbound Rules
」分頁標籤 - 按一下「
Edit inbound rules
」按鈕 - 找出要編輯或移除的規則
- 方法 A:將「來源」欄位更新為 0.0.0.0/0 以外的範圍。方法 B:按一下
Delete
移除違規的連入規則。 - 按一下 [
Save rules
]。
No Security Groups Allow Ingress 0 Remote Server Administration
API 中的類別名稱:NO_SECURITY_GROUPS_ALLOW_INGRESS_0_REMOTE_SERVER_ADMINISTRATION
安全性群組可對 AWS 資源的輸入和輸出網路流量進行有狀態的篩選。建議不要讓任何安全性群組無限制地存取遠端伺服器管理通訊埠,例如透過 SSH 存取通訊埠 22
,以及透過 RDP 存取通訊埠 3389
。
請執行下列步驟,實作規定的狀態:
- 前往 https://console.aws.amazon.com/vpc/home 登入 AWS 管理主控台
- 在左側窗格中,按一下
Security Groups
- 針對每個安全性群組執行下列操作:
- 選取安全性群組
- 按一下「
Inbound Rules
」分頁標籤 - 按一下「
Edit inbound rules
」按鈕 - 找出要編輯或移除的規則
- 請執行下列任一操作:A) 將「來源」欄位更新為 ::/0 以外的範圍;或 B) 按一下
Delete
移除違規的連入規則 - 按一下 [
Save rules
]。
One Active Access Key Available Any Single Iam User
API 中的類別名稱:ONE_ACTIVE_ACCESS_KEY_AVAILABLE_ANY_SINGLE_IAM_USER
存取金鑰是 IAM 使用者或 AWS 帳戶「超級」使用者的長期憑證。您可以使用存取金鑰,簽署對 AWS CLI 或 AWS API 的程式輔助請求 (直接或使用 AWS SDK)
建議:確保任一 IAM 使用者都只能取得一組有效的存取金鑰 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 登入 AWS 管理主控台,然後前往
https://console.aws.amazon.com/iam/
的 IAM 資訊主頁。 - 選擇左側導覽面板中的
Users
。 - 按一下要檢查的 IAM 使用者名稱。
- 在 IAM 使用者設定頁面中,選取「Permissions」
Security Credentials
分頁標籤。 - 在「存取金鑰」
Access Keys
部分,選擇一個建立時間未超過 90 天的存取金鑰。這應該是 IAM 使用者透過程式存取 AWS 資源時使用的唯一有效金鑰。測試應用程式,確認所選存取金鑰可正常運作。 - 在同一個
Access Keys
專區中,找出無法運作的存取金鑰 (所選金鑰以外的金鑰),然後點選Make Inactive
連結停用金鑰。 - 如果收到
Change Key Status
確認方塊,請按一下Deactivate
關閉所選金鑰。 - 針對 AWS 帳戶中的每個 IAM 使用者,重複執行步驟 3 到 7。
AWS CLI
-
使用
Audit CLI
中提供的 IAM 使用者和存取金鑰資訊,選擇一組未滿 90 天的存取金鑰。這應該是 IAM 使用者透過程式存取 AWS 資源時使用的唯一有效金鑰。測試應用程式,確認所選存取金鑰可正常運作。 -
使用 IAM 使用者名稱和非運作中的存取金鑰 ID 執行下列
update-access-key
指令,停用不必要的金鑰。請參閱「稽核」部分,找出所選 IAM 使用者不必要的存取金鑰 ID
注意 - 指令不會傳回任何輸出內容:
aws iam update-access-key --access-key-id <access-key-id> --status Inactive --user-name <user-name>
- 如要確認所選存取金鑰組是否已成功
deactivated
,請再次為該 IAM 使用者執行list-access-keys
稽核指令:
aws iam list-access-keys --user-name <user-name>
- 指令輸出內容應會顯示與 IAM 使用者相關聯的每個存取金鑰的中繼資料。如果非運作中的金鑰組設為
Inactive
,表示金鑰已成功停用,IAM 使用者存取權設定現在會遵循這項建議。Status
- 針對 AWS 帳戶中的每個 IAM 使用者,重複執行步驟 1 到 3。
Public Access Given Rds Instance
API 中的類別名稱:PUBLIC_ACCESS_GIVEN_RDS_INSTANCE
請確保並驗證 AWS 帳戶中佈建的 RDS 資料庫執行個體會限制未經授權的存取,以盡量降低安全風險。如要限制對任何可公開存取的 RDS 資料庫執行個體的存取權,您必須停用資料庫的「Publicly Accessible」旗標,並更新與執行個體相關聯的 VPC 安全性群組。
建議:確保未將公開存取權授予 RDS 執行個體 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 登入 AWS 管理主控台,然後前往 https://console.aws.amazon.com/rds/ 開啟 RDS 資訊主頁。
- 在導覽面板下方的 RDS 資訊主頁中,按一下
Databases
。 - 選取要更新的 RDS 執行個體。
- 按一下資訊主頁頂端選單中的
Modify
。 - 在「Modify DB Instance」面板的
Connectivity
部分下方,按一下Additional connectivity configuration
,然後將Publicly Accessible
的值更新為「Not publicly accessible」,以限制公開存取權。請按照下列步驟更新子網路設定:
- 選取「Connectivity and security
」分頁,然後點選「Networking
」部分內的虛擬私有雲屬性值。
- 從 VPC 資訊主頁的底部面板選取Details
分頁標籤,然後按一下「Route table configuration」屬性值。
- 在「Route table details」(路徑資料表詳細資料) 頁面中,從資訊主頁底部面板選取「Routes」(路徑) 分頁標籤,然後按一下Edit routes
。
- 在「編輯路徑」頁面,更新設為igw-xxxxx
的「目標目的地」,然後按一下Save
路徑。 - 在「Modify DB Instance」(修改資料庫執行個體) 面板中,按一下
Continue
,然後在「Scheduling of modifications」(安排修改時間) 區段中,根據需求執行下列其中一項動作:
- 選取「Apply during the next scheduled maintenance window」(在下一個排定的維護時段套用),即可在下一個排定的維護時段自動套用變更。
- 選取「立即套用」,即可立即套用變更。選擇這個選項後,系統會盡快非同步套用所有待處理的修改,不受這個 RDS 資料庫執行個體的維護期間設定影響。請注意,系統也會套用待處理修改佇列中的所有變更。如果任何待處理的修改需要停機,選擇這個選項可能會導致應用程式意外停機。 - 針對目前區域中的每個 RDS 執行個體,重複步驟 3 至 6。
- 從導覽列變更 AWS 區域,即可為其他區域重複上述程序。
AWS CLI
- 執行
describe-db-instances
指令,列出所選 AWS 區域中所有可用的 RDS 資料庫名稱 ID:
aws rds describe-db-instances --region <region-name> --query 'DBInstances[*].DBInstanceIdentifier'
- 指令輸出應會傳回每個資料庫執行個體 ID。
- 執行
modify-db-instance
指令,修改所選 RDS 執行個體設定。然後使用下列指令,為所選 RDS 執行個體停用Publicly Accessible
旗標。這個指令會使用 apply-immediately 旗標。如要to avoid any downtime --no-apply-immediately flag can be used
:
aws rds modify-db-instance --region <region-name> --db-instance-identifier <db-name> --no-publicly-accessible --apply-immediately
- 指令輸出內容應會顯示待處理值下的
PubliclyAccessible
設定,並在指定時間套用。 - 目前不支援透過 AWS CLI 更新網際網路閘道目的地。如要更新網際網路閘道資訊,請使用 AWS Console 程序。
- 針對目前區域中佈建的每個 RDS 執行個體,重複執行步驟 1 到 5。
- 使用 --region 篩選器變更 AWS 區域,為其他區域重複執行程序。
Rds Enhanced Monitoring Enabled
API 中的類別名稱:RDS_ENHANCED_MONITORING_ENABLED
強化監控功能會在執行個體中安裝代理程式,藉此提供 RDS 執行個體所執行作業系統的即時指標。
詳情請參閱「使用強化監控功能監控 OS 指標」。
建議:檢查所有 RDS 資料庫執行個體是否已啟用強化版監控功能 如要修正這項發現,請完成下列步驟:Terraform
如要修正這項控制項,請按照下列步驟在 RDS 執行個體上啟用強化版監控功能:
為 RDS 建立 IAM 角色:
resource "aws_iam_role" "rds_logging" {
name = "CustomRoleForRDSMonitoring"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Effect = "Allow"
Sid = "CustomRoleForRDSLogging"
Principal = {
Service = "monitoring.rds.amazonaws.com"
}
},
]
})
}
擷取 RDS 強化監控的 AWS 受管理政策:
data "aws_iam_policy" "rds_logging" {
name = "AmazonRDSEnhancedMonitoringRole"
}
將政策附加至角色:
resource "aws_iam_policy_attachment" "rds_logging" {
name = "AttachRdsLogging"
roles = [aws_iam_role.rds_logging.name]
policy_arn = data.aws_iam_policy.rds_logging.arn
}
為違規的 RDS 執行個體定義監控間隔和監控角色 ARN,以啟用強化監控功能:
resource "aws_db_instance" "default" {
identifier = "test-rds"
allocated_storage = 10
engine = "mysql"
engine_version = "5.7"
instance_class = "db.t3.micro"
db_name = "mydb"
username = "foo"
password = "foobarbaz"
parameter_group_name = "default.mysql5.7"
skip_final_snapshot = true
monitoring_interval = 60
monitoring_role_arn = aws_iam_role.rds_logging.arn
}
AWS 管理主控台
建立資料庫執行個體、多可用區資料庫叢集或唯讀副本時,或是修改資料庫執行個體或多可用區資料庫叢集時,都可以開啟強化監控功能。如果您修改資料庫執行個體以啟用強化監控功能,不必重新啟動資料庫執行個體,變更就會生效。
在資料庫頁面中執行下列任一動作時,您可以在 RDS 控制台中啟用強化監控功能:
- 建立資料庫執行個體或多可用區資料庫叢集 - 選擇「建立資料庫」。
- 建立唯讀備用資源:選擇「動作」,然後選取「建立唯讀備用資源」。
- 修改資料庫執行個體或 Multi-AZ 資料庫叢集 - 選擇「修改」。
在 RDS 控制台中開啟或關閉強化監控功能
- 捲動至「其他設定」。
- 在「監控」中,為資料庫執行個體或唯讀副本選擇「啟用強化監控」。如要關閉強化監控功能,請選擇「停用強化監控」。
- 將「監控角色」屬性設為您建立的 IAM 角色,允許 Amazon RDS 代表您與 Amazon CloudWatch Logs 通訊,或選擇「預設」,讓 RDS 為您建立名為 rds-monitoring-role 的角色。
- 將 Granularity 屬性設為間隔 (以秒為單位),也就是收集資料庫執行個體或唯讀副本指標時,各個資料點之間的時間間隔。「Granularity」屬性可設為下列其中一個值:1、5、10、15、30 或 60。RDS 控制台最快每 5 秒就會重新整理一次。即使在 RDS 主控台中將精細度設為 1 秒,您仍只會每 5 秒看到更新的指標。您可以使用 CloudWatch Logs 擷取每秒更新的指標。
AWS CLI
建立 RDS IAM 角色:
aws iam create-role \
--role-name "CustomRoleForRDSMonitoring" \
--assume-role-policy-document file://rds-assume-role.json
將政策 AmazonRDSEnhancedMonitoringRole
附加至角色:
aws iam attach-role-policy \
--role-name "CustomRoleForRDSMonitoring"\
--policy-arn "arn:aws:iam::aws:policy/service-role/AmazonRDSEnhancedMonitoringRole"
修改 RDS 執行個體,將 --monitoring-interval
和 --monitoring-role-arn
設為啟用,即可啟用強化版監控功能:
aws rds modify-db-instance \
--db-instance-identifier "test-rds" \
--monitoring-interval 30 \
--monitoring-role-arn "arn:aws:iam::<account_id>:role/CustomRoleForRDSMonitoring"
Rds Instance Deletion Protection Enabled
API 中的類別名稱:RDS_INSTANCE_DELETION_PROTECTION_ENABLED
啟用執行個體防刪除功能後,可進一步防範資料庫遭意外刪除,或遭未經授權的實體刪除。
啟用防刪除功能後,就無法刪除 RDS 資料庫執行個體。您必須先停用防刪除功能,才能成功提出刪除要求。
建議:檢查所有 RDS 執行個體是否已啟用防刪除功能 如要修正這項發現,請完成下列步驟:Terraform
如要修正這項控制項,請在 aws_db_instance
資源中將 deletion_protection
設為 true
。
resource "aws_db_instance" "example" {
# ... other configuration ...
deletion_protection = true
}
AWS 管理主控台
如要為 RDS 資料庫執行個體啟用防刪除功能
- 前往 https://console.aws.amazon.com/rds/ 開啟 Amazon RDS 控制台。
- 在導覽窗格中選擇「資料庫」,然後選擇要修改的資料庫執行個體。
- 選擇「修改」。
- 在「防刪除功能」下方,選擇「啟用防刪除功能」。
- 選擇「繼續」。
- 在「安排修改時間」下方,選擇套用修改的時間。選項包括「在下一個排定的維護期間套用」或「立即套用」。
- 選擇「Modify DB Instance」。
AWS CLI
AWS CLI 也是如此。將 --deletion-protection
設為下列值。
aws rds modify-db-instance \
--db-instance-identifier = "test-rds" \
--deletion-protection
Rds In Backup Plan
API 中的類別名稱:RDS_IN_BACKUP_PLAN
這項檢查會評估 Amazon RDS 資料庫執行個體是否在備份方案的涵蓋範圍內。如果 RDS 資料庫執行個體不在備份方案的涵蓋範圍內,這項控制項就會失敗。
AWS Backup 是一項全代管備份服務,可集中管理及自動備份 AWS 服務中的資料。您可以使用 AWS Backup 建立備份政策,也就是備份方案。這些方案可定義備份需求,例如備份資料的頻率,以及備份的保留時間。將 RDS 資料庫執行個體納入備份方案,有助於保護資料,避免意外遺失或刪除。
建議:RDS 資料庫執行個體應在備份方案的涵蓋範圍內 如要修正這項發現,請完成下列步驟:Terraform
如要修正這項控制項,請在 aws_db_instance
資源中,將 backup_retention_period
設為大於 7
的值。
resource "aws_db_instance" "example" {
# ... other Configuration ...
backup_retention_period = 7
}
AWS 管理主控台
立即啟用自動備份功能
- 前往 https://console.aws.amazon.com/rds/ 開啟 Amazon RDS 控制台。
- 在導覽窗格中選擇「資料庫」,然後選擇要修改的資料庫執行個體。
- 選擇「Modify」開啟「Modify DB Instance」頁面。
- 在「備份保留期限」下方,選擇大於零的值,例如 30 天,然後選擇「繼續」。
- 選取「安排修改時間」部分,然後選擇套用修改的時間:您可以選擇「在下一個排定的維護期間套用」或「立即套用」。
- 接著在確認頁面上選擇「Modify DB Instance」,儲存變更並啟用自動備份功能。
AWS CLI
AWS CLI 也是如此。如要啟用自動備份功能,請將 backup-retention-period
變更為大於 0
(預設值) 的值。
aws rds modify-db-instance --db-instance-identifier "test-rds" --backup-retention-period 7
Rds Logging Enabled
API 中的類別名稱:RDS_LOGGING_ENABLED
這項檢查會確認 Amazon RDS 的下列記錄是否已啟用並傳送至 CloudWatch。
RDS 資料庫應啟用相關記錄。資料庫記錄會詳細登錄對 RDS 發送的要求。資料庫記錄可協助進行安全性與存取稽核,並診斷可用性問題。
建議:檢查所有 RDS 資料庫執行個體是否已啟用匯出的記錄檔 如要修正這項發現,請完成下列步驟:Terraform
resource "aws_db_instance" "example" {
# ... other configuration for MySQL ...
enabled_cloudwatch_logs_exports = ["audit", "error", "general", "slowquery"]
parameter_group_name = aws_db_parameter_group.example.name
}
resource "aws_db_parameter_group" "example" {
name = "${aws_db_instance.example.dbInstanceIdentifier}-parameter-group"
family = "mysql5.7"
parameter {
name = "general_log"
value = 1
}
parameter {
name = "slow_query_log"
value = 1
}
parameter {
name = "log_output"
value = "FILE"
}
}
如果是 MariaDB,請另外建立自訂選項群組,並在 aws_db_instance
資源中設定 option_group_name
。
resource "aws_db_instance" "example" {
# ... other configuration for MariaDB ...
enabled_cloudwatch_logs_exports = ["audit", "error", "general", "slowquery"]
parameter_group_name = aws_db_parameter_group.example.name
option_group_name = aws_db_option_group.example.name
}
resource "aws_db_option_group" "example" {
name = "mariadb-option-group-for-logs"
option_group_description = "MariaDB Option Group for Logs"
engine_name = "mariadb"
option {
option_name = "MARIADB_AUDIT_PLUGIN"
option_settings {
name = "SERVER_AUDIT_EVENTS"
value = "CONNECT,QUERY,TABLE,QUERY_DDL,QUERY_DML,QUERY_DCL"
}
}
}
AWS 管理主控台
如要建立自訂資料庫參數群組
- 前往 https://console.aws.amazon.com/rds/ 開啟 Amazon RDS 控制台。
- 在導覽窗格中,選擇「參數群組」。
- 選擇「建立參數群組」。
- 在「參數群組系列」清單中,選擇資料庫參數群組系列。
- 在「類型」清單中,選擇「資料庫參數群組」。
- 在「群組名稱」中,輸入新資料庫參數群組的名稱。
- 在「說明」中,輸入新資料庫參數群組的說明。
- 選擇「建立」。
使用控制台為 MariaDB 記錄建立新的選項群組
- 前往 https://console.aws.amazon.com/rds/ 開啟 Amazon RDS 控制台。
- 在導覽窗格中,選擇「選項群組」。
- 選擇「建立群組」。
- 在「建立選項群組」視窗中,提供下列資訊:
* 名稱:在 AWS 帳戶中不得重複。只能使用英文字母、數字和連字號。
* 說明:僅用於顯示。
* 引擎:選取資料庫引擎。
* 主要引擎版本:選取資料庫引擎的主要版本。 - 選擇「建立」。
- 選擇剛建立的選項群組名稱。
- 選擇「新增」選項。
- 從「選項名稱」清單中選擇 MARIADB_AUDIT_PLUGIN。
- 將 SERVER_AUDIT_EVENTS 設為 CONNECT、QUERY、TABLE、QUERY_DDL、QUERY_DML、QUERY_DCL。
- 選擇「新增」選項。
從 AWS 管理主控台將 SQL Server 資料庫、Oracle 資料庫或 PostgreSQL 記錄發布至 CloudWatch Logs
- 前往 https://console.aws.amazon.com/rds/ 開啟 Amazon RDS 控制台。
- 在導覽窗格中選擇「資料庫」。
- 選擇要修改的資料庫執行個體。
- 選擇「修改」。
- 在「記錄匯出」下方,選擇要發布至 CloudWatch Logs 的所有記錄檔。
- 只有支援發布至 CloudWatch Logs 的資料庫引擎版本,才能匯出記錄。
- 選擇「繼續」。然後在摘要頁面上選擇「Modify DB Instance」。
如要將新的資料庫參數群組或資料庫選項群組套用至 RDS 資料庫執行個體
- 前往 https://console.aws.amazon.com/rds/ 開啟 Amazon RDS 控制台。
- 在導覽窗格中選擇「資料庫」。
- 選擇要修改的資料庫執行個體。
- 選擇「修改」。
- 在「資料庫選項」下方,視需要變更資料庫參數群組和資料庫選項群組。
- 完成變更後,請選擇「繼續」。查看修改摘要。
- 選擇「Modify DB Instance」即可儲存變更。
AWS CLI
擷取引擎系列,然後選擇與資料庫執行個體引擎和版本相符的系列。
aws rds describe-db-engine-versions \
--query "DBEngineVersions[].DBParameterGroupFamily" \
--engine "mysql"
根據引擎和版本建立參數群組。
aws rds create-db-parameter-group \
--db-parameter-group-name "rds-mysql-parameter-group" \
--db-parameter-group-family "mysql5.7" \
--description "Example parameter group for logs"
根據資料庫引擎建立包含必要參數的 rds-parameters.json
檔案,本範例使用 MySQL 5.7。
[
{
"ParameterName": "general_log",
"ParameterValue": "1",
"ApplyMethod": "immediate"
},
{
"ParameterName": "slow_query_log",
"ParameterValue": "1",
"ApplyMethod": "immediate"
},
{
"ParameterName": "log_output",
"ParameterValue": "FILE",
"ApplyMethod": "immediate"
}
]
根據資料庫引擎修改參數群組,加入參數。本範例使用 MySQL 5.7
aws rds modify-db-parameter-group \
--db-parameter-group-name "rds-mysql-parameter-group" \
--parameters file://rds-parameters.json
修改資料庫執行個體,將參數群組與其建立關聯。
aws rds modify-db-instance \
--db-instance-identifier "test-rds" \
--db-parameter-group-name "rds-mysql-parameter-group"
此外,如果是 MariaDB,請按照下列步驟建立選項群組。
aws rds create-option-group \
--option-group-name "rds-mariadb-option-group" \
--engine-name "mariadb" \
--major-engine-version "10.6" \
--option-group-description "Option group for MariaDB logs"
請按照下列方式建立 rds-mariadb-options.json
檔案。
{
"OptionName": "MARIADB_AUDIT_PLUGIN",
"OptionSettings": [
{
"Name": "SERVER_AUDIT_EVENTS",
"Value": "CONNECT,QUERY,TABLE,QUERY_DDL,QUERY_DML,QUERY_DCL"
}
]
}
將選項新增至選項群組。
aws rds add-option-to-option-group \
--option-group-name "rds-mariadb-option-group" \
--options file://rds-mariadb-options.json
修改 MariaDB 執行個體,將選項群組與資料庫執行個體建立關聯。
aws rds modify-db-instance \
--db-instance-identifier "rds-test-mariadb" \
--option-group-name "rds-mariadb-option-group"
Rds Multi Az Support
API 中的類別名稱:RDS_MULTI_AZ_SUPPORT
RDS 資料庫執行個體應設定多個可用區 (AZ)。確保儲存的資料可用。如果可用區發生問題,或是在 RDS 例行維護期間,多可用區部署作業可自動執行容錯移轉。
建議:檢查所有 RDS 資料庫執行個體是否已啟用高可用性設定 如要修正這項發現,請完成下列步驟:Terraform
如要修正這項控制項,請在 aws_db_instance
資源中將 multi_az
設為 true。
resource "aws_db_instance" "example" {
# ... other configuration ...
multi_az = true
}
AWS 管理主控台
如要為資料庫執行個體啟用多個可用區
- 前往 https://console.aws.amazon.com/rds/ 開啟 Amazon RDS 控制台。
- 在導覽窗格中選擇「資料庫」,然後選擇要修改的資料庫執行個體。
- 選擇「修改」。「Modify DB Instance」(修改資料庫執行個體) 頁面隨即顯示。
- 在「執行個體規格」下方,將「多可用區部署」設為「是」。
- 選擇「繼續」,然後查看修改摘要。
- (選用) 選擇「立即套用」可立即套用變更。選擇這個選項有時可能會導致服務中斷。詳情請參閱《Amazon RDS 使用者指南》中的「使用立即套用設定」。
- 在確認頁面上查看變更。如果正確無誤,請選擇「Modify DB Instance」儲存變更。
AWS CLI
AWS CLI 也是如此。提供 --multi-az
選項,啟用多個可用區支援。
modify-db-instance
--db-instance-identifier "test-rds" \
--multi-az
Redshift Cluster Configuration Check
API 中的類別名稱:REDSHIFT_CLUSTER_CONFIGURATION_CHECK
這項檢查會確認 Redshift 叢集的重要元素:靜態資料加密、記錄功能和節點類型。
這些設定項目對於維護安全且可觀察的 Redshift 叢集至關重要。
建議:確認所有 Redshift 叢集是否已有靜態資料加密機制、記錄功能和節點類型。 如要修正這項發現,請完成下列步驟:Terraform
resource "aws_kms_key" "redshift_encryption" {
description = "Used for Redshift encryption configuration"
enable_key_rotation = true
}
resource "aws_redshift_cluster" "example" {
# ... other configuration ...
encrypted = true
kms_key_id = aws_kms_key.redshift_encryption.id
logging {
enable = true
log_destination_type = "cloudwatch"
log_exports = ["connectionlog", "userlog", "useractivitylog"]
}
}
AWS 管理主控台
如何啟用叢集稽核記錄
- 前往 https://console.aws.amazon.com/redshift/ 開啟 Amazon Redshift 控制台。
- 在導覽選單中選擇「叢集」,然後選擇要修改的叢集名稱。
- 選擇「資源」。
- 選擇「編輯」和「編輯稽核記錄」。
- 將「Configure audit logging」(設定稽核記錄) 設為「Turn on」(開啟),將「Log export type」(記錄匯出類型) 設為「CloudWatch」(建議),然後選擇要匯出的記錄。
如要使用 AWS S3 管理 Redshift 稽核記錄,請參閱 AWS 說明文件中的「Redshift - Database audit logging」。
- 選擇「儲存變更」。
如要修改叢集的資料庫加密設定
- 登入 AWS 管理主控台,然後前往 https://console.aws.amazon.com/redshift/ 開啟 Amazon Redshift 控制台。
- 在導覽選單中選擇「叢集」,然後選擇要修改加密的叢集。
- 選擇「資源」。
- 選擇「編輯」和「編輯加密」。
- 選擇要使用的加密方式 (KMS 或 HSM),並提供下列資訊:
- KMS:要使用的金鑰
- 適用於 HSM:連線和用戶端憑證
AWS CLI
- 建立 KMS 金鑰並擷取金鑰 ID
aws kms create-key \
--description "Key to encrypt Redshift Clusters"
- 修改叢集
aws redshift modify-cluster \
--cluster-identifiers "test-redshift-cluster" \
--encrypted \
--kms-key-id <value>
Redshift Cluster Maintenancesettings Check
API 中的類別名稱:REDSHIFT_CLUSTER_MAINTENANCESETTINGS_CHECK
系統會根據維護期間自動升級主要版本
建議:確認所有 Redshift 叢集已啟用 allowVersionUpgrade,並設定了 preferredMaintenanceWindow 和 automatedSnapshotRetentionPeriod 如要修正這項發現,請完成下列步驟:Terraform
這項檢查符合 Terraform 提供的所有預設值。如果 Redshift 叢集發生故障,請檢查需求並移除 aws_redshift_cluster
資源下列屬性的預設覆寫。
resource "aws_redshift_cluster" "example" {
# ...other configuration ...
# The following values are compliant and set by default if omitted.
allow_version_upgrade = true
preferred_maintenance_window = "sat:10:00-sat:10:30"
automated_snapshot_retention_period = 1
}
AWS 管理主控台
透過 AWS 控制台建立 Redshift 叢集時,預設值已符合這項控制項。
詳情請參閱「使用控制台管理叢集」。
AWS CLI
如要使用 AWS CLI 補救這項控制項,請按照下列步驟操作:
aws redshift modify-cluster \
--cluster-identifier "test-redshift-cluster" \
--allow-version-upgrade
Redshift Cluster Public Access Check
API 中的類別名稱:REDSHIFT_CLUSTER_PUBLIC_ACCESS_CHECK
Amazon Redshift 叢集設定的 PubliclyAccessible 屬性會指出叢集是否可公開存取。如果叢集設定為 PubliclyAccessible = true,就是面向網際網路的執行個體,具有可公開解析的 DNS 名稱,會解析為公開 IP 位址。
如果叢集無法公開存取,則為內部執行個體,DNS 名稱會解析為私人 IP 位址。除非您打算公開存取叢集,否則不應將叢集設定為 PubliclyAccessible = true。
建議:檢查 Redshift 叢集是否開放公開存取 如要修正這項發現,請完成下列步驟:Terraform
如要修正這項控制項,請修改 Redshift 叢集資源,並將 publicly_accessible
設為 false
,預設值為 true
。
resource "aws_redshift_cluster" "example" {
# ... other configuration ...
publicly_accessible = false
}
AWS 管理主控台
如要停用 Amazon Redshift 叢集的公開存取權
- 前往 https://console.aws.amazon.com/redshift/ 開啟 Amazon Redshift 控制台。
- 在導覽選單中選擇「叢集」,然後選擇要修改安全群組的叢集名稱。
- 選擇「動作」,然後選擇「修改公開存取設定」。
- 在「Allow instances and devices outside the VPC to connect to your database through the cluster endpoint」(允許虛擬私有雲外部的執行個體和裝置透過叢集端點連線至資料庫) 下方,選擇「No」(否)。
- 選擇「確認」。
AWS CLI
使用 modify-cluster
指令設定 --no-publicly-accessible
。
aws redshift modify-cluster \
--cluster-identifier "test-redshift-cluster" \
--no-publicly-accessible
Restricted Common Ports
API 中的類別名稱:RESTRICTED_COMMON_PORTS
這項檢查會確認安全性群組是否允許未受限制的連入流量,存取風險最高的指定通訊埠。如果安全性群組中的任何規則允許來自「0.0.0.0/0」或「::/0」的傳入流量,這項控制項就會失敗。
無限制存取 (0.0.0.0/0) 會增加惡意活動的機會,例如駭客入侵、阻斷服務攻擊和資料遺失。
安全性群組可對 AWS 資源的輸入和輸出網路流量進行有狀態的篩選。任何安全性群組都不應允許無限制地輸入下列通訊埠:
- 20、21 (FTP)
- 22 (SSH)
- 23 (Telnet)
- 25 (SMTP)
- 110 (POP3)
- 135 (RPC)
- 143 (IMAP)
- 445 (CIFS)
- 1433、1434 (MSSQL)
- 3000 (Go、Node.js 和 Ruby 網頁開發架構)
- 3306 (MySQL)
- 3389 (RDP)
- 4333 (ahsp)
- 5000 (Python 網頁開發架構)
- 5432 (postgresql)
- 5500 (fcp-addr-srvr1)
- 5601 (OpenSearch Dashboards)
- 8080 (Proxy)
- 8088 (舊版 HTTP 通訊埠)
- 8888 (替代 HTTP 通訊埠)
- 9200 或 9300 (OpenSearch)
AWS 管理主控台
如要刪除安全群組規則,請按照下列步驟操作:
- 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 控制台。
- 在導覽窗格中,選擇「安全性群組」。
- 選取要更新的安全群組,選擇「動作」,然後選擇「編輯連入規則」移除連入規則,或選擇「編輯連出規則」移除連出規則。
- 選擇要刪除規則右側的「刪除」按鈕。
- 選擇「預覽變更」和「確認」。
如要瞭解如何從安全群組刪除規則,請參閱 Amazon EC2 使用者指南中的「設定安全群組規則」。
Restricted Ssh
API 中的類別名稱:RESTRICTED_SSH
安全性群組可對 AWS 資源的輸入和輸出網路流量進行有狀態的篩選。
CIS 建議不要讓任何安全性群組未設任何限制,即允許輸入存取通訊埠 22。移除與遠端控制台服務 (例如 SSH) 的無限制連線,可降低伺服器面臨的風險。
建議:安全性群組不應允許流量從 0.0.0.0/0 輸入至通訊埠 22 如要修正這項發現,請完成下列步驟:AWS 管理主控台
針對與 VPC 相關聯的每個安全群組,執行下列步驟。
前往 https://console.aws.amazon.com/vpc/ 開啟 Amazon VPC 控制台。
- 在左側窗格中選擇「安全群組」。
- 選取安全性群組。
- 在頁面底部,選擇「Inbound Rules」分頁標籤。
- 選擇「編輯規則」。
- 找出允許透過 22 號連接埠存取的規則,然後選擇「X」X移除該規則。
- 選擇「儲存規則」。
Rotation Customer Created Cmks Enabled
API 中的類別名稱:ROTATION_CUSTOMER_CREATED_CMKS_ENABLED
檢查是否已為每個金鑰啟用自動金鑰輪替功能,並與客戶建立的 AWS KMS 金鑰的金鑰 ID 相符。如果資源的 AWS Config 記錄器角色沒有 kms:DescribeKey 權限,該規則會顯示為「NON_COMPLIANT」。
建議:確認已為客戶建立的 CMK 啟用輪替功能如要為 AWS KMS 啟用自動金鑰輪替,請參閱 AWS 說明文件中的「輪替 AWS KMS 金鑰」。
瞭解這類發現項目支援的資產和掃描設定Rotation Customer Created Symmetric Cmks Enabled
API 中的類別名稱:ROTATION_CUSTOMER_CREATED_SYMMETRIC_CMKS_ENABLED
AWS Key Management Service (KMS) 可讓客戶輪替支援金鑰,也就是儲存在 KMS 內且與客戶建立的客戶主金鑰 (CMK) 金鑰 ID 相關聯的金鑰內容。這是用來執行加密和解密等加密作業的支援金鑰。自動金鑰輪替目前會保留所有先前的備份金鑰,以便透明解密加密資料。建議您為對稱金鑰啟用 CMK 金鑰輪替功能。您無法為任何非對稱 CMK 啟用金鑰輪替功能。
建議:確保已為客戶建立的對稱式 CMK 啟用輪替功能 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 登入 AWS 管理主控台,然後前往 https://console.aws.amazon.com/iam 開啟 IAM 控制台。
- 在左側導覽窗格中,選擇
Customer managed keys
。 - 選取客戶管理的 CMK,其中
Key spec = SYMMETRIC_DEFAULT
- 在「一般設定」面板下方,開啟「金鑰輪替」分頁
- 勾選「每年自動輪替這個 KMS 金鑰」核取方塊
AWS CLI
- 執行下列指令來啟用金鑰輪替:
aws kms enable-key-rotation --key-id <kms_key_id>
Routing Tables Vpc Peering Are Least Access
API 中的類別名稱:ROUTING_TABLES_VPC_PEERING_ARE_LEAST_ACCESS
檢查虛擬私有雲對等互連的路由表是否已設定最少權限主體。
建議:確認虛擬私有雲對等互連的轉送表格已設為「least access」如要更新虛擬私有雲對等互連的路徑表,請參閱 AWS VPC 使用者指南中的「Update your route tables for a VPC peering connection」(更新虛擬私有雲對等互連連線的路徑表)。
瞭解這類發現項目支援的資產和掃描設定S3 Account Level Public Access Blocks
API 中的類別名稱:S3_ACCOUNT_LEVEL_PUBLIC_ACCESS_BLOCKS
Amazon S3 封鎖公開存取功能提供存取點、儲存貯體和帳戶的設定,協助您管理 Amazon S3 資源的公開存取權。根據預設,新的值區、存取點和物件不允許公開存取。
建議:檢查是否已在帳戶層級設置所需的 S3 公開存取權封鎖設定 如要修正這項發現,請完成下列步驟:Terraform
下列 Terraform 資源會設定 S3 的帳戶層級存取權。
resource "aws_s3_account_public_access_block" "s3_control" {
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
AWS 管理主控台
編輯 AWS 帳戶中所有 S3 儲存貯體的封鎖公開存取設定。
- 登入 AWS 管理主控台,然後前往 https://console.aws.amazon.com/s3/ 開啟 Amazon S3 控制台。
- 選擇這個帳戶的「封鎖公開存取」設定。
- 選擇「編輯」,即可變更 AWS 帳戶中所有儲存貯體的封鎖公開存取設定。
- 選擇要變更的設定,然後選擇「儲存變更」。
- 系統要求您確認時,請輸入 confirm。然後選擇「確認」儲存變更。
AWS CLI
aws s3control put-public-access-block \
--account-id <value> \
--public-access-block-configuration '{"BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true}'
S3 Buckets Configured Block Public Access Bucket And Account Settings
API 中的類別名稱:S3_BUCKETS_CONFIGURED_BLOCK_PUBLIC_ACCESS_BUCKET_AND_ACCOUNT_SETTINGS
Amazon S3 提供 Block public access (bucket settings)
和 Block public access (account settings)
,協助您管理 Amazon S3 資源的公開存取權。根據預設,系統建立 S3 儲存桶和物件時,會停用公開存取權。不過,如果 AWS IAM 主體具備足夠的 S3 權限,就能在儲存貯體或物件層級啟用公開存取權。啟用後,Block public access (bucket settings)
會禁止個別 bucket 及其所含物件公開存取。同樣地,Block public access (account settings)
可防止整個帳戶中的所有值區和所含物件遭到公開存取。
確認 S3 儲存貯體已設定 Block public access (bucket settings)
。
AWS 管理主控台
如果輸出內容顯示個別設定為 true,表示帳戶已啟用這項設定。
- 登入 AWS 管理主控台,然後使用 https://console.aws.amazon.com/s3/ 開啟 Amazon S3 控制台
- 選擇「封鎖公開存取權 (帳戶設定)」
- 選擇「編輯」,變更 AWS 帳戶中所有儲存空間的封鎖公開存取設定
- 選擇要變更的設定,然後選擇「儲存」。如要瞭解各項設定的詳細資訊,請將滑鼠游標懸停在 i 圖示上。
- 系統要求您確認時,請輸入 confirm。然後按一下「確認」儲存變更。
AWS CLI
如要為這個帳戶設定「封鎖公開存取」設定,請執行下列指令:
aws s3control put-public-access-block
--public-access-block-configuration BlockPublicAcls=true, IgnorePublicAcls=true, BlockPublicPolicy=true, RestrictPublicBuckets=true
--account-id <value>
S3 Bucket Access Logging Enabled Cloudtrail S3 Bucket
API 中的類別名稱:S3_BUCKET_ACCESS_LOGGING_ENABLED_CLOUDTRAIL_S3_BUCKET
S3 Bucket Access Logging 會產生記錄,其中包含對 S3 bucket 發出的每項要求存取記錄。存取記錄包含要求的詳細資料,例如要求類型、要求中指定的資源,以及處理要求的時間和日期。建議您在 CloudTrail S3 儲存空間啟用儲存空間存取記錄功能。
建議:確保 CloudTrail S3 儲存貯體已啟用 S3 儲存貯體存取記錄功能
如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 登入 AWS 管理主控台,然後前往 https://console.aws.amazon.com/s3 開啟 S3 控制台。
- 在「所有值區」下方,按一下目標 S3 值區
- 按一下控制台右上方的「屬性」
- 在「Bucket:」<s3\_bucket\_for\_cloudtrail> 下方,按一下「Logging」</s3\_bucket\_for\_cloudtrail>
- 設定值區記錄
- 按一下「已啟用」核取方塊
- 從清單中選取目標值區
- 輸入目標前置字元 - 按一下 [儲存]。
AWS CLI
- 取得 CloudTrail 記錄的 S3 bucket 名稱:
aws cloudtrail describe-trails --region <region-name> --query trailList[*].S3BucketName
- 複製並在
新增目標 bucket 名稱、在 新增記錄檔前置字串,然後視需要將電子郵件地址新增至下列範本,並儲存為 :
{
"LoggingEnabled": {
"TargetBucket": "<Logging_BucketName>",
"TargetPrefix": "<LogFilePrefix>",
"TargetGrants": [
{
"Grantee": {
"Type": "AmazonCustomerByEmail",
"EmailAddress": "<EmailID>"
},
"Permission": "FULL_CONTROL"
}
]
}
}
- 使用 bucket 名稱和
做為輸入內容,執行 put-bucket-logging 指令。詳情請參閱 put-bucket-logging:
aws s3api put-bucket-logging --bucket <BucketName> --bucket-logging-status file://<FileName.Json>
S3 Bucket Logging Enabled
API 中的類別名稱:S3_BUCKET_LOGGING_ENABLED
AWS S3 伺服器存取記錄功能會記錄對儲存空間值區的存取要求,有助於進行安全稽核。根據預設,系統不會為 S3 儲存貯體啟用伺服器存取記錄功能。
建議:確認所有 S3 值區均已啟用記錄功能 如要修正這項發現,請完成下列步驟:Terraform
以下範例說明如何建立 2 個值區:
- 記錄檔 bucket
- 符合法規的 bucket
variable "bucket_acl_map" {
type = map(any)
default = {
"logging-bucket" = "log-delivery-write"
"compliant-bucket" = "private"
}
}
resource "aws_s3_bucket" "all" {
for_each = var.bucket_acl_map
bucket = each.key
object_lock_enabled = true
tags = {
"Pwd" = "s3"
}
}
resource "aws_s3_bucket_acl" "private" {
for_each = var.bucket_acl_map
bucket = each.key
acl = each.value
}
resource "aws_s3_bucket_versioning" "enabled" {
for_each = var.bucket_acl_map
bucket = each.key
versioning_configuration {
status = "Enabled"
}
}
resource "aws_s3_bucket_logging" "enabled" {
for_each = var.bucket_acl_map
bucket = each.key
target_bucket = aws_s3_bucket.all["logging-bucket"].id
target_prefix = "log/"
}
resource "aws_s3_bucket_server_side_encryption_configuration" "example" {
for_each = var.bucket_acl_map
bucket = each.key
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "aws:kms"
}
}
}
AWS 管理主控台
如要瞭解如何透過 AWS 控制台啟用 S3 存取記錄,請參閱 AWS 說明文件中的「啟用 Amazon S3 伺服器存取記錄」。
AWS CLI
以下範例說明如何:
- 建立值區政策,將記錄服務主體的權限授予記錄值區中的
PutObject
。
policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3ServerAccessLogsPolicy",
"Effect": "Allow",
"Principal": {"Service": "logging.s3.amazonaws.com"},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::MyBucket/Logs/*",
"Condition": {
"ArnLike": {"aws:SourceARN": "arn:aws:s3:::SOURCE-BUCKET-NAME"},
"StringEquals": {"aws:SourceAccount": "SOURCE-AWS-ACCOUNT-ID"}
}
}
]
}
aws s3api put-bucket-policy \
--bucket my-bucket
--policy file://policy.json
- 將政策套用至記錄值區
logging.json
{
"LoggingEnabled": {
"TargetBucket": "MyBucket",
"TargetPrefix": "Logs/"
}
}
aws s3api put-bucket-logging \
--bucket MyBucket \
--bucket-logging-status file://logging.json
S3 Bucket Policy Set Deny Http Requests
API 中的類別名稱:S3_BUCKET_POLICY_SET_DENY_HTTP_REQUESTS
在 Amazon S3 值區層級,您可以透過值區政策設定權限,確保物件只能透過 HTTPS 存取。
建議:確認 S3 值區政策已設為拒絕 HTTP 要求 如要修正這項發現,請完成下列步驟:AWS 管理主控台
使用 AWS 政策產生器:
- 重複上述步驟 1 到 4。
- 按一下 Bucket Policy Editor 底部的
Policy Generator
- 選取政策類型
S3 Bucket Policy
- 新增陳述式
-Effect
= Deny
-Principal
= *
-AWS Service
= Amazon S3
-Actions
= *
-Amazon Resource Name
= - 生成政策
- 複製文字並新增至 Bucket 政策。
AWS CLI
- 將 bucket 政策匯出至 JSON 檔案。
aws s3api get-bucket-policy --bucket <bucket_name> --query Policy --output text > policy.json
- 在 policy.json 檔案中加入下列陳述式:
{
"Sid": <optional>",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::<bucket_name>/*",
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
- 將修改後的政策套用回 S3 儲存貯體:
aws s3api put-bucket-policy --bucket <bucket_name> --policy file://policy.json
S3 Bucket Replication Enabled
API 中的類別名稱:S3_BUCKET_REPLICATION_ENABLED
這項控制項會檢查 Amazon S3 值區是否已啟用跨區域複製功能。如果值區未啟用跨區域複製功能,或同時啟用同區域複製功能,控制項就會失敗。
複製作業是指在相同或不同 AWS 區域中,自動以非同步方式複製值區中的物件。複寫功能會將來源值區中新建立的物件和物件更新,複製到一或多個目的地值區。AWS 最佳做法建議,來源和目的地儲存貯體應由同一個 AWS 帳戶擁有,並進行複製。除了可用性之外,您也應考慮其他系統強化設定。
建議:確認 S3 值區已啟用跨區域複製功能如要在 S3 值區上啟用跨區域複寫功能,請參閱 Amazon Simple Storage Service 使用者指南中的「為同一個帳戶擁有的來源和目的地值區設定複寫功能」。在「來源值區」中,選擇「套用至值區中的所有物件」。
瞭解這類發現項目支援的資產和掃描設定S3 Bucket Server Side Encryption Enabled
API 中的類別名稱:S3_BUCKET_SERVER_SIDE_ENCRYPTION_ENABLED
這項檢查會確認 S3 值區已啟用 Amazon S3 預設加密,或 S3 值區政策明確拒絕不含伺服器端加密的 put-object 要求。
建議:確認所有 S3 值區都採用靜態資料加密機制 如要修正這項發現,請完成下列步驟:Terraform
resource "aws_s3_bucket_server_side_encryption_configuration" "enable" {
bucket = "my-bucket"
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
AWS 管理主控台
如要在 S3 bucket 上啟用預設加密功能
- 前往 https://console.aws.amazon.com/s3/ 開啟 Amazon S3 主控台。
- 在左側導覽窗格中,選擇「Buckets」。
- 從清單中選擇 S3 值區。
- 選擇「資源」。
- 選擇「預設加密」。
- 選擇 AES-256 或 AWS-KMS 加密。
- 選擇 AES-256,即可使用 Amazon S3 管理的金鑰進行預設加密。如要進一步瞭解如何使用 Amazon S3 伺服器端加密功能加密資料,請參閱 Amazon Simple Storage Service 使用者指南。
- 選擇 AWS-KMS,使用 AWS KMS 管理的金鑰進行預設加密。然後從您建立的 AWS KMS 主金鑰清單中選擇主金鑰。
- 輸入要使用的 AWS KMS 金鑰的 Amazon Resource Name (ARN)。您可以在 IAM 控制台的「Encryption keys」(加密金鑰) 下方找到 AWS KMS 金鑰的 ARN。或者,你也可以從下拉式清單中選擇金鑰名稱。
- 重要事項:如果您使用 AWS KMS 選項做為預設加密設定,則須遵守 AWS KMS 的 RPS (每秒要求數) 配額。如要進一步瞭解 AWS KMS 配額,以及如何要求增加配額,請參閱 AWS Key Management Service 開發人員指南。
- 選擇「儲存」。
如要進一步瞭解如何建立 AWS KMS 金鑰,請參閱 AWS Key Management Service 開發人員指南。
如要進一步瞭解如何搭配使用 AWS KMS 和 Amazon S3,請參閱 Amazon Simple Storage Service 使用者指南。
啟用預設加密時,您可能需要更新 bucket 政策。如要進一步瞭解如何從 bucket 政策改用預設加密,請參閱 Amazon Simple Storage Service 使用者指南。
AWS CLI
aws s3api put-bucket-encryption \
--bucket my-bucket \
--server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "AES256"}}]}'
S3 Bucket Versioning Enabled
API 中的類別名稱:S3_BUCKET_VERSIONING_ENABLED
Amazon S3 可在同一個值區中保留物件的多個變體,協助您從非預期的使用者動作和應用程式故障中更輕鬆地復原。
建議:確認所有 S3 值區已啟用版本管理功能 如要修正這項發現,請完成下列步驟:Terraform
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-bucket"
versioning {
enabled = true
}
}
AWS 管理主控台
如要啟用或停用 S3 值區的版本管理功能
- 登入 AWS 管理主控台,然後前往 https://console.aws.amazon.com/s3/ 開啟 Amazon S3 控制台。
- 在「值區」清單中,選擇要啟用版本控管功能的值區名稱。
- 選擇「資源」。
- 在「Bucket Versioning」下方,選擇「Edit」。
- 選擇「暫停」或「啟用」,然後選擇「儲存變更」。
AWS CLI
aws s3control put-bucket-versioning \
--bucket <bucket_name> \
--versioning-configuration Status=Enabled
S3 Default Encryption Kms
API 中的類別名稱:S3_DEFAULT_ENCRYPTION_KMS
檢查 Amazon S3 值區是否已透過 AWS Key Management Service (AWS KMS) 加密
建議:確認所有值區均以 KMS 加密 如要修正這項發現,請完成下列步驟:Terraform
resource "aws_kms_key" "s3_encryption" {
description = "Used for S3 Bucket encryption configuration"
enable_key_rotation = true
}
resource "aws_s3_bucket_server_side_encryption_configuration" "enable" {
bucket = "my-bucket"
rule {
apply_server_side_encryption_by_default {
kms_master_key_id = aws_kms_key.s3_encryption.arn
sse_algorithm = "aws:kms"
}
}
}
AWS 管理主控台
如要在 S3 bucket 上啟用預設加密功能
- 前往 https://console.aws.amazon.com/s3/ 開啟 Amazon S3 主控台。
- 在左側導覽窗格中,選擇「Buckets」。
- 從清單中選擇 S3 值區。
- 選擇「資源」。
- 選擇「預設加密」。
- 選擇 AWS-KMS 加密。
- 選擇 AWS-KMS,使用 AWS KMS 管理的金鑰進行預設加密。然後從您建立的 AWS KMS 主金鑰清單中選擇主金鑰。如要進一步瞭解如何建立 KMS 金鑰,請參閱 AWS 說明文件 - 建立金鑰
- 輸入要使用的 AWS KMS 金鑰的 Amazon Resource Name (ARN)。您可以在 IAM 控制台的「Encryption keys」(加密金鑰) 下方找到 AWS KMS 金鑰的 ARN。或者,你也可以從下拉式清單中選擇金鑰名稱。
- 重要事項:這項解決方案須遵守 AWS KMS 的 RPS (每秒要求數) 配額。如要進一步瞭解 AWS KMS 配額,以及如何要求增加配額,請參閱 AWS Key Management Service 開發人員指南。
- 選擇「儲存」。
如要進一步瞭解如何搭配使用 AWS KMS 和 Amazon S3,請參閱 Amazon Simple Storage Service 使用者指南。
啟用預設加密時,您可能需要更新 bucket 政策。如要進一步瞭解如何從 bucket 政策改用預設加密,請參閱 Amazon Simple Storage Service 使用者指南。
AWS CLI
建立 KMS 金鑰
aws kms create-key \
--description "Key to encrypt S3 buckets"
啟用金鑰輪替
aws kms enable-key-rotation \
--key-id <key_id_from_previous_command>
更新值區
aws s3api put-bucket-encryption \
--bucket my-bucket \
--server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"KMSMasterKeyID": "<id_from_key>", "SSEAlgorithm": "AES256"}}]}'
Sagemaker Notebook Instance Kms Key Configured
API 中的類別名稱:SAGEMAKER_NOTEBOOK_INSTANCE_KMS_KEY_CONFIGURED
檢查 Amazon SageMaker 筆記本執行個體是否已設定 AWS Key Management Service (AWS KMS) 金鑰。如果未指定 SageMaker 筆記本執行個體的「KmsKeyId」,規則會顯示「NON_COMPLIANT」。
建議:確認所有 SageMaker 筆記本執行個體均設為使用 KMS如要為 SageMaker 設定 KMS,請參閱 Amazon SageMaker 說明文件中的「金鑰管理」一節。
瞭解這類發現項目支援的資產和掃描設定Sagemaker Notebook No Direct Internet Access
API 中的類別名稱:SAGEMAKER_NOTEBOOK_NO_DIRECT_INTERNET_ACCESS
檢查 SageMaker 筆記本執行個體是否已停用直接網際網路存取權。為此,這項規則會檢查筆記本執行個體的 DirectInternetAccess 欄位是否已停用。
如果您設定 SageMaker 執行個體時未指定虛擬私有雲,系統預設會啟用執行個體的直接網際網路存取權。您應使用虛擬私有雲設定執行個體,並將預設設定變更為「停用 - 透過虛擬私有雲存取網際網路」。
如要從筆記本訓練或代管模型,您必須連上網際網路。如要啟用網際網路存取權,請確認 VPC 具有 NAT 閘道,且安全性群組允許輸出連線。如要進一步瞭解如何將筆記本執行個體連線至虛擬私有雲中的資源,請參閱《Amazon SageMaker 開發人員指南》中的「將筆記本執行個體連線至虛擬私有雲中的資源」。
此外,請務必確保只有授權使用者可以存取 SageMaker 設定。限制使用者修改 SageMaker 設定和資源的身分與存取權管理權限。
建議:檢查所有 Amazon SageMaker 筆記本執行個體,確認是否已停用直接網際網路存取權 如要修正這項發現,請完成下列步驟:AWS 管理主控台
請注意,筆記本執行個體建立後,您就無法變更網際網路存取權設定。必須停止、刪除並重新建立。
如要設定 SageMaker 筆記本執行個體,拒絕直接網際網路存取,請按照下列步驟操作:
- 前往 https://console.aws.amazon.com/sagemaker/ 開啟 SageMaker 控制台
- 前往 Notebook 執行個體。
- 刪除已啟用直接網際網路存取權的執行個體。選擇執行個體,然後依序選擇「動作」和「停止」。
- 執行個體停止運作後,請依序選擇「Actions」(動作) 和「delete」(刪除)。
- 選擇「建立筆記本執行個體」。提供設定詳細資料。
- 展開網路部分,然後選擇虛擬私有雲、子網路和安全群組。在「直接網際網路存取」下方,選擇「停用 - 透過虛擬私有雲存取網際網路」。
- 選擇「建立筆記本執行個體」。
詳情請參閱《Amazon SageMaker 開發人員指南》中的「將筆記本執行個體連線至虛擬私有雲中的資源」。
Secretsmanager Rotation Enabled Check
API 中的類別名稱:SECRETSMANAGER_ROTATION_ENABLED_CHECK
檢查儲存在 AWS Secrets Manager 中的密鑰是否已設定自動輪替。如果密鑰未設定自動輪替,這項控制項就會失敗。如果您為 maximumAllowedRotationFrequency
參數提供自訂值,只有在密鑰於指定時間範圍內自動輪替時,控制項才會通過。
Secrets Manager 可協助您提升機構的安全防護機制。密鑰包括資料庫憑證、密碼和第三方 API 金鑰。您可以使用 Secrets Manager 集中儲存密鑰、自動加密密鑰、控管密鑰存取權,以及安全地自動輪替密鑰。
Secret Manager 可以輪替密鑰。您可以透過輪替,以短期密鑰取代長期密鑰。輪替密鑰可限制未經授權的使用者使用遭盜用密鑰的時間。因此,您應經常輪替密鑰。如要進一步瞭解輪替作業,請參閱 AWS Secrets Manager 使用手冊中的「Rotating your AWS Secrets Manager secrets」。
建議:確認所有 AWS Secrets Manager 密鑰已啟用輪替功能如要為 Secrets Manager 密鑰啟用自動輪替功能,請參閱《AWS Secrets Manager 使用者指南》中的「使用主控台設定 AWS Secrets Manager 密鑰的自動輪替功能」。您必須選擇並設定輪替用的 AWS Lambda 函式。
瞭解這類發現項目支援的資產和掃描設定Sns Encrypted Kms
API 中的類別名稱:SNS_ENCRYPTED_KMS
檢查 SNS 主題是否使用 AWS KMS 加密靜態資料。如果 SNS 主題未使用 KMS 金鑰進行伺服器端加密 (SSE),控制項就會失敗。
加密靜態資料可降低未通過 AWS 驗證的使用者存取磁碟上儲存資料的風險。此外,還會新增另一組存取權控管措施,限制未經授權的使用者存取資料。舉例來說,您必須具備 API 權限,才能解密資料並讀取內容。SNS 主題應設定靜態資料加密機制,以提升安全性。
建議:檢查是否所有 SNS 主題均以 KMS 加密如要為 SNS 主題啟用 SSE,請參閱《Amazon Simple Notification Service 開發人員指南》中的「為 Amazon SNS 主題啟用伺服器端加密 (SSE)」。如要使用 SSE,您也必須設定 AWS KMS 金鑰政策,允許主題加密,以及訊息加密和解密。詳情請參閱 Amazon Simple Notification Service 開發人員指南中的「Configuring AWS KMS permissions」(設定 AWS KMS 權限)。
瞭解這類發現項目支援的資產和掃描設定Vpc Default Security Group Closed
API 中的類別名稱:VPC_DEFAULT_SECURITY_GROUP_CLOSED
這項控制項會檢查虛擬私有雲的預設安全性群組是否允許傳入或傳出流量。如果安全性群組允許輸入或輸出流量,這項控制項就會失敗。
預設安全性群組的規則允許來自網路介面 (以及相關聯的執行個體) 的所有輸出和輸入流量,這些網路介面會指派給同一個安全性群組。建議您不要使用預設安全群組。由於預設安全性群組無法刪除,您應變更預設安全性群組規則設定,限制輸入和輸出流量。如果預設安全性群組意外設定給 EC2 執行個體等資源,這項措施可防止發生非預期的流量。
建議:確保各個虛擬私有雲的預設安全性群組會限制所有流量如要修正這個問題,請先建立新的最低權限安全性群組。如需操作說明,請參閱 Amazon VPC 使用者指南中的「建立安全群組」。然後將新的安全群組指派給 EC2 執行個體。如需操作說明,請參閱《Amazon EC2 User Guide for Linux Instances》中的「Change an instance's security group」。
將新的安全群組指派給資源後,請從預設安全群組中移除所有輸入和輸出規則。如需操作說明,請參閱 Amazon VPC 使用者指南中的「刪除安全群組規則」。
瞭解這類發現項目支援的資產和掃描設定Vpc Flow Logging Enabled All Vpcs
API 中的類別名稱:VPC_FLOW_LOGGING_ENABLED_ALL_VPCS
虛擬私有雲流量記錄功能可擷取虛擬私有雲網路介面往來 IP 流量的相關資訊。建立流量記錄後,您可以在 Amazon CloudWatch Logs 中查看及擷取流量記錄資料。建議您為虛擬私有雲啟用封包「拒絕」的虛擬私有雲流量記錄。
建議:確認所有虛擬私有雲已啟用虛擬私有雲流量記錄功能 如要修正這項發現,請完成下列步驟:AWS 管理主控台
- 登入管理控制台
- 選取
Services
,然後選取VPC
- 在左側導覽窗格中,選取
Your VPCs
- 選取虛擬私有雲
- 選取右側窗格中的
Flow Logs
分頁標籤。 - 如果沒有任何流量記錄,請按一下
Create Flow Log
- 選取「篩選器」
Reject
- 輸入
Role
和Destination Log Group
- 按一下 [
Create Log Flow
]。 - 按一下
CloudWatch Logs Group
注意:將篩選器設為「拒絕」會大幅減少這項建議的記錄資料累積量,並提供足夠的資訊,以利進行違規偵測、研究和補救措施。不過,在最低權限安全群組工程期間,將這個篩選器設為「全部」有助於找出已在執行環境中正常運作的現有流量。
AWS CLI
- 建立名為
role_policy_document.json
的政策文件,並貼上下列內容:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "test",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
- 建立另一個政策文件並命名為
iam_policy.json
,然後貼上下列內容:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action":[
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams",
"logs:PutLogEvents",
"logs:GetLogEvents",
"logs:FilterLogEvents"
],
"Resource": "*"
}
]
}
- 執行下列指令來建立 IAM 角色:
aws iam create-role --role-name <aws_support_iam_role> --assume-role-policy-document file://<file-path>role_policy_document.json
- 執行下列指令來建立 IAM 政策:
aws iam create-policy --policy-name <ami-policy-name> --policy-document file://<file-path>iam-policy.json
- 使用上一步傳回的 IAM 政策 ARN 執行
attach-group-policy
指令,將政策附加至 IAM 角色 (如果指令成功執行,系統不會傳回任何輸出內容):
aws iam attach-group-policy --policy-arn arn:aws:iam::<aws-account-id>:policy/<iam-policy-name> --group-name <group-name>
- 執行
describe-vpcs
,取得所選區域可用的 VpcId:
aws ec2 describe-vpcs --region <region>
- 指令輸出內容應會傳回所選區域中可用的 VPC ID。
- 執行
create-flow-logs
,為虛擬私有雲建立流量記錄:
aws ec2 create-flow-logs --resource-type VPC --resource-ids <vpc-id> --traffic-type REJECT --log-group-name <log-group-name> --deliver-logs-permission-arn <iam-role-arn>
- 針對所選區域中的其他 VPC,重複執行步驟 8。
- 更新 --region 即可變更區域,並針對其他 VPC 重複執行補救程序。
Vpc Sg Open Only To Authorized Ports
API 中的類別名稱:VPC_SG_OPEN_ONLY_TO_AUTHORIZED_PORTS
這項控制項會檢查 Amazon EC2 安全性群組是否允許來自未經授權通訊埠的不受限制輸入流量。控制項狀態的判斷方式如下:
如果您使用 authorizedTcpPorts 的預設值,且安全性群組允許來自通訊埠 80 和 443 以外的任何通訊埠,則控制項會失敗。
如果您為 authorizedTcpPorts 或 authorizedUdpPorts 提供自訂值,且安全性群組允許來自任何未列出通訊埠的無限制輸入流量,控制項就會失敗。
如果未使用任何參數,凡是具有不受限制的輸入流量規則的安全性群組,控制項都會失敗。
安全性群組可對進出 AWS 的網路流量進行有狀態的篩選。安全群組規則應遵循最低權限存取原則。無限制存取 (IP 位址加上 /0 後置字元) 會增加惡意活動的機會,例如駭客入侵、阻斷服務攻擊和資料遺失。除非明確允許,否則通訊埠應拒絕無限制存取。
建議:檢查所有虛擬私有雲中有 0.0.0.0/0 的安全性群組,確認是否僅允許特定的傳入 TCP/UDP 流量如要修改安全群組,請參閱 Amazon VPC 使用者指南中的「使用安全群組」。
瞭解這類發現項目支援的資產和掃描設定Both VPC VPN Tunnels Up
API 中的類別名稱:VPC_VPN_2_TUNNELS_UP
VPN 通道是加密連結,可讓資料在 AWS 站對站 VPN 連線中,從客戶網路傳輸至 AWS 或從 AWS 傳輸至客戶網路。每條 VPN 連線都包含兩條 VPN 通道,可同時用於高可用性。確保 VPN 連線的兩個 VPN 通道都處於運作中狀態,對於確認 AWS VPC 與遠端網路之間的安全高可用性連線至關重要。
這項控制項會檢查 AWS Site-to-Site VPN 提供的兩個 VPN 通道是否都處於 UP 狀態。如果其中一條或兩條通道處於 DOWN 狀態,控制項就會失敗。
建議:確認 AWS 站對站提供的兩個 AWS VPN 通道都處於運作中狀態如要修改 VPN 通道選項,請參閱《AWS Site-to-Site VPN 使用者指南》中的「修改站對站 VPN 通道選項」。
瞭解這類發現項目支援的資產和掃描設定