啟用 Cassandra 驗證

根據預設,Cassandra 會在不啟用驗證功能的情況下安裝。這表示任何人都可以存取 Cassandra。您可以在安裝 Edge 後啟用驗證功能,或在安裝過程中啟用驗證功能。

您可以使用 Cassandra CREATE/ALTER/DROP ROLES 陳述式新增、移除及修改角色。如要瞭解詳情,請參考下列資源:

一般注意事項

  • 當您啟用 Cassandra 驗證時,Cassandra 會自動建立預設超級使用者 cassandra (包含密碼 cassandra)。這是廣為人知的超級使用者,因此請勿將該名使用者用於實際工作環境需求。此外,透過這個超級使用者進行驗證需要仲裁一致性。因此,透過此使用者驗證的所有 Cassandra 連線都會需要更嚴格的一致性,導致容錯速度慢,容錯效能也較低。
  • 一般工作流程需要在 Cassandra 中啟用驗證機制,同時透過設定檔傳遞自訂使用者名稱和密碼。這會建立可依據需求安全的自訂使用者和密碼,而且透過這類使用者進行驗證時,沒有仲裁一致性限制。
  • 請注意,即使已建立自訂使用者,Cassandra 仍會建立預設的 cassandra 超級使用者,而且您可以透過超級使用者存取 Cassandra 叢集。在 Apigee 中的 Cassandra 驗證成功後,通常應使用 ALTER ROLE 指令,將這個 cassandra 使用者的密碼變更為其他預設 cassandra 使用者的密碼。保留這組密碼記錄供日後參考。
  • 請勿變更 edge-* 元件用於驗證的角色密碼,因為這會立即造成服務中斷。而是應建立全新的使用者,修改 edge-* 元件使用新使用者,並在完成後使用 DROP ROLE 指令捨棄舊使用者。
  • 如要變更 edge-* 元件用於 Cassandra 驗證的角色,請按照下列步驟操作:
    1. 按照「啟用驗證功能」部分的步驟建立新的使用者。請注意,如果叢集已啟用驗證功能,而您變更了 cassandra 使用者的密碼,就必須透過 CASS_EXISTING_USERNAMECASS_EXISTING_PASSWORD 傳遞現有使用者的使用者名稱/密碼組合。
    2. 完成後,請透過 cqlsh 驗證您是否可以透過新舊使用者連線至 Cassandra。
    3. 按照更新連接至 Cassandra 的 Edge 元件中的操作說明,將所有 edge-* 元件使用新建立的使用者連線至 Cassandra。
    4. 最後,當所有元件都使用新使用者與 Cassandra 通訊時,您可以使用 DROP ROLE 指令捨棄舊使用者。請注意,請勿捨棄預設的 cassandra 角色。您可以捨棄 edge-* 元件未使用的任何自訂角色,以便與 Cassandra 通訊。
  • 請記得在安裝或升級 Edge 元件的設定檔中,更新有作用的 Cassandra 使用者名稱和密碼。這會消除或減少邊緣作業期間的任何中斷情形。

在安裝期間啟用 Cassandra 驗證

您可以在安裝時啟用 Cassandra 驗證。

如要在安裝時啟用 Cassandra 驗證,請在所有 Cassandra 節點的設定檔中加入 CASS_AUTH 屬性:

CASS_AUTH=y # The default value is n.

下列 Edge 元件可存取 Cassandra:

  • 管理伺服器
  • 訊息處理器
  • 路由器
  • Qpid 伺服器
  • Postgres 伺服器

安裝這些元件時,您必須在設定檔中設定使用者名稱和密碼:

CASS_USERNAME=cassandra_username
CASS_PASSWORD=cassandra_password

安裝 Cassandra 後,即可變更 Cassandra 憑證。不過,若您已安裝管理伺服器、訊息處理器、路由器、Qpid 伺服器或 Postgres 伺服器,也必須更新這些元件,才能使用新憑證。

如要在安裝 Cassandra 後變更 Cassandra 憑證:

  1. 使用 cqlsh 工具和預設憑證登入任何 Cassandra 節點。您只需變更一個節點上的密碼,系統會將該節點廣播到該節點中的所有 Cassandra 節點:
    /opt/apigee/apigee-cassandra/bin/cqlsh cassIP 9042 -u cassandra_username -p cassandra_password

    在此情況下:

    1. cassIP 是 Cassandra 節點的 IP 位址。
    2. 9042 是預設的 Cassandra 通訊埠。
  2. 在 cqlsh> 提示中執行下列指令,以更新密碼
    ALTER ROLE <username> WITH PASSWORD='';
  3. 結束 cqlsh 工具,如以下範例所示:
    exit
  4. 如果您尚未安裝管理伺服器、訊息處理器、路由器、Qpid 伺服器或 Postgres 伺服器,請在設定檔中設定下列屬性,然後安裝這些元件:
    CASS_USERNAME=cassandra_username
    CASS_PASSWORD=new_cassandra_password
  5. 如果您已安裝管理伺服器、訊息處理器、路由器、Qpid 伺服器或 Postgres 伺服器,請參閱重設邊緣密碼,瞭解如何更新這些元件,改用新密碼。

