Erro ao adicionar permissões a um tópico Amazon SNS ao usar as bibliotecas .NET

StackOverflow https://stackoverflow.com/questions/4061836

  •  27-09-2019
  •  | 
  •  

Pergunta

Ao tentar adicionar permissões a um tópico Amazon SNS usando o AWS SDK para .NET/1.1.0.1 Usando código semelhante ao seguinte:

AddPermissionRequest request = new AddPermissionRequest()
    .WithActionNames(new[] { "Publish" })
    .WithAWSAccountIds(new[] { "xxx" })
    .WithLabel("PrincipleAllowControl")
    .WithTopicArn(resourceName);
client.AddPermission(request); 

A seguinte mensagem de erro é retornada:

<ErrorResponse xmlns=" http://sns.amazonaws.com/doc/2010-03-31/">
  <Error>
    <Type>Sender</Type>
    <Code>ValidationError</Code>
    <Message>2 validation errors detected: Value null at 'actionName' failed to satisfy constraint: Member must not be null; Value null at 'aWSAccountId' failed to satisfy constraint: Member must not be null</Message>
  </Error>
  <RequestId>45054159-e46b-11df-9b30-693941920fe7</RequestId>
</ErrorResponse> 
Foi útil?

Solução

Atualizar - Isso foi resolvido Na versão mais recente da API .NET, para que alguém ainda encontre esse problema deve atualizar para o 1.1.1 versão da API.


Levei um tempo para descobrir o que estava acontecendo e acabei tendo que usar a versão HTTP dos clientes, bem como Wireshark Observar o que estava acontecendo, mas parece que há um bug no AWS SDK para .NET/1.1.0.1. Quando escrevi uma função semelhante usando o AWS SDK para Java As coisas provaram funcionar bem, a seguir é um pequeno bloco desse código:

AddPermissionRequest permissionRequest = new AddPermissionRequest()
   .withActionNames("Publish")
   .withAWSAccountIds("xxx")
   .withLabel("PrincipleAllowControl")
   .withTopicArn(resourceName);
client.addPermission(permissionRequest); 

Observar o que estava acontecendo via Wireshark apareceu o seguinte, com uma pequena censura e edição para clareza:

POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=utf-8
User-Agent: AWS Java SDK-1.0.14
Host: sns.us-east-1.amazonaws.com
Content-Length: 419

Action=AddPermission&
SignatureMethod=HmacSHA256&
Label=PrincipleAllowControl&
ActionName.member.1=Publish&
AWSAccessKeyId=xxx&
Version=2010-03-31&
AWSAccountId.member.1=xxx&
SignatureVersion=2&
TopicArn=arn%3Aaws%3Asns%3Aus-east-1%3A589983072084%3Axxx&
Timestamp=2010-10-31T02%3A10%3A10.833Z&
Signature=Bq09wa2vF1levQGcQZWVaix3UG7Mxlq2JCk4znEYHAM%3D

POST / HTTP/1.1
User-Agent: AWS SDK for .NET/1.1.0.1
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Host: sns.us-east-1.amazonaws.com
Content-Length: 422

Action=AddPermission&
TopicArn=arn%3Aaws%3Asns%3Aus-east-1%3A589983072084%3Axxx&
Label=PrincipleAllowControl&
AWSAccountIds.member.1=xxx&
ActionNames.member.1=Publish&
AWSAccessKeyId=xxx&
SignatureVersion=2&
SignatureMethod=HmacSHA256&
Timestamp=2010-10-30T21%3A18%3A39.753Z&
Version=2010-03-31&
Signature=m9OvL1v91eurDa5QYP9gwrd2crdtssHsDFonFny3frU%3D

Como você pode ver, o AWS SDK para .NET está fazendo uma chamada usando awsaccountids e nomes de ação em oposição ao AWSACCOUNTID e ACTIONNAME Usado pelo AWS Java SDK, que explica a mensagem de erro que foi retornada.

Por enquanto, não parece haver muito o que pode ser feito sobre isso sem usar o comando nos aplicativos .NET e escrever seu próprio código para fazer a chamada. Com alguma sorte, isso será corrigido em uma atualização para o SDK.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top