Created
December 4, 2018 20:09
-
-
Save reisjr/918215c7528587aa8d41087536d6575a to your computer and use it in GitHub Desktop.
Provisioning an IoT Thing in Java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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