Error al agregar permisos a un tema Amazon SNS cuando se utilizan las bibliotecas .NET

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

  •  27-09-2019
  •  | 
  •  

Pregunta

Al intentar agregar permisos a un tema de Amazon SNS mediante el AWS SDK para .NET /1.1 .0.1 utilizando el código similar al siguiente:

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

El siguiente mensaje de error se devuelve:

<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> 
¿Fue útil?

Solución

Actualizar - Este se ha resuelto en la última versión de la API .NET así que alguien todavía tiene este problema debe actualizar a la versión 1.1.1 de la API.


Me tomó un tiempo para averiguar lo que estaba pasando y llegó a tener que utilizar la versión HTTP de los clientes, así como Wireshark para ver lo que sucedía, pero parece que hay un error en AWS SDK para .NET / 1.1.0.1. Cuando escribí una función similar utilizando la AWS SDK para Java cosas resultaron bien el trabajo, la siguiente es una pequeño bloque de código que:

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

Viendo lo que ocurría a través de Wireshark se presentó la siguiente, con un poco menor censura y editar para mayor claridad:

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 se puede ver, la AWS SDK para .NET está haciendo una llamada usando AWSAccountIds y ActionNames a diferencia de AWSAccountId y ActionName utilizado por el SDK Java de AWS que explica el mensaje de error que fue devuelto.

Por ahora no parece ser mucho que se puede hacer al respecto corta de no utilizar el comando en aplicaciones .NET y escribir su propio código para realizar la llamada. Con un poco de suerte este problema se solucionará en una actualización para el SDK.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top