in dynamodb-api/src/main/java/com/awssamples/dynamodbapi/SqsToIotCoreStack.java [393:422]
private Role buildMoveFromSqsToDynamoDbRole(String queueArn, Table table) {
PolicyStatement sqsPolicyStatement = LambdaPolicies.getMinimalLambdaSqsQueueEventSourceMappingTargetPolicy(queueArn);
PolicyStatementProps dynamoDbPolicyStatementProps = PolicyStatementProps.builder()
.effect(Effect.ALLOW)
.resources(List.of(table.getTableArn()).asJava())
.actions(List.of(SharedPermissions.DYNAMODB_PUT_ITEM_PERMISSION).asJava())
.build();
PolicyStatement dynamoDbPolicyStatement = new PolicyStatement(dynamoDbPolicyStatementProps);
PolicyStatement iotPolicyStatement = getPublishToTopicPrefixPolicyStatement(this, "notification");
PolicyDocumentProps policyDocumentProps = PolicyDocumentProps.builder()
.statements(
List.of(sqsPolicyStatement,
minimalCloudWatchEventsLoggingPolicy,
dynamoDbPolicyStatement,
iotPolicyStatement).asJava())
.build();
PolicyDocument policyDocument = new PolicyDocument(policyDocumentProps);
Map<String, PolicyDocument> policyDocuments = HashMap.of("root", policyDocument);
RoleProps moveFromSqsToDynamoDbRoleProps = RoleProps.builder()
.assumedBy(LambdaPolicies.LAMBDA_SERVICE_PRINCIPAL)
.inlinePolicies(policyDocuments.toJavaMap())
.build();
return new Role(this, "MoveFromSqsToDynamoDbRole", moveFromSqsToDynamoDbRoleProps);
}