обновление - This has been resolved в последней версии .NET API, так что каждый по-прежнему сталкивается с этой проблемой необходимо обновить до 1.1.1 version API.
Взял меня некоторое время, чтобы выяснить, что происходит, и я в конечном итоге того, чтобы использовать версию HTTP своих клиентов, а также Wireshark, чтобы посмотреть, что происходит, но это, кажется, что есть ошибка в AWS SDK для .NET/1.1.0.1. Когда я писал подобную функцию, используя AWS SDK for Java вещи доказавшие работать нормально, следующий небольшой блок этого кода:
AddPermissionRequest permissionRequest = new AddPermissionRequest()
.withActionNames("Publish")
.withAWSAccountIds("xxx")
.withLabel("PrincipleAllowControl")
.withTopicArn(resourceName);
client.addPermission(permissionRequest);
Наблюдая то, что происходит с помощью Wireshark оказался следующий, с некоторыми незначительными цензурирования и редактирования для ясность:
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
Как вы можете видеть, AWS SDK для .NET делает вызов, используя AWSAccountIds и ActionNames в отличие от AWSAccountId и ActionName, используемого AWS Java SDK, который объясняет сообщение об ошибке, который был возвращен.
На данный момент, похоже, не так много можно сделать, если не использовать команду в приложениях .NET и написать свой собственный код для совершения вызова. Если повезет, это будет исправлено в обновлении SDK.
Amazon прокомментировал, что это будет исправлено в предстоящем обновлении API: http://developer.amazonwebservices.com/connect/thread.jspa?threadID=53822&tstart=0&messageID=201514#201514 – rjzii