Caso seu plugin ou arquivo source de dicionário esteja armazenado no Object Storage Service (OSS), faça o upload informando o endereço do OSS no console do Elasticsearch (ES). Para isso, conceda acesso ao caminho especificado no OSS por meio de uma função de service.
Introdução à função de service do ES
Uma função de service é um tipo de função do Resource Access Management (RAM) cuja entidade confiável é um service da Alibaba Cloud. Ela foi projetada para autorizar o acesso entre diferentes services da Alibaba Cloud. Para mais informações, consulte RAM role overview.
Ao atualizar um dicionário informando um caminho do OSS no console, se não existir nenhuma função com as permissões necessárias, autorize a criação de uma função de service. O ES assume essa função para acessar o arquivo no caminho do OSS especificado e atualizar o dicionário na sua instância do ES, sem que seja necessário configurar o bucket do OSS como leitura pública.
Os detalhes dessa função são:
Nome do service: elasticsearch.aliyuncs.com
Nome da função: AliyunElasticsearchAccessingOSSRole
Nome da política de acesso: AliyunElasticsearchAccessingOSSRolePolicy
-
Documento de política da função
{ "Version": "1", "Statement": [ { "Action": [ "oss:GetObject", "oss:GetObjectMetadata", "oss:GetObjectMeta" ], "Resource": "*", "Effect": "Allow" } ] }
Exclua a função de service
Para excluir a função de service, acesse o console do Resource Access Management (RAM). Para mais informações, consulte Delete a RAM role.
Após a exclusão da função de service, os recursos que dependem dela deixarão de funcionar corretamente. Proceda com cautela.
Exemplo: Restringir permissões da função de service
Para limitar o acesso da função de service, personalize a política de autorização conforme descrito abaixo:
-
Defina tags de bucket
Utilize tags de bucket para gerencie permissões de buckets do OSS. Para mais informações, consulte Manage bucket tags.
Faça login no console do OSS.
No painel de navegação à esquerda, clique em Buckets. Na página exibida, clique em no nome do bucket desejado.
-
Configure a tag do bucket.
Defina a chave da tag como Elasticsearch e o valor da tag como test e, em seguida, clique em Set.
-
Crie uma política do RAM. Para mais informações, consulte Create a custom policy in script mode.
Modifique o elemento Resource para restringir o acesso a um bucket específico ou o elemento Condition para restringir o acesso a buckets com uma tag específica. Exemplo:
{ "Version": "1", "Statement": [ { "Action": [ "oss:GetObject", "oss:GetObjectMetadata", "oss:GetObjectMeta" ], "Resource": [ "acs:oss:*:193248xxxxxxx:*" ], "Effect": "Allow", "Condition": { "StringEquals": { "oss:BucketTag/key1":"value1" } } } ] } -
Edite as permissões da AliyunElasticsearchAccessingOSSRole e adicione a política personalizada criada na etapa anterior.
Perguntas frequentes
P: Por que recebo o código de erro ElasticsearchNoPermissionForCurrentBucket ao fazer requisições OpenAPI como UpdateDict, UpdateHotIkDicts, UpdateSynonymsDicts ou UpdateAliwsDict?
R: Instâncias de controle cloud-native (versões 7,16, 8,5 e 8,9) leem arquivos de dicionário do OSS apenas por meio de uma função de service da Alibaba Cloud. O acesso direto a endereços OSS de leitura pública não é suportado. Acesse a página de autorização para conceder as permissões necessárias. Isso se aplica a atualizações de sinônimos, atualizações frias e quentes de dicionários IK e atualizações de dicionários ali-ws a partir do OSS.