Como resolvo o cabeçalho de host que está ausente ou não é válido no Amazon OpenSearch Service?

Data da última atualização: 23/07/2021

Estou recebendo um erro “Não autorizado” devido a um cabeçalho de host inválido ou ausente no Amazon OpenSearch Service (sucessor do Amazon Elasticsearch Service). Como resolvo isso?

Breve descrição

A métrica InvalidHostHeaderRequests no Amazon CloudWatch é registrada quando o valor do cabeçalho de host de uma solicitação é diferente do Fully Qualified Domain Name (FQDN – Nome de domínio totalmente qualificado).

Para as seguintes condições, o Amazon OpenSearch Service rejeita as solicitações que não têm cabeçalhos válidos:

  • O domínio solicitado está acessível ao público.
  • O domínio solicitado utiliza uma política de acesso aberta do AWS Identity and Access Management (IAM) em vez de uma política baseada em recursos (como uma política baseada em IP).

Para evitar que o contador de métricas InvalidHostHeaderRequests seja acionado, considere as seguintes abordagens:

Caso contrário, você receberá o seguinte erro:

$ curl -H 'Host: domain.com' domain-endpoint-name
User is not authorized to perform this action

Resolução

Exemplo

Aqui está um exemplo de uma política aberta de acesso:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "es:*",
            "Resource": "arn:aws:es:Region:account-id:domain/os-domain-name/*"
        }
    ]
}

O comando a seguir usa domain.com como o valor do cabeçalho de host, que não é um cabeçalho válido para o domínio os-domain-name. Quando essa solicitação é enviada a um domínio acessível ao público com uma política de acesso aberto, a métrica InvalidHostHeaderRequests é registrada e a solicitação é rejeitada.

$ curl -H 'Host: domain.com' os-domain-name
User is not authorized to perform this action

Para resolver o erro “User is not authorized to perform this action” (O usuário não está autorizado a executar esta ação), considere as seguintes abordagens:

  • Defina o valor apropriado para o cabeçalho de host.
  • Inicie seu domínio do OpenSearch Service usando uma VPC.
  • Use uma política de acesso baseada em IP em vez de uma política aberta de acesso.
  • Use o FGAC.

Dica 1: defina o valor apropriado para o cabeçalho de host

O comando de exemplo a seguir especifica o nome de domínio como o valor do cabeçalho de host:

$ curl -H 'Host: os-endpoint' os-endpoint

Aqui está um exemplo que usa um URL de endpoint da AWS:

curl -H 'Host: xxxxxx..os.amazonaws.com' https://xxxxxx..os.amazonaws.com

Dica 2: inicie seu domínio do OpenSearch Service usando uma VPC

Usar uma VPC para iniciar o domínio do OpenSearch Service fornece uma camada adicional de segurança. Uma VPC também permite que você gerencie o acesso ao domínio por meio de grupos de segurança. Portanto, é uma prática recomendada evitar o uso de um endpoint público para iniciar seu domínio. Embora sua solicitação chegue ao domínio do OpenSearch Service, você pode receber um erro Não autorizado ao acessar o endpoint público em um navegador da Web. Para obter mais informações, consulte Sobre políticas de acesso em domínios da VPC.

Quando você cria um domínio com acesso à VPC, o endpoint fica assim (semelhante a um endpoint público):

https://vpc-domain-name-identifier.region.os.amazonaws.com

Dica 3: use uma política baseada em recursos

Em vez de uma política de acesso aberta, use uma política de acesso baseada em recursos que especifique funções do IAM ou restrinja solicitações a um endereço IP ou intervalo CIDR.

Por exemplo, a seguinte política baseada em IP permite solicitações no intervalo CIDR 11.11.11.11/32. Solicitações para domínios nesse intervalo são permitidas, e a métrica InvalidHostHeaderRequests não é registrada, independentemente do valor do cabeçalho de host.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "es:*",
            "Resource": "arn:aws:es:region:account-id:domain/os-domain-name/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "11.11.11.11/32"
                    ]
                }
            }
        }
    ]
}

Dica 4: se o Fine-Grained Access Control (FGAC – Controle de acesso refinado).

Junto com as políticas de acesso baseadas em recursos, você pode usar o FGAC para gerenciar o acesso aos dados do seu domínio do OpenSearch Service. O controle de acesso refinado oferece os seguintes benefícios:

  • Controle de acesso baseado em função
  • Segurança no nível de índice, documento e campo
  • Multilocação do OpenSearch Dashboards
  • Autenticação básica HTTP para OpenSearch Service e OpenSearch Dashboards

Como o FGAC é baseado em funções, as credenciais do usuário são avaliadas ao autenticar uma solicitação. Se o controle de acesso refinado autenticar o usuário, a métrica InvalidHostHeaderRequests não será registrada. Para obter mais informações sobre o FGAC, consulte O panorama: controle de acesso refinado e segurança do OpenSearch Service.