|
| 1 | +--- |
| 2 | +id: block-blob-full-vnet-integration |
| 3 | +title: Collect Logs from Azure Blob Storage with full vnet integration |
| 4 | +sidebar_label: Collect block blow with full vnet integration |
| 5 | +description: Configure a pipeline to ship logs from the Azure Blob Storage all throughout a vnet and then to an HTTP source on a hosted collector in Sumo Logic. |
| 6 | +--- |
| 7 | + |
| 8 | +Current solution to bring the block blob data from storage account in Sumo Logic creates a pipeline which assumes that the storage account being monitored will have public access enabled. If you just want your storage account behind a firewall follow the instruction [here](https://help.sumologic.com/docs/send-data/collect-from-other-data-sources/azure-blob-storage/block-blob/collect-logs/#step-3-enabling-vnet-integration-optional). But if you want that all of the components which are created through the arm template in azure, to be behind azure vnet (this includes event hub, azure functions, storage account, servicebus) then follow the below instructions : |
| 9 | + |
| 10 | +1. Download this template [https://github.com/SumoLogic/sumologic-azure-function/blob/azure\_premium\_template\_vnet\_integration/BlockBlobReader/src/blobreaderdeploywithPremiumPlan.json](https://github.com/SumoLogic/sumologic-azure-function/blob/azure_premium_template_vnet_integration/BlockBlobReader/src/blobreaderdeploywithPremiumPlan.json). It creates Service Bus also with Premium tier. |
| 11 | + |
| 12 | +2. Create a Virtual Network (for ex brvnet), subnet (brsubnet) and NSG (brnsg). |
| 13 | + |
| 14 | +Screenshot of the Virtual Network, Only Storage Service Endpoint is required in the same subnet which is associated with the functions and storage accounts. |
| 15 | +```block-blob-vnet-creation.png``` |
| 16 | + |
| 17 | +Screenshot of the NSG rules. Everything can be set to default |
| 18 | +```block-blob-NSG-rules.png``` |
| 19 | + |
| 20 | +3. Enable VNet integration in all the function apps by going to Function App \-\> Networking \-\> Outbound traffic configuration |
| 21 | +Screenshot of TaskConsumer Vnet integration of the Function. |
| 22 | +```block-blob-task-consumer-with-vnet-integration-outbound.png``` |
| 23 | +```block-blob-vnet-in-task-consumer.png``` |
| 24 | + |
| 25 | +4. You can restrict its access of Storage account containing flow logs to selected networks by going to Storage Account \-\> Networking. Subnet of storage account same as subnet configured in SUMOBRTaskConsumer and SUMOBRDLQProcessor VNe integration step. |
| 26 | + Below is the screenshot of the storage account where NSG flow logs are stored. |
| 27 | + Even the ip addresses are not required to be whitelisted in the firewall (this we will fix in our docs). |
| 28 | + |
| 29 | +```block-blob-sa-flow-logs-networking.png``` |
| 30 | + |
| 31 | +5. Storage account the one created by ARM template, you can restrict its access to selected networks by going to Storage Account \-\> Networking |
| 32 | +```block-blob-arm-template-sa-networking.png``` |
| 33 | +6. In all the three azure functions you can restrict inbound traffic by going to Function App \-\> Networking \-\> Inbound traffic configuration \-\> Access restrictions allowing only subnet created in step 1\. |
| 34 | + |
| 35 | + ```block-blob-task-consumer-with-vnet-integration-inbound.png``` |
| 36 | +7. To enable functions to access storage account created by arm template you need to do following steps |
| 37 | + 1. Select content storage in Configuration Routing and select Outbound internet traffic under Application routing in Azure Function Vnet integration for each function. |
| 38 | + |
| 39 | + ```block-blob-function-networking-config.png``` |
| 40 | + |
| 41 | + |
| 42 | + |
| 43 | + 2. Set WEBSITE\_CONTENTOVERVNET to 1 in environment variables for each function. |
| 44 | + |
| 45 | + ```block-setting-env-variable-function.png``` |
| 46 | + |
| 47 | + |
| 48 | +8. Event hub can restrict access to selected networks to the subnet created in step 1 and Allow trusted services to bypass this firewall set to Yes |
| 49 | + |
| 50 | + |
| 51 | +```block-blob-event-hub-networking.png``` |
| 52 | + |
| 53 | +9. The event grid needs to be secured with managed identity so that it can access Event hub, you also need to do the following steps: |
| 54 | +1. Enable system-assigned identity for the topic |
| 55 | +```block-blob-system-assigned-identity-topic.png``` |
| 56 | +2. Add the identity to the Azure Event Hubs Data Sender role on the Event Hubs namespace under Access Control \-\> Role assignments |
| 57 | +```block-blob-event-hub-namespace-add-identity.png``` |
| 58 | +3. Then, configure the event subscription that uses an event hub as an endpoint to use the system-assigned identity. |
| 59 | +```block-blob-event-hub-subscription-identity.png``` |
| 60 | + |
| 61 | +10. The service bus created by arm template is on standard tier \- which does not support vnet integration. Follow the below steps to create a new Service bus on premium tier (supports premium tier) |
| 62 | + 1. create new service bus namespace with premium plan \- |
| 63 | + 1. same resource group as old service bus, |
| 64 | + 2. same location |
| 65 | + 3. partition enabled |
| 66 | + 4. public access for starting (under networking tab) |
| 67 | + 2. Once servicebus namespace is created, go to entity \> queue and create a new queue by the name "**blobrangetaskqueue**", with the following parameters: |
| 68 | + Max queue size : 40 |
| 69 | + message size 1024 |
| 70 | + max delivery count 3 |
| 71 | + time to live 14 days |
| 72 | + Message lock duration 5 min |
| 73 | + enable dead letter queue |
| 74 | + 3. Update connection string to the below format \- in all three azure functions (Producer, consumer and DLQ). From newly created service bus on the premium tier under Shared access policies. Where you can select the [RootManageSharedAccessKey](https://portal.azure.com/#) and copy the primary key from it as the value of shared\_access\_key\_value: |
| 75 | + Endpoint=sb://**\<servicebus\_namespace\_name\>**.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=**\<shared\_access\_key\_value\>** |
| 76 | + 4. Go to newly created service bus \> networking. Change public network access from all networks to selected networks, and select the vnet and subnet previously created and used with other resources |
| 77 | + |
| 78 | + |
| 79 | +11. Enable Service endpoints for below services in your Vnet. |
| 80 | + |
| 81 | +```block-blob-service-endpoint-enabling-vnet.png``` |
| 82 | + |
| 83 | +12. Go to Function App \-\> BlobTaskConsumer \-\> Invocations you should be able to see below logs |
| 84 | + |
| 85 | +```block-blob-validation.png``` |
| 86 | + |
| 87 | + |
| 88 | +### References |
| 89 | + |
| 90 | +[https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-service-endpoints](https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-service-endpoints) |
| 91 | +[https://learn.microsoft.com/en-us/azure/azure-functions/configure-networking-how-to?tabs=portal\#3-enable-application-and-configuration-routing](https://learn.microsoft.com/en-us/azure/azure-functions/configure-networking-how-to?tabs=portal#3-enable-application-and-configuration-routing) |
| 92 | +[https://learn.microsoft.com/en-us/azure/app-service/configure-vnet-integration-routing\#content-share](https://learn.microsoft.com/en-us/azure/app-service/configure-vnet-integration-routing#content-share) |
| 93 | +[https://learn.microsoft.com/en-us/azure/azure-functions/functions-app-settings\#website\_contentovervnet](https://learn.microsoft.com/en-us/azure/azure-functions/functions-app-settings#website_contentovervnet) |
0 commit comments