.NETライブラリを使用するときにAmazon SNSトピックにアクセス許可を追加するときのエラー
-
27-09-2019 - |
質問
を使用してAmazon SNSトピックにアクセス許可を追加しようとしたとき .NETのAWS SDK/1.1.0.1以下と同様のコードを使用してください。
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>
解決
アップデート - これは解決されました .NET APIの最新バージョンでは、この問題に遭遇している人は誰でもアップグレードする必要があります。 1.1.1バージョン APIの。
何が起こっているのかを理解するのにしばらく時間がかかり、クライアントのHTTPバージョンを使用する必要がありました。 Wireshark 何が起こっているのかを見るためには、.NET/1.1.0.1のAWS SDKにバグがあるように見えます。を使用して同様の関数を書いたとき JavaのAWS SDK 物事は正常に機能することが証明されました、以下はそのコードの小さなブロックです。
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
ご覧のとおり、.NETのAWS SDKは、返されたエラーメッセージを説明するAWS Java SDKが使用するAWSACCOUNTIDおよびACTIONNAMEとは対照的に、AWSACCOUNTIDとActionNamesを使用して電話をかけています。
今のところ、.NETアプリケーションでコマンドを使用せず、電話をかけるために独自のコードを作成する以外に、それについてできることはあまりないようです。運が良ければ、これはSDKの更新で修正されます。
所属していません StackOverflow