全部產品
Search
文件中心

OpenSearch:訪問鑒權規則

更新時間:Jul 13, 2024

您通過雲帳號建立的OpenSearch應用,都是該帳號自己擁有的資源。預設情況下,帳號對自己的資源擁有完整的操作許可權。使用阿里雲的RAM(Resource Access Management)服務,可以將您雲帳號下OpenSearch資源的訪問及系統管理權限授予RAM中子使用者。

說明

注意: 

  • 新版控制台對RAM許可權進行了細化,與舊版控制台有一定的區別;若在新版控制台上使用子帳號功能,需要重新編寫RAM授權策略。 

  • RAM 子帳號功能只支援V3 及以上API(SDK)版本,V2 版API(SDK)不支援 RAM子帳號功能。 

  • 第三方資料來源產品要嚴格遵守 RAM 許可權體系,需要在第三方產品賦予子帳號對應許可權。其中RAM子帳號不支援授權odps服務許可權。原因是:當主帳號授權project給子帳號後,子帳號因雲有雲限制無許可權列出主帳號全部專案。因此子帳號無法引用project作為資料來源接入OpenSearch。建議先使用主帳號連ODPS,然後再通過子帳號操作OpenSearch應用。 

  • 使用RAM子帳號在控制台中配置 RDS 資料來源,必須要再對該RAM子帳號進行資料來源相關許可權授權,否則會報錯提示串連RDS服務失敗,請稍後再試,參考下面的RDS訪問授權。 

  • 以Search開頭的 ACTION 暫不支援 IP條件鑒權,在配置後會有問題,需注意(主要是SearchApp和SearchSuggest)。

生效時間

對子使用者佈建或更新許可權配置後,延遲5分鐘後生效。

最小常見組合許可權

使用RAM子帳號登入訪問OpenSearch控制台,最小常見組合許可權包括搜尋一個應用的最小許可權集合、應用列表許可權、應用詳情許可權、監控與警示許可權、RDS訪問授權等,僅供參考。

搜尋一個應用的最小許可權集合

通過SDK對應用發起搜尋請求,實現文檔召回功能的測試,所以需要搜尋一個應用的許可權,以下樣本是應用程式名稱為app_schema_demo實現文檔召回功能的搜尋測試。

{
    "Statement": [
    {
            "Effect": "Allow",
            "Action": "opensearch:SearchApp",
            "Resource": "acs:opensearch:*:*:apps/app_schema_demo"
        }
    ],
    "Version": "1"
}

應用列表許可權

子帳號登入後,需要查看控制台應用列表許可權。

{
    "Statement": [
        {
            "Action": [
                "opensearch:ListAppGroup",
                "opensearch:DescribeAppStatistics",
                "opensearch:ListAppGroupErrors"
            ],
            "Effect": "Allow",
            "Resource": "acs:opensearch:*:*:app-groups/*"
        }
    ],
    "Version": "1"
}

應用詳情許可權

監控與警示功能是整合在應用詳情介面中,因此需要查看應用詳情許可權,以下樣本是查看應用程式名稱為app_schema_demo的應用詳情。

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "opensearch:DescribeAppGroup",
                "opensearch:ListApp",
                "opensearch:DescribeApp"
            ],
            "Resource": "acs:opensearch:*:*:app-groups/app_schema_demo"
        },
        {
            "Action": "opensearch:ListUserAnalyzers",
            "Effect": "Allow",
            "Resource": "acs:opensearch:*:*:user-analyzers/*"
        }
    ],
    "Version": "1"
}

監控與警示許可權

監控與警示功能是基於阿里雲監控系統,可以通過在RAM原則範本中搜尋AliyunCloudMonitorReadOnlyAccess來查看CloudMonitor唯讀策略。

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "cms:Get*",
                "cms:List*",
                "cms:Query*",
                "cms:BatchQuery*"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": "opensearch:DescribeApp",
            "Resource": "acs:opensearch:*:*:app-groups/*",
            "Effect": "Allow"
        }
    ]
}

RDS訪問授權

