本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon OpenSearch 服務中的 Identity and Access Management
Amazon OpenSearch 服務提供了多種方法來控制對您的域的訪問。本主題涵蓋各種政策類型、它們如何彼此互動,以及如何建立自己的自訂政策。
重要
VPC支援為 OpenSearch 服務存取控制提供了一些額外的考量。如需詳細資訊,請參閱關於 VPC 網域上的存取政策。
政策的類型
OpenSearch 服務支援三種類型的存取原則:
資源型政策
建立網域時,您可以新增以資源為基礎的政策 (通常稱為網域存取政策)。這些政策指定主體可以對域的子資源執行哪些操作 (跨叢集搜尋除外)。子資源包括 OpenSearch 索引和APIs. Principal 元素指定允許存取的帳戶、使用者或角色。Resource 元素指定這些委託人可以存取哪些子資源。
例如,以下以資源為基礎的政策向 test-domain
上的子資源授予 test-user
完整存取權 (es:*
):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::123456789012:user/test-user" ] }, "Action": [ "es:*" ], "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/*" } ] }
此政策適用兩個重要考量:
-
這些權限只適用於此網域。除非您在其他網域上建立類似的政策,否則
test-user
只能存取test-domain
。 -
Resource
元素中的結尾/*
很重要,並指出以資源為基礎的政策僅適用於網域的子資源,不適用於網域本身。在以資源為基礎的政策中,es:*
動作相當於es:ESHttp*
。例如,
test-user
可以提出索引請求 (GET https://search-test-domain.us-west-1.es.amazonaws.com/test-index
),但不能更新網域的組態 (POST https://es.us-west-1.amazonaws.com/2021-01-01/opensearch/domain/test-domain/config
)。請注意兩個端點之間的差異。存取組態API需要以身分識別為基礎的原則。
您可以新增萬用字元來指定部分索引名稱。此範例可識別任何以 commerce
開頭的索引︰
arn:aws:es:us-west-1:987654321098:domain/test-domain/commerce*
在此情況下,該萬用字元代表 test-user
可以向 test-domain
中名稱以 commerce
開頭的索引發出請求。
若要進一步限制 test-user
,您可以套用以下政策:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::123456789012:user/test-user" ] }, "Action": [ "es:ESHttpGet" ], "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/commerce-data/_search" } ] }
現在 test-user
可以執行一項操作:根據 commerce-data
搜尋。其他所有網域內的索引均無法存取,而且無使用 es:ESHttpPut
或 es:ESHttpPost
動作的許可,因此 test-user
無法新增或修改文件。
接著,您可能會決定設定進階使用者角色。此原則可讓您power-user-role
存取索引URIs中所有項目的HTTPGET和PUT方法:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::123456789012:role/power-user-role" ] }, "Action": [ "es:ESHttpGet", "es:ESHttpPut" ], "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/commerce-data/*" } ] }
如果您的網域處於VPC或使用精細的存取控制,您可以使用開放網域存取原則。否則,您的網域存取政策必須包含一些限制 (依委託人或 IP 地址)。
如需有關所有可行動作的詳細資訊,請參閱政策元素參考。若要更精細地控制您的資料,請搭配使用開放網域存取政策與精細存取控制。
身分型政策
不同於以資源為基礎的原則 (屬於每個 OpenSearch Service 網域的一部分),您可以使用 AWS Identity and Access Management () IAM 服務將以身分識別為基礎的原則附加至使用者或角色。就像以資源為基礎的政策一樣,以身分為基礎的政策會指定誰可以存取服務、可以執行哪些動作,以及可以在哪些資源執行那些動作 (如果適用)。
雖然他們不需要這麼做,但以身分為基礎的政策往往更加通用。它們通常只管理使用者可以執行的組態API動作。設定這些原則之後,您可以在 Service 中使用以資源為基礎的原則 (或精細的存取控制),提 OpenSearch 供使用者存取 OpenSearch 索引和. APIs
注意
具有 AWS 受管理AmazonOpenSearchServiceReadOnlyAccess
原則的使用者無法在主控台上看到叢集健全狀況狀態。若要允許使用者查看叢集健康狀態 (和其他 OpenSearch 資料),請將es:ESHttpGet
動作新增至存取原則,並將其附加至其帳戶或角色。
由於以識別為基礎的原則會附加至使用者或角色 (主參與者),因此JSON不會指定主參與者。下列政策授與動作存取權,該動作的開頭是 Describe
和 List
。這組動作提供的唯讀存取權限用於網域組態,而非儲存在網域本身的資料:
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "es:Describe*", "es:List*" ], "Effect": "Allow", "Resource": "*" } ] }
管理員可能擁有 OpenSearch Service 的完整存取權,以及儲存在所有網域中的所有資料:
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "es:*" ], "Effect": "Allow", "Resource": "*" } ] }
以身分識別為基礎的原則可讓您使用標籤來控制組態的存取。API例如,如果網域具有 team:devops
標籤,下列政策可讓所連接的委託人檢視並更新網域的組態:
{ "Version": "2012-10-17", "Statement": [{ "Action": [ "es:UpdateDomainConfig", "es:DescribeDomain", "es:DescribeDomainConfig" ], "Effect": "Allow", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:ResourceTag/team": [ "devops" ] } } }] }
您也可以使用標籤來控制對 OpenSearch API. 以標籤為基礎的原則 OpenSearch API僅適用於方HTTP法。例 OpenSearch API如,如果網域有environment:production
標籤,下列原則可讓附加的主參GET與者傳送及PUT要求至:
{ "Version": "2012-10-17", "Statement": [{ "Action": [ "es:ESHttpGet", "es:ESHttpPut" ], "Effect": "Allow", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:ResourceTag/environment": [ "production" ] } } }] }
如需更精細的控制 OpenSearch API,請考慮使用精細的存取控制。
注意
將一或多個新增 OpenSearch APIs至任何以標籤為基礎的原則之後,您必須執行單一標籤作業 (例如新增、移除或修改標籤),變更才能在網域上生效。您必須使用服務軟體 R20211203 或更新版本,才能將 OpenSearch API作業納入標籤式原則中。
OpenSearch 服務支援組態的RequestTag
和TagKeys
全域條件索引鍵API,而不是 OpenSearch API. 這些條件僅適用於在要求中包含標籤的API呼叫CreateDomain
,例如AddTags
、和RemoveTags
。下列政策可讓所連接的委託人建立網域,但前提是他們在請求中包含 team:it
標籤:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "es:CreateDomain", "es:AddTags" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/team": [ "it" ] } } } }
有關使用標籤進行存取控制的詳細資訊,以及以資源為基礎和以身分識別為基礎的策略之間的差異,請參閱使用者指IAM南。
以 IP 為基礎的政策
IP 型原則會將網域的存取限制為一或多個 IP 位址或CIDR區塊。從技術層面來看,以 IP 為基礎的政策不是明確的政策類型。反而,其乃以資源為基礎的政策,負責指定匿名委託人並包含特殊的 Condition 元素。
IP 原則的主要吸引力在於它們允許對 OpenSearch Service 網域的未簽署要求,這可讓您使用 curl
注意
如果您已啟用網域的VPC存取權,則無法設定 IP 型原則。您反而可以使用安全群組來控制哪些 IP 地址可以存取網域。如需詳細資訊,請參閱關於 VPC 網域上的存取政策。
下列原則會授與源自指定 IP 範圍的所有HTTP要求存取test-domain
權:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "es:ESHttp*" ], "Condition": { "IpAddress": { "aws:SourceIp": [ "192.0.2.0/24" ] } }, "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/*" } ] }
如果您的網域具有公用端點,且未使用精細的存取控制,建議您合併IAM主體和 IP 位址。只有當要求來自指定的 IP 範圍時,此原則才會授與test-user
HTTP存取權:
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::987654321098:user/test-user" ] }, "Action": [ "es:ESHttp*" ], "Condition": { "IpAddress": { "aws:SourceIp": [ "192.0.2.0/24" ] } }, "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/*" }] }
提出和簽署 OpenSearch 服務請求
即使您設定完全開放的以資源為基礎的存取原則,對 OpenSearch Service 組態的所有要求都API必須簽署。如果您的原則指定IAM角色或使用者,則對 OpenSearch APIs同時的要求必須使用 AWS 簽章版本 4 來簽署。簽署方法的不同之處在於API:
-
若要呼叫 OpenSearch 服務組態API,建議您使用 AWS SDKs
. 與建立和簽署您自己的要求相比,可SDKs大幅簡化程序,並且可以節省大量時間。組態API端點使用下列格式: es.
region
.amazonaws.com/2021-01-01/例如,下列請求提出對
movies
網域進行組態變更,但是您必須自行登入 (不建議):POST https://es.
us-east-1
.amazonaws.com/2021-01-01/opensearch/domain/movies
/config { "ClusterConfig": { "InstanceType": "c5.xlarge.search" } }如果您使用其中一個SDKs,例如 Boto 3
,則SDK會自動處理請求簽名: import boto3 client = boto3.client(es) response = client.update_domain_config( DomainName='
movies
', ClusterConfig={ 'InstanceType': 'c5.xlarge.search' } )如需 Java 程式碼範例,請參閱使用AWS與亞馬遜互動的 SDKOpenSearch服務。
-
若要撥打電話 OpenSearch APIs,您必須簽署您自己的要求。使 OpenSearch APIs用以下格式:
domain-id
.region
.es.amazonaws.com例如,以下請求將搜尋 thor 的
movies
索引:GET https://
my-domain
.us-east-1
.es.amazonaws.com/movies/_search?q=thor
注意
對於使用簽名版本 4 簽署URLs的HTTPPOST請求,服務會忽略傳入的參數。
當政策衝突時
當與政策相違或未明確提及使用者時,事情就變得複雜了。瞭解IAM使用者指南中的IAM運作方式,提供原則評估邏輯的簡要摘要:
-
根據預設,所有的請求一律拒絕。
-
明確允許覆寫這個預設值。
-
明確拒絕覆寫任何允許。
例如,如果以資源為基礎的策略授與您存取網域子資源 ( OpenSearch 索引或API),但以身分識別為基礎的策略拒絕您存取,則您將被拒絕存取。如果以身分為基礎的政策授與存取權,但以資源為基礎的政策未指定您是否有存取權,此時您便可以存取。請參閱下表的相交政策,以了解網域子資源的完整結果摘要。
以資源為基礎的政策允許 | 以資源為基礎的政策拒絕 | 以資源為基礎的政策不允許也不拒絕 | |
---|---|---|---|
Allowed in identity-based policy |
允許 |
拒絕 | 允許 |
Denied in identity-based policy | 拒絕 | 拒絕 | 拒絕 |
Neither allowed nor denied in identity-based policy | 允許 | 拒絕 | 拒絕 |
政策元素參考
OpenSearch 服務支援策略元素參考中的大多數IAM政策元素,但不包括NotPrincipal
. 下表顯示最常見的元素。
JSON策略元素 | Summary |
---|---|
Version |
目前版本的政策語言是 |
Effect |
此元素指定公告內容是否允許或拒絕對指定動作的存取。有效值為 |
Principal |
此元素會指定允許 AWS 帳戶 或拒絕存取資源的或IAM角色或使用者,而且可以採用數種形式:
重要指定
|
Action
|
OpenSearch 服務使用 OpenSearch HTTP方法的 某些特定 如需所有可用動作的清單,以及它們是套用至網域子資源 ( 由於 當然,您有權利納入一些動作來搭配較無限制性的資源元素,如下所示:
若要進一步了解有關配對動作和資源的詳細資訊,請參閱此表格中的 |
Condition |
OpenSearch Service 支援IAM使用者指南中AWS 全域條件前後關聯鍵字中所述的大多數條件。值得注意的例外包括 設定 IP 型原則時,您可以將 IP 位址或CIDR封鎖指定為條件,如下所示:
如中所述 身分型政策 |
Resource |
OpenSearch 服務以三種基本方式使用
如需有關哪些動作支援資源層級許可的詳細資訊,請參閱此表格中的 |
進階選項與API考量
OpenSearch 服務有幾個高級選項,其中一個具有訪問控制的含義:rest.action.multi.allow_explicit_index
。它的預設設定為 true,可讓使用者在特定情況下繞過子資源許可。
例如,請考量以下以資源為基礎的政策:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::123456789012:user/test-user" ] }, "Action": [ "es:ESHttp*" ], "Resource": [ "arn:aws:es:us-west-1:987654321098:domain/test-domain/test-index/*", "arn:aws:es:us-west-1:987654321098:domain/test-domain/_bulk" ] }, { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::123456789012:user/test-user" ] }, "Action": [ "es:ESHttpGet" ], "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/restricted-index/*" } ] }
此原則會授test-user
與 OpenSearch 大量的完整存取權限API。test-index
它也允許 GET
請求 restricted-index
。
以下索引請求因為許可錯誤而失敗:
PUT https://search-test-domain.us-west-1.es.amazonaws.com/restricted-index/movie/1 { "title": "Your Name", "director": "Makoto Shinkai", "year": "2016" }
與索引不同API,批量API允許您在一次調用中創建,更新和刪除許多文檔。不過,您通常會在要求主體中指定這些作業,而不是在要求中URL。由於 OpenSearch Service 用URLs來控制對網域子資源的存取,因此事實上,test-user
可以使用大量API變更網域子資源。restricted-index
即使使用者缺少索引的 POST
許可,以下請求仍會成功:
POST https://search-test-domain.us-west-1.es.amazonaws.com/_bulk { "index" : { "_index": "restricted-index", "_type" : "movie", "_id" : "1" } } { "title": "Your Name", "director": "Makoto Shinkai", "year": "2016" }
在這種情況下,存取政策無法滿足其目的。為了防止使用者繞過這些類型的限制,您可以變更 rest.action.multi.allow_explicit_index
為 false。如果此值為 false,則在要求主體中指定索引名稱的大量、mget 和 msearch APIs 的所有呼叫都會停止運作。換言之,呼叫 _bulk
不再運作,但呼叫 test-index/_bulk
則正常運作。第二個端點包含索引名稱,因此您不需要在請求本文中指定一個。
OpenSearch 儀表板在很大程度上依賴 mget 和 msearch,因此在此更改後不太可能正常工作。對於部分補救,您可以保留rest.action.multi.allow_explicit_index
為 true,並拒絕某些使用者存取一或多個這些補救措施APIs。
如需變更此設定的詳細資訊,請參閱進階叢集設定。
同樣地,以下以資源為基礎的政策包含兩個細微問題:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/test-user" }, "Action": "es:ESHttp*", "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/*" }, { "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/test-user" }, "Action": "es:ESHttp*", "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/restricted-index/*" } ] }
-
儘管明確拒絕,
test-user
仍然可以呼叫如GET https://search-test-domain.us-west-1.es.amazonaws.com/_all/_search
和GET https://search-test-domain.us-west-1.es.amazonaws.com/*/_search
以存取restricted-index
中的文件。 -
由於
Resource
元素參考restricted-index/*
,test-user
未獲許可來直接存取索引的文件。不過,使用者有權刪除整個索引。為防止存取和刪除,政策必須指定restricted-index*
。
不是廣泛允許和專注於拒絕,最安全的方法是遵循最小特權原則,只授與任務所需的許可。如需控制個別索引或 OpenSearch作業存取權的詳細資訊,請參閱Amazon OpenSearch 服務中的精細訪問控制。
重要
指定 * 萬用字元可讓您以匿名方式存取您的網域。不建議您使用萬用字元。此外,請仔細檢查下列原則,以確認它們未授與廣泛存取權:
-
附加至關聯 AWS 主參與者 (例如,角色) 的識別型原則 IAM
-
附加至關聯 AWS 資源的以資源為基礎的政策 (例如, AWS Key Management Service KMS金鑰)
設定存取政策
其他範例政策
雖然本章包含許多範例原則,但 AWS 存取控制是一個複雜的主題,最能透過範例瞭解。如需詳細資訊,請參閱《使用指南》中的以IAM身分識別為基礎IAM的範例