1

次のようなコードを使用して、 AWS SDK for .NET /1.1.0.1 を使用して Amazon SNS トピックにアクセス許可を追加しようとすると:

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

次のエラー メッセージが返されます。

<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> 
4

1 に答える 1

1

更新-これは.NET API の最新バージョンで解決されているため、この問題がまだ発生している場合は、API の1.1.1 バージョンにアップグレードする必要があります。


何が起こっているのかを理解するのにしばらく時間がかかり、最終的にクライアントの HTTP バージョンとWiresharkを使用して何が起こっているのかを確認する必要がありましたが、AWS SDK for .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 を介して何が起こっているかを見て、明確にするためにいくつかのマイナーな検閲と編集を加えて、次のことがわかりました。

ポスト/HTTP/1.1
コンテンツタイプ: application/x-www-form-urlencoded; 文字セット=utf-8
ユーザーエージェント: AWS Java SDK-1.0.14
ホスト: sns.us-east-1.amazonaws.com
コンテンツの長さ: 419

アクション=AddPermission&
SignatureMethod=HmacSHA256&
Label=PrincipleAllowControl&
ActionName.member.1=公開&
AWSAccessKeyId=xxx&
バージョン=2010-03-31&
AWSAccountId.member.1=xxx&
SignatureVersion=2&
TopicArn=arn%3Aaws%3Asns%3Aus-east-1%3A589983072084%3Axxx&
タイムスタンプ=2010-10-31T02%3A10%3A10.833Z&
Signature=Bq09wa2vF1levQGcQZWVaix3UG7Mxlq2JCk4znEYHAM%3D

ポスト/HTTP/1.1
ユーザーエージェント: AWS SDK for .NET/1.1.0.1
コンテンツタイプ: application/x-www-form-urlencoded; 文字セット=utf-8
ホスト: sns.us-east-1.amazonaws.com
コンテンツの長さ: 422

アクション=AddPermission&
TopicArn=arn%3Aaws%3Asns%3Aus-east-1%3A589983072084%3Axxx&
Label=PrincipleAllowControl&
AWSAccountIds.member.1=xxx&
ActionNames.member.1=公開&
AWSAccessKeyId=xxx&
SignatureVersion=2&
SignatureMethod=HmacSHA256&
タイムスタンプ=2010-10-30T21%3A18%3A39.753Z&
バージョン=2010-03-31&
Signature=m9OvL1v91eurDa5QYP9gwrd2crdtssHsDFonFny3frU%3D

ご覧のとおり、AWS SDK for .NET は、返されたエラー メッセージを説明する AWS Java SDK によって使用される AWSAccountId および ActionName とは対照的に、AWSAccountIds および ActionNames を使用して呼び出しを行っています。

今のところ、.NET アプリケーションでコマンドを使用せず、独自のコードを記述して呼び出しを行う以外に、できることはあまりないようです。運が良ければ、これは SDK の更新で修正される予定です。

于 2010-10-31T04:31:21.457 に答える