如何对具有关联 IAM 角色的 AWS API 网关进行 Java 客户端调用

How do you make a Java client side call to an AWS API gateway, that has an IAM role accosiated to it

我正在寻找用于调用 AWS API 网关的 java 代码示例。

我可以调用不需要 IAM 验证的 AWS API 网关,但我发现很难找到如何构建 URL 的清晰示例。

Secret key和Secret Key ID如何正确传入?我是否必须完成根据签名版本 4 协议对 URL 进行编码所需的所有步骤,或者我是否可以只将密钥和密钥 ID 包含在 URL 中?

是否有使用 AWS SDK 调用 AWS API 网关的客户端程序代码示例,使用 Java 编写?就像在通用调用中一样,您可以在其中传递 URL 和其他需要的参数?

我尝试使用由 AWS API 网关生成的 AWS Java SDK。我在使用生成的 SDK 时遇到问题,任何教程将不胜感激。我找不到有关如何使用构建的 SDK 调用 API 的文档。我已经使用 MAVEN 构建了 SDK。我想,我正在尝试按照本教程进行操作...

http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-call-apigateway-generated-java-sdk.html

...但我不确定我是否正确安装了 SDK,而且我看不到密钥和密钥 ID 传递到 API 调用的位置...

您应该能够使用凭据初始化 SDK 客户端并传入凭据提供程序,例如,

BasicAWSCredentials awsCreds = new BasicAWSCredentials("access_key_id", "secret_key_id");
SimpleCalcSdk sdkClient = SimpleCalcSdk.builder()
                         .withCredentials(awsCreds)
                         .build();
You should sign your request and credentials as per AWS Signature V4. 

签名示例代码可用@ https://s3.amazonaws.com/aws-java-sdk/samples/AWSS3SigV4JavaSamples.jar

Sample code : 
URL url = new URL("https://XXXXXXX.execute-api.us-west-2.amazonaws.com/dev/pets");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
        conn.setRequestProperty("host", "XXXXXXXXXX.execute-api.us-west-2.amazonaws.com");


         Map<String, String> headers = new HashMap<String, String>();
            headers.put("x-amz-content-sha256", AWS4SignerBase.EMPTY_BODY_SHA256);
            headers.put("X-Amz-Security-Token", "XXXXXX+XXXXXXXXXXXXXXX/5N+XXXXXXXXX/XXXXX/XXXXXX/XXXXXXXX/XXXXXXXX=");
            AWS4SignerForAuthorizationHeader signer = new AWS4SignerForAuthorizationHeader(
                    url, "GET", "execute-api", "us-west-2");
            String authorization = signer.computeSignature(headers, 
                                                           null, // no query parameters
                                                           AWS4SignerBase.EMPTY_BODY_SHA256, 
                                                           "XXXXXX", 
                                                               "S+XXXXXX+XXXXXX/XXXX");



            headers.put("Authorization", authorization);
            String response = HttpUtils.invokeHttpRequest(url, "GET", headers, null);