O Amazon Redshift exige que todas as solicitações que você envia para a API de gerenciamento sejam autenticadas com uma assinatura. Este tópico explica como assinar suas solicitações.
Se você estiver usando um dos Kits de Desenvolvimento de Software (SDKs) da AWS ou a AWS Command Line Interface, a assinatura da solicitação é tratada automaticamente e você pode pular esta seção. Para obter mais informações sobre como usar os SDKs da AWS, consulte Usar as interfaces de gerenciamento do Amazon Redshift para clusters provisionados. Para obter mais informações sobre como usar a interface da linha de comando do Amazon Redshift, acesse Referência da linha de comando do Amazon Redshift.
Para assinar uma solicitação, calcule uma assinatura digital usando a função de hash criptográfico. Um hash criptográfico é uma função que retorna um valor de hash exclusivo que é baseado na entrada. A entrada da função de hash inclui o texto da solicitação e a chave de acesso secreta que é possível obter nas credenciais temporárias. A função de hash retorna um valor de hash que você inclui na solicitação como sua assinatura. A assinatura é parte do cabeçalho Authorization
de sua solicitação.
nota
Os usuários precisam de acesso programático se quiserem interagir com a AWS de fora do AWS Management Console. A forma de conceder acesso programático depende do tipo de usuário que está acessando a AWS.
Para conceder acesso programático aos usuários, selecione uma das seguintes opções:
Qual usuário precisa de acesso programático? | Para | Por |
---|---|---|
Identidade da força de trabalho (Usuários gerenciados no Centro de Identidade do IAM) |
Use credenciais temporárias para assinar solicitações programáticas para a AWS CLI, os SDKs da AWS ou as APIs da AWS. |
Siga as instruções da interface que deseja utilizar.
|
IAM | Use credenciais temporárias para assinar solicitações programáticas para a AWS CLI, os SDKs da AWS ou as APIs da AWS. | Siga as instruções em Usar credenciais temporárias com recursos da AWS no Guia do usuário do IAM. |
IAM | (Não recomendado) Use credenciais de longo prazo para assinar solicitações programáticas para a AWS CLI, os SDKs da AWS ou as APIs da AWS. |
Siga as instruções da interface que deseja utilizar.
|
Depois que o Amazon Redshift recebe a solicitação, ele recalcula a assinatura usando a mesma função de hash e a mesma entrada que você usou para assinar a solicitação. Se a assinatura resultante corresponde à assinatura na solicitação, o Amazon Redshift processa a solicitação; caso contrário, a solicitação é rejeitada.
O Amazon Redshift oferece suporte à autenticação usando a assinatura versão 4 da AWS. O processo para cálculo de uma assinatura é composto de três tarefas. Essas tarefas são ilustradas no exemplo a seguir.
-
Tarefa 1: Criar uma solicitação canônica
Reorganize sua solicitação HTTP em um formato canônico. O uso de um formulário canônico é necessário porque o Amazon Redshift usa o mesmo formulário canônico para calcular a assinatura que compara com a que você enviou.
-
Tarefa 2: Criar uma string para assinar
Crie uma string que será usada como um dos valores de entrada para sua função hash criptográfica. A string, chamada string-to-sign, é uma concatenação do nome do algoritmo hash, da data da solicitação, de uma string do escopo da credencial e da solicitação canonizada da tarefa anterior. A string do escopo credencial em si é uma concatenação da data, da região e de informações do serviço.
-
Tarefa 3: calcular uma assinatura
Calcule uma assinatura para sua solicitação usando uma função hash criptográfica que aceite duas strings de entrada, sua string para assinar e uma chave derivada. A chave derivada é calculada começando com sua chave de acesso secreta e usando a string do escopo da credencial para criar uma série de códigos de autenticação de mensagem baseados em hash (HMAC-SHA256).
Exemplo de cálculo de assinatura
O exemplo a seguir mostra os detalhes da criação de uma assinatura para a solicitação CreateCluster. Você pode usar este exemplo como uma referência para verificar seu próprio método de cálculo de assinatura. Outros cálculos de referência estão incluídos na seção Exemplos de assinatura de solicitação do Guia do usuário do IAM.
Você pode usar uma solicitação GET ou POST para enviar solicitações ao Amazon Redshift. A diferença entre as duas é que, para a solicitação GET, seus parâmetros são enviados como parâmetros de string de consulta. Para a solicitação POST, eles são incluídos no corpo da solicitação. O exemplo abaixo mostra uma solicitação POST.
O exemplo supõe o seguinte:
-
O timestamp da solicitação é
Fri, 07 Dec 2012 00:00:00 GMT
. -
O endpoint é a região Leste dos EUA (Norte da Virgínia),
us-east-1
.
A sintaxe geral da solicitação é:
https://redshift.us-east-1.amazonaws.com/
?Action=CreateCluster
&ClusterIdentifier=examplecluster
&MasterUsername=masteruser
&MasterUserPassword=12345678Aa
&NumberOfNode=2
&NodeType=dc2.large
&Version=2012-12-01
&x-amz-algorithm=AWS4-HMAC-SHA256
&x-amz-credential=AKIAIOSFODNN7EXAMPLE/20121207/us-east-1/redshift/aws4_request
&x-amz-date=20121207T000000Z
&x-amz-signedheaders=content-type;host;x-amz-date
O formato canônico da solicitação calculada para Tarefa 1: Crie uma solicitação canônica é:
POST
/
content-type:application/x-www-form-urlencoded; charset=utf-8
host:redshift.us-east-1.amazonaws.com
x-amz-date:20121207T000000Z
content-type;host;x-amz-date
55141b5d2aff6042ccd9d2af808fdf95ac78255e25b823d2dbd720226de1625d
A última linha da solicitação canônica é o hash do corpo da solicitação. A terceira linha na solicitação canônica está vazia, pois não há parâmetros de consulta para esta API.
A string-to-sign para Tarefa 2: Crie uma string-to-sign é:
AWS4-HMAC-SHA256
20121207T000000Z
20121207/us-east-1/redshift/aws4_request
06b6bef4f4f060a5558b60c627cc6c5b5b5a959b9902b5ac2187be80cbac0714
A primeira linha da string-to-sign é o algoritmo, a segunda linha é a time stamp, a terceira linha é o escopo da credencial e a última linha é o hash da solicitação canônica da Tarefa 1: Crie uma solicitação canônica. O nome do serviço a usar no escopo da credencial é redshift
.
Para a Tarefa 3: calcular uma assinatura, a chave derivada pode ser representada como:
derived key = HMAC(HMAC(HMAC(HMAC("AWS4" + YourSecretAccessKey,"20121207"),"us-east-1"),"redshift"),"aws4_request")
A chave derivada é calculada como uma série de funções de hash. Partindo de instrução interna de HMAC na fórmula acima, você concatena a frase AWS4
com sua chave de acesso secreta e a utiliza como a chave para fazer hash dos dados “us-east-1”. O resultado desse hash se torna a chave para a próxima função de hash.
Após o cálculo da chave derivada, você a utiliza em uma função de hash que aceita duas strings de entrada, a sua string-to-sign e a chave derivada. Por exemplo, se você usar a chave de acesso secreta wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
e a string-to-sign fornecida anteriormente, a assinatura calculada será como se segue:
9a6b557aa9f38dea83d9215d8f0eae54100877f3e0735d38498d7ae489117920
A etapa final é construir o cabeçalho Authorization
. Para a chave de acesso de demonstração AKIAIOSFODNN7EXAMPLE
, o cabeçalho (com quebras de linha adicionadas por motivo de legibilidade) é:
Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20121207/us-east-1/redshift/aws4_request,
SignedHeaders=content-type;host;x-amz-date,
Signature=9a6b557aa9f38dea83d9215d8f0eae54100877f3e0735d38498d7ae489117920