訪問RDS有兩個介面,tables和fields。由於訪問RDS需要添加白名單,因此還需要再為RAM子帳號設定白名單許可權(如果沒有該許可權,串連RDS時會報錯提示設定RDS的IP白名單失敗)。RDS 的授權直接在 RAM控制台配置,可以在概覽頁配置自訂授權策略或者角色,然後在使用者管理頁面對子帳號進行授權(RDS授權參考文檔)。OpenSearch 使用 RDS 授權最小集合:

  • Resource 中的變數含義(例如: $regionid,$accountid,$dbinstanceid 等)。

  • Resource 中相關參數值也可以使用萬用字元 * 來表示。

    {
      "Version": "1",
      "Statement": [
          {
              "Action": "rds:DescribeDBInstanceAttribute",
              "Resource": "acs:rds:$regionid:$accountid:dbinstance/$dbinstanceid",
              "Effect": "Allow"
          },
          {
              "Action": "rds:ModifySecurityIps",
              "Resource": "acs:rds:$regionid:$accountid:dbinstance/$dbinstanceid",
              "Effect": "Allow"
          },
          {
              "Action": "rds:DescribeDBInstanceIPArrayList",
              "Resource": "acs:rds:$regionid:$accountid:dbinstance/$dbinstanceid",
              "Effect": "Allow"
          },
          {
              "Action": "rds:DescribeDBInstanceNetInfoForChannel",
              "Resource": "acs:rds:$regionid:$accountid:dbinstance/$dbinstanceid",
              "Effect": "Allow"
          }
      ]
    }

流量API調用許可權

通過API搜尋、資料推送、訪問下拉提示模型時需要添加如下許可權。

{
	"Statement": [
	 {
	  "Effect": "Allow",
	  "Action": [
	   "opensearch:PushDoc",
	   "opensearch:SearchApp"
	  ],
	  "Resource": [
	   "acs:opensearch:$regionId:*:apps/$appGroupName",
	   "acs:opensearch:$regionId:*:app-groups/$appGroupName"
	  ]
	 },
	 {
	  "Action": "opensearch:SearchSuggest",
	  "Effect": "Allow",
	  "Resource": "acs:opensearch:$regionId:*:suggestions/$suggestionIdentity"
	 }
	],
	"Version": "1"
   }

授權參考

在確定要為子使用者賦予某些需要操作的應用後,子使用者正常登入控制台通常需要依賴多種 action 許可權組合,可以考慮賦予子使用者 Describe*List* 許可權,當然也可以根據您的實際情境需求為子使用者賦予特定的許可權組合。

參考(1)

給accountId為1234的主帳號下的某個子帳號賦予所有地區、所有應用的所有操作許可權,該策略在主帳號控制台中建立後,需再通過主帳號在 RAM 控制台中對子帳號授權,或通過 RAM SDK對子帳號授權。1、建立一個策略。

{
  "Statement": [
    {
      "Action": "opensearch:*",
      "Effect": "Allow",
      "Resource": "acs:opensearch:*:1234:apps/*"
    }
  ],
  "Version": "1"
}

2、把當前策略授權給您指定的子帳號。

參考(2)

給accountId為1234的主帳號下的某個子帳號賦予華東1地區(cn-hangzhou)、所有應用的所有操作許可權,該策略在主帳號控制台中建立後,需再通過主帳號在 RAM 控制台中對子帳號授權,或通過 RAM SDK對子帳號授權。

1、建立一個策略。

{
  "Statement": [
    {
      "Action": "opensearch:*",
      "Effect": "Allow",
      "Resource": "acs:opensearch:cn-hangzhou:1234:apps/*"
    }
  ],
  "Version": "1"
}

2、把當前策略授權給您指定的子帳號。

說明

注意: 

  • 在resource格式中,如果是通過指定*萬用字元匹配,將包含所有資源類型。 

  • 如果在resource格式中,是通過指定應用程式名稱匹配, 即使在該策略的Action中指定opensearch:*,也只會包含資源類別為應用程式名稱的所有Action,不包含 opensearch:ListApp和opensearch:CreateApp。 

  • 每一行Action都必須對應所在行的resource格式,例如 opensearch:ListApp和opensearch:CreateApp作用範圍是所有應用,必須用 *表示。注意這2個Action對應resource格式和其它Action對應 resource格式有區別。 

  • 如果您的授權策略中只包含指定應用程式名稱資源格式,並且您也依賴 opensearch:ListApp和opensearch:CreateApp許可權。您需要再建立1個包含這2個資源格式為*的Action策略,並累加授權給指定RAM子帳號。

控制台鑒權問題解決流程

當使用子帳號存取控制台時,可能會遇到提示“RAM 子賬戶鑒權失敗”的情況,如圖:1此時:

  • 按圖中所示,找到請求的POP Action,例:ListAppGroups;如果 action 出現 DryRun尾碼,實際對應的是沒有尾碼的action,例:CreateAppDryRun 對應的action是 CreateApp;

  • 再到 應用授權規則列表中找到 ListAppGroups 對應的 RAM Action 和 Resource Pattern;(註:

    RAM Action 很有可能不等於 POP Action)

  • 最後,按照對子帳號的授權需要編寫授權策略。