.net core Amazon Sage Maker:如何验证AWS SageMaker端点请求

.net core Amazon Sage Maker:如何验证AWS SageMaker端点请求,.net-core,amazon-sagemaker,.net Core,Amazon Sagemaker,我有一个需要从.Net核心客户端调用的aws sagemaker端点,我使用了处理sagemaker的aws SDK,并提供了所需的凭据,但它总是说: 我们计算的请求签名与您提供的签名不匹配。检查您的AWS秘密访问密钥和签名方法。有关详细信息,请参阅维修文档 var requestBody=“{'url':'”+“”+“}” var request=new Amazon.SageMakerRuntime.Model.InvokeEndpointRequest() { EndpointName=“

我有一个需要从.Net核心客户端调用的aws sagemaker端点,我使用了处理sagemaker的aws SDK,并提供了所需的凭据,但它总是说:

我们计算的请求签名与您提供的签名不匹配。检查您的AWS秘密访问密钥和签名方法。有关详细信息,请参阅维修文档

var requestBody=“{'url':'”+“”+“}”

var request=new Amazon.SageMakerRuntime.Model.InvokeEndpointRequest()
{
EndpointName=“CG-model-v1-endpoint”,
ContentType=“application/json;utf-8”,
Body=newmemoryStream(Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(requestBody)))
};
var awsClient=新的AmazonSManageMakerUnitimClient(awsAccessKeyId:“XXXX”,awsAccessKey:“XXX”,region:RegionEndpoint.EUCentral1);
尝试
{
var response=await awsClient.InvokeEndpointAsync(请求);
}
捕获(例外情况除外)
{
返回ApiResponse.Create(false);
}

我发现了错误,这仅仅是因为请求内容类型,它必须是application/json而不是application/json;utf-8

需要检查的事项:1)使用AWS CLI检查凭据是否实际有效,例如“AWS sagemaker列表端点”2)尝试在应用程序中调用相同的API 3)确保您没有交换API调用中的实际值(我一直都会遇到这种情况!)。更一般地说,我不建议将凭据存储在代码中,您最终会将它们推送到Github:)您应该使用应用程序配置或机密管理器。@JulienSimon当我从CLI尝试“aws sagemaker list endpoints”时,在收到响应后,凭据似乎正在工作。我发现了错误,这仅仅是因为请求内容类型,它必须是application/json而不是application/json;utf-8
        var request = new Amazon.SageMakerRuntime.Model.InvokeEndpointRequest()
        {
            EndpointName = "CG-model-v1-endpoint",
            ContentType = "application/json;utf-8",
            Body = new MemoryStream(Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(requestBody)))

        };


        var awsClient = new AmazonSageMakerRuntimeClient(awsAccessKeyId: "XXXX", awsSecretAccessKey: "XXX", region: RegionEndpoint.EUCentral1);

        try
        {
            var resposnse = await awsClient.InvokeEndpointAsync(request);

        }
        catch (Exception ex)
        {

            return ApiResponse<bool>.Create(false);
        }