安裝後啟用 Cassandra 驗證

如何在安裝後啟用驗證功能:

  • 使用 Cassandra 使用者名稱和密碼 更新所有連結至 Cassandra 的 Edge 元件
  • 在所有 Cassandra 節點上 啟用驗證功能,並在任一節點上設定 Cassandra 使用者名稱和密碼。您只需要變更一個 Cassandra 節點上的憑證,系統會將這些憑證廣播至環形中的所有 Cassandra 節點。

更新連線至 Cassandra 的 Edge 元件

請使用以下程序更新所有與 Cassandra 以新憑證通訊的 Edge 元件。請注意,在實際更新 Cassandra 憑證之前,請先執行這個步驟:

  1. 在 Management Server 節點中,執行下列指令:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server
      store_cassandra_credentials -u cassandra_username -p cassandra_password

    或者,您可以將檔案傳送至包含新使用者名稱和密碼的指令:

    apigee-service edge-management-server store_cassandra_credentials  -f configFile

    其中 configFile 包含下列內容:

    CASS_USERNAME=cassandra_username # Default is cassandra
    CASS_PASSWORD='cassandra_password' # Default is cassandra; wrap in single quotes if it includes special chars

    這個指令會自動重新啟動管理伺服器。

  2. 針對下列各項服務,重複執行步驟 1:
    • 所有訊息處理器
    • 所有路由器
    • 所有 Qpid 伺服器 (edge-qpid-server)
    • Postgres 伺服器 (edge-postgres-server)

    當您針對每項服務重複步驟 1 時,請將上述指令中的 edge-management-server 替換為適當的服務名稱。舉例來說,當您執行路由器服務的步驟時,請使用下列指令:

    /opt/apigee/apigee-service/bin/apigee-service edge-router
      store_cassandra_credentials -u cassandra -p cassandra

啟用驗證機制

請按照下列步驟啟用 Cassandra 驗證,並設定使用者名稱和密碼:

  1. 建立無訊息設定檔,內容如下所示:
    # Specify IP address or DNS name of cassandra node
    IP1=192.168.1.1
    IP2=192.168.1.2
    IP3=192.168.1.3
    # Must resolve to IP address or DNS name of host
    HOSTIP=$(hostname -i)
    # Set to ‘y’ to enable Cassandra authentication.
    CASS_AUTH=y # Possible values are ‘y/n’
    # Cassandra username. If it does not exist, this user would be created as a SUPERUSER
    CASS_USERNAME=cassandra_username # Default value is cassandra - don't use for production
    # Cassandra Password. If CASS_USERNAME does not exist, create SUPERUSER with this as password
    CASS_PASSWORD=cassandra_password # Default value is cassandra - don't use for production
    # Space-separated IP/DNS names of the Cassandra hosts
    CASS_HOSTS="$IP1:1,1 $IP2:1,1 $IP3:1,1"
    
    # Username of an existing C* user. Only needed if you have disabled or changed details of the default cassandra user(‘cassandra’)
    CASS_EXISTING_USERNAME=existing_cassandra_username
    # Password of an existing C* user. Only needed if you have disabled or change password of the default cassandra user(‘cassandra’)
    CASS_EXISTING_PASSWORD=existing_cassandra_password
    # Cassandra port
    CASS_PORT=9042 # The default port is 9042.
  2. 登入第一個 Cassandra 節點,然後執行下列指令:

    apigee-service apigee-cassandra enable_cassandra_authentication -f CONFIG

    或者,您也可以將屬性做為指令引數傳送至指令碼,如以下範例所示:

    CASS_AUTH=y HOSTIP=$(hostname -i) CASS_PORT=9042 CASS_EXISTING_USERNAME=existing_cassandra_username CASS_EXISTING_PASSWORD=existing_cassandra_password CASS_USERNAME=cassandra_username CASS_PASSWORD=cassandra_password  CASS_HOSTS="192.168.1.1:1,1 192.168.1.2:1,1 192.168.1.3:1,1" apigee-service apigee-cassandra enable_cassandra_authentication

    注意事項:

    • 如果是預設的 Cassandra 憑證,上述指令會啟用 Cassandra 驗證並重新啟動 Cassandra。
    • 如果是非預設憑證,這個指令也會修改複製係數、建立超級使用者,並在 system_auth keyspace 執行修復作業。
  3. 在所有 Cassandra 節點上重複執行步驟 1 和 2。