Skip to content

Instantly share code, notes, and snippets.

@reisjr
Created December 4, 2018 20:09
Show Gist options
  • Save reisjr/918215c7528587aa8d41087536d6575a to your computer and use it in GitHub Desktop.
Save reisjr/918215c7528587aa8d41087536d6575a to your computer and use it in GitHub Desktop.
Provisioning an IoT Thing in Java
package org.reisjr.iot;
import java.util.Random;
import com.amazonaws.services.iot.AWSIot;
import com.amazonaws.services.iot.model.AttachPolicyRequest;
import com.amazonaws.services.iot.model.AttachThingPrincipalRequest;
import com.amazonaws.services.iot.model.CreateKeysAndCertificateRequest;
import com.amazonaws.services.iot.model.CreateKeysAndCertificateResult;
import com.amazonaws.services.iot.model.CreatePolicyRequest;
import com.amazonaws.services.iot.model.CreateThingRequest;
import com.amazonaws.services.iot.model.ListThingPrincipalsRequest;
import com.amazonaws.services.iot.model.ListThingPrincipalsResult;
public class IoTFactory {
/**
* @param args
* @param atpRequest
*/
public static void main(String[] args) {
System.out.println("Sample code");
// Region region = Region.getRegion(Regions.US_EAST_1);
AWSIot cli = com.amazonaws.services.iot.AWSIotClient.builder().build();
// listPrincipals(cli);
System.out.println("Creating key pair and certificate...");
CreateKeysAndCertificateRequest ckcRequest = new CreateKeysAndCertificateRequest();
CreateKeysAndCertificateResult ckcResult = cli.createKeysAndCertificate(ckcRequest);
// Save key pair and certificate securely
// ckcResult.getCertificatePem();
// ckcResult.getKeyPair();
String principal = ckcResult.getCertificateArn();
System.out.println(" Certificate ID: " + principal);
System.out.println("Certificate PEM:\n" + ckcResult.getCertificatePem());
System.out.println(" Private Key:\n" + ckcResult.getKeyPair().getPrivateKey());
System.out.println("Creating key pair and certificate... DONE");
CreateThingRequest thingReq = new CreateThingRequest();
String id = String.valueOf(Math.abs(new Random().nextInt()));
String thingName = "Thing-" + id;
System.out.println("Creating Thing '" + thingName + "'...");
thingReq.setThingName(thingName);
cli.createThing(thingReq);
System.out.println("Creating Thing '" + thingName + "'... DONE");
CreatePolicyRequest policyReq = new CreatePolicyRequest();
String policyName = "Policy-" + id;
System.out.println("Creating Policy '" + policyName + "'...");
policyReq.setPolicyName("Policy-" + id);
// Very permissive policy. DO NOT USE in production!
policyReq.setPolicyDocument("{\n" + " \"Version\": \"2012-10-17\",\n" + " \"Statement\": [\n" + " {\n"
+ " \"Effect\": \"Allow\",\n" + " \"Action\": [\n" + " \"iot:Publish\",\n"
+ " \"iot:Subscribe\",\n" + " \"iot:Connect\",\n" + " \"iot:Receive\"\n"
+ " ],\n" + " \"Resource\": [\n" + " \"*\"\n" + " ]\n" + " }\n" + " ]\n"
+ "}");
cli.createPolicy(policyReq);
System.out.println("Creating Policy '" + policyName + "'... DONE");
System.out.println("Attaching Policy to Certificate...");
AttachPolicyRequest attachPolicyRequest = new AttachPolicyRequest();
attachPolicyRequest.setPolicyName("Policy-" + id);
attachPolicyRequest.setTarget(principal);
cli.attachPolicy(attachPolicyRequest);
System.out.println("Attaching Policy to Certificate... DONE");
System.out.println("Attaching Thing to Certificate...");
AttachThingPrincipalRequest atpRequest = new AttachThingPrincipalRequest();
atpRequest.setPrincipal(principal);
atpRequest.setThingName(thingName);
cli.attachThingPrincipal(atpRequest);
System.out.println("Attaching Thing to Certificate... DONE");
}
private static void listPrincipals(AWSIot cli) {
ListThingPrincipalsRequest ltpReq = new ListThingPrincipalsRequest();
ltpReq.setThingName("RogueDevice-1214");
ListThingPrincipalsResult ltPrincipals = cli.listThingPrincipals(ltpReq);
for (String p : ltPrincipals.getPrincipals()) {
System.out.println(p);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment