예제 #1
0
        public IIoTKeyVaultClient(
            AuthenticationCallback authenticationCallback,
            VaultInner keyVault
            )
        {
            var kvAuthenticationCallback = new KeyVaultClient.AuthenticationCallback(
                async(authority, resource, scope) => {
                return(await authenticationCallback(authority, resource, scope));
            }
                );

            _keyVaultClient = new KeyVaultClient(kvAuthenticationCallback);
            _keyVault       = keyVault;
        }
        public async Task RunAsync()
        {
            // Generate a random name for a new vault
            String vaultName = Util.generateRandomVaultId();

            // Set up credentials to access management plane to set up example key vault
            AzureCredentials credentials = new AzureCredentialsFactory().FromServicePrincipal(
                settings.ClientID,
                settings.ClientSecret,
                settings.TenantID,
                AzureEnvironment.AzureGlobalCloud
                );


            // Ensure that our sample resource group exists.
            Console.WriteLine("Creating sample resource group");
            ResourceManagementClient resourceMgmtClient = new ResourceManagementClient(credentials);

            resourceMgmtClient.SubscriptionId = settings.SubscriptionID;

            await resourceMgmtClient.ResourceGroups.CreateOrUpdateAsync(settings.ResourceGroupName, new ResourceGroupInner(settings.AzureLocation));

            // Create the sample key vault.
            Console.WriteLine("Creating sample Key Vault - " + vaultName);

            // Set up the params for the API call
            VaultCreateOrUpdateParametersInner createParams = new VaultCreateOrUpdateParametersInner(
                settings.AzureLocation,
                new VaultProperties(
                    Guid.Parse(settings.TenantID),
                    new Microsoft.Azure.Management.KeyVault.Fluent.Models.Sku(SkuName.Standard),

                    // Create an access policy granting all secret permissions to our sample's service principal
                    new[] { new AccessPolicyEntry(Guid.Parse(settings.TenantID), settings.ClientOID, new Permissions(null, new[] { "all" })) }
                    )
                );

            KeyVaultManagementClient kvMgmtClient = new KeyVaultManagementClient(credentials);

            kvMgmtClient.SubscriptionId = settings.SubscriptionID;

            VaultInner vault = await kvMgmtClient.Vaults.CreateOrUpdateAsync(settings.ResourceGroupName, vaultName, createParams);

            // Now demo authentication to the vault using ADAL
            // Add a delay to wait for KV DNS record to be created. See: https://github.com/Azure/azure-sdk-for-node/pull/1938
            System.Threading.Thread.Sleep(15000);

            await authUsingADALCallbackAsync(vault.Properties.VaultUri);
        }
        private async Task <VaultInner> CreateOrRetrieveVaultAsync(string resourceGroupName, string vaultName, bool enableSoftDelete, bool enablePurgeProtection)
        {
            VaultInner vault = null;

            try
            {
                // check whether the vault exists
                Console.Write("Checking the existence of the vault...");
                vault = await ManagementClient.Vaults.GetAsync(resourceGroupName, vaultName).ConfigureAwait(false);

                Console.WriteLine("done.");
            }
            catch (CloudException ce)
            {
                if (ce.Response.StatusCode != HttpStatusCode.NotFound)
                {
                    Console.WriteLine("Unexpected exception encountered retrieving the vault: {0}", ce.Message);
                    throw;
                }

                // create a new vault
                var vaultParameters = CreateVaultParameters(resourceGroupName, vaultName, context.PreferredLocation, enableSoftDelete, enablePurgeProtection);

                // create new soft-delete-enabled vault
                Console.Write("Vault does not exist; creating...");
                vault = await ManagementClient.Vaults.CreateOrUpdateAsync(resourceGroupName, vaultName, vaultParameters).ConfigureAwait(false);

                Console.WriteLine("done.");

                // wait for the DNS record to propagate; verify properties
                Console.Write("Waiting for DNS propagation..");
                Thread.Sleep(10 * 1000);
                Console.WriteLine("done.");

                Console.Write("Retrieving newly created vault...");
                vault = await ManagementClient.Vaults.GetAsync(resourceGroupName, vaultName).ConfigureAwait(false);

                Console.WriteLine("done.");
            }

            return(vault);
        }
예제 #4
0
        /// <summary>
        /// Constructor of IIoT-specific KeyVault client.
        /// </summary>
        /// <param name="authenticationCallback"></param>
        /// <param name="keyVault"></param>
        public IIoTKeyVaultClient(
            AuthenticationCallback authenticationCallback,
            VaultInner keyVault
            )
        {
            if (authenticationCallback is null)
            {
                throw new ArgumentNullException(nameof(authenticationCallback));
            }
            if (keyVault is null)
            {
                throw new ArgumentNullException(nameof(keyVault));
            }

            var kvAuthenticationCallback = new KeyVaultClient.AuthenticationCallback(
                async(authority, resource, scope) => {
                return(await authenticationCallback(authority, resource, scope));
            }
                );

            _keyVaultClient = new KeyVaultClient(kvAuthenticationCallback);
            _keyVault       = keyVault;
        }
예제 #5
0
        public IIoTEnvironment(
            AzureEnvironment azureEnvironment,
            Guid tenantId,
            // IoT Hub
            IotHubDescription iotHub,
            string iotHubOwnerConnectionString,
            string iotHubEventHubEventsEndpointName,
            EventHubConsumerGroupInfo iotHubEventHubConsumerGroupEvents,
            EventHubConsumerGroupInfo iotHubEventHubConsumerGroupTelemetry,
            EventHubConsumerGroupInfo iotHubEventHubConsumerGroupTunnel,
            EventHubConsumerGroupInfo iotHubEventHubConsumerGroupOnboarding,
            // Cosmos DB
            string cosmosDBAccountConnectionString,
            // Storage Account
            string storageAccountConectionString,
            string storageAccountContainerDataprotection,
            // ADLS Gen2 Storage Account
            string adlsAccount,
            string adlsAccountKey,
            string adlsEndpointSuffix,
            string adlsConectionString,
            string adlsContainerCdm,
            string adlsContainerCdmRootFolder,
            // Event Hub Namespace
            EventhubInner eventHub,
            string eventHubConnectionString,
            ConsumerGroupInner telemetryCdm,
            ConsumerGroupInner telemetryUx,
            // Service Bus
            string serviceBusConnectionString,
            // SignalR
            string signalRConnectionString,
            string signalRServiceMode,
            // Key Vault
            VaultInner keyVault,
            string dataprotectionKeyName,
            // Application Insights
            ApplicationInsightsComponent applicationInsightsComponent,
            // Log Analytics Workspace
            Workspace workspace,
            string workspaceKey,
            // Service URL
            string serviceURL,
            // App Registrations
            Application serviceApplication,
            string serviceApplicationSecret,
            Application clientApplication,
            string clientApplicationSecret

            )
        {
            // IoT Hub
            PCS_IOTHUB_CONNSTRING       = iotHubOwnerConnectionString;
            PCS_IOTHUB_EVENTHUBENDPOINT = iotHub.Properties.EventHubEndpoints[iotHubEventHubEventsEndpointName].Endpoint;
            PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_EVENTS     = iotHubEventHubConsumerGroupEvents.Name;
            PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_TELEMETRY  = iotHubEventHubConsumerGroupTelemetry.Name;
            PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_TUNNEL     = iotHubEventHubConsumerGroupTunnel.Name;
            PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_ONBOARDING = iotHubEventHubConsumerGroupOnboarding.Name;

            // Cosmos DB
            PCS_COSMOSDB_CONNSTRING = cosmosDBAccountConnectionString;

            // Storage Account
            PCS_STORAGE_CONNSTRING = storageAccountConectionString;
            PCS_STORAGE_CONTAINER_DATAPROTECTION = storageAccountContainerDataprotection;

            // ADLS Gen2 Storage Account
            // NOTE: PCS_ADLSG2_ACCOUNT, PCS_ADLSG2_ACCOUNT_KEY and PCS_ADLSG2_ENDPOINTSUFFIX are required
            // for <2.8.5 version of components as processing of PCS_ADLSG2_CONNSTRING is not present there.
            PCS_ADLSG2_ACCOUNT                  = adlsAccount;
            PCS_ADLSG2_ACCOUNT_KEY              = adlsAccountKey;
            PCS_ADLSG2_ENDPOINTSUFFIX           = adlsEndpointSuffix;
            PCS_ADLSG2_CONNSTRING               = adlsConectionString;
            PCS_ADLSG2_CONTAINER_CDM            = adlsContainerCdm;
            PCS_ADLSG2_CONTAINER_CDM_ROOTFOLDER = adlsContainerCdmRootFolder;

            // Event Hub Namespace
            PCS_EVENTHUB_CONNSTRING = eventHubConnectionString;
            PCS_EVENTHUB_NAME       = eventHub.Name;
            PCS_EVENTHUB_CONSUMERGROUP_TELEMETRY_CDM = telemetryCdm.Name;
            PCS_EVENTHUB_CONSUMERGROUP_TELEMETRY_UX  = telemetryUx.Name;

            // Service Bus
            PCS_SERVICEBUS_CONNSTRING = serviceBusConnectionString;

            // Key Vault
            PCS_KEYVAULT_URL = keyVault.Properties.VaultUri;
            PCS_KEYVAULT_KEY_DATAPROTECTION = dataprotectionKeyName;
            PCS_KEYVAULT_APPID  = serviceApplication.AppId;
            PCS_KEYVAULT_SECRET = serviceApplicationSecret;

            // Application Insights
            PCS_APPINSIGHTS_INSTRUMENTATIONKEY = applicationInsightsComponent.InstrumentationKey;

            // Log Analytics Workspace
            PCS_WORKSPACE_ID  = workspace.Id;
            PCS_WORKSPACE_KEY = workspaceKey;

            // Service URLs
            PCS_SERVICE_URL = serviceURL;

            // Service URLs that will be consumed by microservices.
            PCS_TWIN_REGISTRY_URL     = $"{serviceURL}/registry/";
            PCS_TWIN_SERVICE_URL      = $"{serviceURL}/twin/";
            PCS_HISTORY_SERVICE_URL   = $"{serviceURL}/history/";
            PCS_VAULT_SERVICE_URL     = $"{serviceURL}/vault/";
            PCS_PUBLISHER_SERVICE_URL = $"{serviceURL}/publisher/";
            PCS_PUBLISHER_ORCHESTRATOR_SERVICE_URL = $"{serviceURL}/edge/publisher/";
            PCS_EVENTS_SERVICE_URL = $"{serviceURL}/events/";

            // SignalR
            PCS_SIGNALR_CONNSTRING = signalRConnectionString;
            PCS_SIGNALR_MODE       = signalRServiceMode;

            // Authentication
            PCS_AUTH_REQUIRED = $"{true}";
            PCS_AUTH_TENANT   = $"{tenantId}";
            // ToDo: Check value of PCS_AUTH_INSTANCE.
            //PCS_AUTH_INSTANCE = "https://login.microsoftonline.com/";
            PCS_AUTH_INSTANCE          = azureEnvironment.AuthenticationEndpoint;
            PCS_AUTH_ISSUER            = $"https://sts.windows.net/{tenantId}/";
            PCS_AUTH_HTTPSREDIRECTPORT = $"{0}";
            PCS_AUTH_AUDIENCE          = serviceApplication.IdentifierUris.First();
            PCS_AUTH_CLIENT_APPID      = clientApplication.AppId;
            PCS_AUTH_CLIENT_SECRET     = clientApplicationSecret;
            PCS_AUTH_SERVICE_APPID     = serviceApplication.AppId;
            PCS_AUTH_SERVICE_SECRET    = serviceApplicationSecret;

            // CORS Whitelist
            PCS_CORS_WHITELIST = "*";

            // Service URL path bases
            PCS_TWIN_REGISTRY_SERVICE_PATH_BASE          = "/registry";
            PCS_TWIN_SERVICE_PATH_BASE                   = "/twin";
            PCS_HISTORY_SERVICE_PATH_BASE                = "/history";
            PCS_GATEWAY_SERVICE_PATH_BASE                = "/ua";
            PCS_VAULT_SERVICE_PATH_BASE                  = "/vault";
            PCS_PUBLISHER_SERVICE_PATH_BASE              = "/publisher";
            PCS_PUBLISHER_ORCHESTRATOR_SERVICE_PATH_BASE = "/edge/publisher";
            PCS_EVENTS_SERVICE_PATH_BASE                 = "/events";
            PCS_FRONTEND_APP_SERVICE_PATH_BASE           = "/frontend";

            // AspNetCore
            ASPNETCORE_FORWARDEDHEADERS_ENABLED      = $"{true}";
            ASPNETCORE_FORWARDEDHEADERS_FORWARDLIMIT = $"{1}";

            // OpenAPI
            PCS_OPENAPI_SERVER_HOST = "";

            Dict = new Dictionary <string, string> {
                // IoT Hub
                { $"{nameof(PCS_IOTHUB_CONNSTRING)}", PCS_IOTHUB_CONNSTRING },
                { $"{nameof(PCS_IOTHUB_EVENTHUBENDPOINT)}", PCS_IOTHUB_EVENTHUBENDPOINT },
                { $"{nameof(PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_EVENTS)}", PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_EVENTS },
                { $"{nameof(PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_TELEMETRY)}", PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_TELEMETRY },
                { $"{nameof(PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_TUNNEL)}", PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_TUNNEL },
                { $"{nameof(PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_ONBOARDING)}", PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_ONBOARDING },

                // Cosmos DB
                { $"{nameof(PCS_COSMOSDB_CONNSTRING)}", PCS_COSMOSDB_CONNSTRING },

                // Storage Account
                { $"{nameof(PCS_STORAGE_CONNSTRING)}", PCS_STORAGE_CONNSTRING },
                { $"{nameof(PCS_STORAGE_CONTAINER_DATAPROTECTION)}", PCS_STORAGE_CONTAINER_DATAPROTECTION },

                // ADLS Gen2 Storage Account
                { $"{nameof(PCS_ADLSG2_ACCOUNT)}", PCS_ADLSG2_ACCOUNT },
                { $"{nameof(PCS_ADLSG2_ACCOUNT_KEY)}", PCS_ADLSG2_ACCOUNT_KEY },
                { $"{nameof(PCS_ADLSG2_ENDPOINTSUFFIX)}", PCS_ADLSG2_ENDPOINTSUFFIX },
                { $"{nameof(PCS_ADLSG2_CONNSTRING)}", PCS_ADLSG2_CONNSTRING },
                { $"{nameof(PCS_ADLSG2_CONTAINER_CDM)}", PCS_ADLSG2_CONTAINER_CDM },
                { $"{nameof(PCS_ADLSG2_CONTAINER_CDM_ROOTFOLDER)}", PCS_ADLSG2_CONTAINER_CDM_ROOTFOLDER },

                // Event Hub Namespace
                { $"{nameof(PCS_EVENTHUB_CONNSTRING)}", PCS_EVENTHUB_CONNSTRING },
                { $"{nameof(PCS_EVENTHUB_NAME)}", PCS_EVENTHUB_NAME },
                { $"{nameof(PCS_EVENTHUB_CONSUMERGROUP_TELEMETRY_CDM)}", PCS_EVENTHUB_CONSUMERGROUP_TELEMETRY_CDM },
                { $"{nameof(PCS_EVENTHUB_CONSUMERGROUP_TELEMETRY_UX)}", PCS_EVENTHUB_CONSUMERGROUP_TELEMETRY_UX },

                // Service Bus
                { $"{nameof(PCS_SERVICEBUS_CONNSTRING)}", PCS_SERVICEBUS_CONNSTRING },

                // Key Vault
                { $"{nameof(PCS_KEYVAULT_URL)}", PCS_KEYVAULT_URL },
                { $"{nameof(PCS_KEYVAULT_KEY_DATAPROTECTION)}", PCS_KEYVAULT_KEY_DATAPROTECTION },
                { $"{nameof(PCS_KEYVAULT_APPID)}", PCS_KEYVAULT_APPID },
                { $"{nameof(PCS_KEYVAULT_SECRET)}", PCS_KEYVAULT_SECRET },

                // Application Insights
                { $"{nameof(PCS_APPINSIGHTS_INSTRUMENTATIONKEY)}", PCS_APPINSIGHTS_INSTRUMENTATIONKEY },

                // Log Analytics Workspace
                { $"{nameof(PCS_WORKSPACE_ID)}", PCS_WORKSPACE_ID },
                { $"{nameof(PCS_WORKSPACE_KEY)}", PCS_WORKSPACE_KEY },

                // Service URLs
                { $"{nameof(PCS_SERVICE_URL)}", PCS_SERVICE_URL },

                // Service URLs that will be consumed by microservices.
                { $"{nameof(PCS_TWIN_REGISTRY_URL)}", PCS_TWIN_REGISTRY_URL },
                { $"{nameof(PCS_TWIN_SERVICE_URL)}", PCS_TWIN_SERVICE_URL },
                { $"{nameof(PCS_HISTORY_SERVICE_URL)}", PCS_HISTORY_SERVICE_URL },
                { $"{nameof(PCS_VAULT_SERVICE_URL)}", PCS_VAULT_SERVICE_URL },
                { $"{nameof(PCS_PUBLISHER_SERVICE_URL)}", PCS_PUBLISHER_SERVICE_URL },
                { $"{nameof(PCS_PUBLISHER_ORCHESTRATOR_SERVICE_URL)}", PCS_PUBLISHER_ORCHESTRATOR_SERVICE_URL },
                { $"{nameof(PCS_EVENTS_SERVICE_URL)}", PCS_EVENTS_SERVICE_URL },

                // SignalR
                { $"{nameof(PCS_SIGNALR_CONNSTRING)}", PCS_SIGNALR_CONNSTRING },
                { $"{nameof(PCS_SIGNALR_MODE)}", PCS_SIGNALR_MODE },

                // Authentication
                { $"{nameof(PCS_AUTH_REQUIRED)}", PCS_AUTH_REQUIRED },
                { $"{nameof(PCS_AUTH_TENANT)}", PCS_AUTH_TENANT },
                { $"{nameof(PCS_AUTH_INSTANCE)}", PCS_AUTH_INSTANCE },
                { $"{nameof(PCS_AUTH_ISSUER)}", PCS_AUTH_ISSUER },
                { $"{nameof(PCS_AUTH_HTTPSREDIRECTPORT)}", PCS_AUTH_HTTPSREDIRECTPORT },
                { $"{nameof(PCS_AUTH_AUDIENCE)}", PCS_AUTH_AUDIENCE },
                { $"{nameof(PCS_AUTH_CLIENT_APPID)}", PCS_AUTH_CLIENT_APPID },
                { $"{nameof(PCS_AUTH_CLIENT_SECRET)}", PCS_AUTH_CLIENT_SECRET },
                { $"{nameof(PCS_AUTH_SERVICE_APPID)}", PCS_AUTH_SERVICE_APPID },
                { $"{nameof(PCS_AUTH_SERVICE_SECRET)}", PCS_AUTH_SERVICE_SECRET },

                // CORS Whitelist
                { $"{nameof(PCS_CORS_WHITELIST)}", PCS_CORS_WHITELIST },

                // Service URL path bases
                { $"{nameof(PCS_TWIN_REGISTRY_SERVICE_PATH_BASE)}", PCS_TWIN_REGISTRY_SERVICE_PATH_BASE },
                { $"{nameof(PCS_TWIN_SERVICE_PATH_BASE)}", PCS_TWIN_SERVICE_PATH_BASE },
                { $"{nameof(PCS_HISTORY_SERVICE_PATH_BASE)}", PCS_HISTORY_SERVICE_PATH_BASE },
                { $"{nameof(PCS_GATEWAY_SERVICE_PATH_BASE)}", PCS_GATEWAY_SERVICE_PATH_BASE },
                { $"{nameof(PCS_VAULT_SERVICE_PATH_BASE)}", PCS_VAULT_SERVICE_PATH_BASE },
                { $"{nameof(PCS_PUBLISHER_SERVICE_PATH_BASE)}", PCS_PUBLISHER_SERVICE_PATH_BASE },
                { $"{nameof(PCS_PUBLISHER_ORCHESTRATOR_SERVICE_PATH_BASE)}", PCS_PUBLISHER_ORCHESTRATOR_SERVICE_PATH_BASE },
                { $"{nameof(PCS_EVENTS_SERVICE_PATH_BASE)}", PCS_EVENTS_SERVICE_PATH_BASE },
                { $"{nameof(PCS_FRONTEND_APP_SERVICE_PATH_BASE)}", PCS_FRONTEND_APP_SERVICE_PATH_BASE },

                // AspNetCore
                { $"{nameof(ASPNETCORE_FORWARDEDHEADERS_ENABLED)}", ASPNETCORE_FORWARDEDHEADERS_ENABLED },
                { $"{nameof(ASPNETCORE_FORWARDEDHEADERS_FORWARDLIMIT)}", ASPNETCORE_FORWARDEDHEADERS_FORWARDLIMIT },

                // OpenAPI
                { $"{nameof(PCS_OPENAPI_SERVER_HOST)}", PCS_OPENAPI_SERVER_HOST },
            };
        }
예제 #6
0
        public IIoTEnvironment(
            AzureEnvironment azureEnvironment,
            Guid tenantId,
            IotHubDescription iotHub,
            string iotHubOwnerConnectionString,
            string iotHubOnboardingConsumerGroupName,
            int iotHubEventHubEndpointsPartitionsCount,
            string cosmosDBAccountConnectionString,
            StorageAccountInner storageAccount,
            StorageAccountKey storageAccountKey,
            EventhubInner eventHub,
            string eventHubConnectionString,
            string serviceBusConnectionString,
            string signalRConnectionString,
            VaultInner keyVault,
            Workspace operationalInsightsWorkspace,
            ApplicationInsightsComponent applicationInsightsComponent,
            SiteInner webSite,
            Application serviceApplication,
            Application clientApplication

            )
        {
            _HUB_CS = iotHubOwnerConnectionString;

            PCS_IOTHUB_CONNSTRING = iotHubOwnerConnectionString;                        // duplicate
            PCS_STORAGEADAPTER_DOCUMENTDB_CONNSTRING = cosmosDBAccountConnectionString;
            PCS_TELEMETRY_DOCUMENTDB_CONNSTRING      = cosmosDBAccountConnectionString; // duplicate
            PCS_TELEMETRYAGENT_DOCUMENTDB_CONNSTRING = cosmosDBAccountConnectionString; // duplicate

            PCS_IOTHUBREACT_ACCESS_CONNSTRING         = iotHubOwnerConnectionString;    // duplicate
            PCS_IOTHUBREACT_HUB_NAME                  = iotHub.Name;
            PCS_IOTHUBREACT_HUB_ENDPOINT              = iotHub.Properties.EventHubEndpoints["events"].Endpoint;
            PCS_IOTHUBREACT_HUB_CONSUMERGROUP         = iotHubOnboardingConsumerGroupName;
            PCS_IOTHUBREACT_HUB_PARTITIONS            = $"{iotHubEventHubEndpointsPartitionsCount}";
            PCS_IOTHUBREACT_AZUREBLOB_ACCOUNT         = storageAccount.Name;
            PCS_IOTHUBREACT_AZUREBLOB_KEY             = storageAccountKey.Value;
            PCS_IOTHUBREACT_AZUREBLOB_ENDPOINT_SUFFIX = azureEnvironment.StorageEndpointSuffix;

            PCS_ASA_DATA_AZUREBLOB_ACCOUNT         = PCS_IOTHUBREACT_AZUREBLOB_ACCOUNT;         // duplicate
            PCS_ASA_DATA_AZUREBLOB_KEY             = PCS_IOTHUBREACT_AZUREBLOB_KEY;             // duplicate
            PCS_ASA_DATA_AZUREBLOB_ENDPOINT_SUFFIX = PCS_IOTHUBREACT_AZUREBLOB_ENDPOINT_SUFFIX; // duplicate

            PCS_EVENTHUB_CONNSTRING            = eventHubConnectionString;
            PCS_EVENTHUB_NAME                  = eventHub.Name;
            PCS_SERVICEBUS_CONNSTRING          = serviceBusConnectionString;
            PCS_KEYVAULT_URL                   = keyVault.Properties.VaultUri;
            PCS_WORKSPACE_NAME                 = operationalInsightsWorkspace.Name;
            PCS_APPINSIGHTS_NAME               = applicationInsightsComponent.Name;
            PCS_APPINSIGHTS_INSTRUMENTATIONKEY = applicationInsightsComponent.InstrumentationKey;
            PCS_SERVICE_URL        = $"https://{webSite.HostNames[0]}";
            PCS_SIGNALR_CONNSTRING = signalRConnectionString;

            PCS_AUTH_HTTPSREDIRECTPORT = "0";
            PCS_AUTH_REQUIRED          = "true";
            PCS_AUTH_AUDIENCE          = serviceApplication.IdentifierUris.First();
            PCS_AUTH_ISSUER            = $"https://sts.windows.net/{tenantId.ToString()}/";

            PCS_WEBUI_AUTH_AAD_APPID     = clientApplication.AppId;
            PCS_WEBUI_AUTH_AAD_AUTHORITY = azureEnvironment.AuthenticationEndpoint;
            PCS_WEBUI_AUTH_AAD_TENANT    = tenantId.ToString();

            PCS_CORS_WHITELIST = "*";

            REACT_APP_PCS_AUTH_REQUIRED            = PCS_AUTH_REQUIRED;            // duplicate
            REACT_APP_PCS_AUTH_AUDIENCE            = PCS_AUTH_AUDIENCE;            // duplicate
            REACT_APP_PCS_AUTH_ISSUER              = PCS_AUTH_ISSUER;              // duplicate
            REACT_APP_PCS_WEBUI_AUTH_AAD_APPID     = PCS_WEBUI_AUTH_AAD_APPID;     // duplicate
            REACT_APP_PCS_WEBUI_AUTH_AAD_AUTHORITY = PCS_WEBUI_AUTH_AAD_AUTHORITY; // duplicate
            REACT_APP_PCS_WEBUI_AUTH_AAD_TENANT    = PCS_WEBUI_AUTH_AAD_TENANT;    // duplicate

            Dict = new Dictionary <string, string> {
                { "_HUB_CS", _HUB_CS },
                { "PCS_IOTHUB_CONNSTRING", PCS_IOTHUB_CONNSTRING },
                { "PCS_STORAGEADAPTER_DOCUMENTDB_CONNSTRING", PCS_STORAGEADAPTER_DOCUMENTDB_CONNSTRING },
                { "PCS_TELEMETRY_DOCUMENTDB_CONNSTRING", PCS_TELEMETRY_DOCUMENTDB_CONNSTRING },
                { "PCS_TELEMETRYAGENT_DOCUMENTDB_CONNSTRING", PCS_TELEMETRYAGENT_DOCUMENTDB_CONNSTRING },
                { "PCS_IOTHUBREACT_ACCESS_CONNSTRING", PCS_IOTHUBREACT_ACCESS_CONNSTRING },
                { "PCS_IOTHUBREACT_HUB_NAME", PCS_IOTHUBREACT_HUB_NAME },
                { "PCS_IOTHUBREACT_HUB_ENDPOINT", PCS_IOTHUBREACT_HUB_ENDPOINT },
                { "PCS_IOTHUBREACT_HUB_CONSUMERGROUP", PCS_IOTHUBREACT_HUB_CONSUMERGROUP },
                { "PCS_IOTHUBREACT_HUB_PARTITIONS", PCS_IOTHUBREACT_HUB_PARTITIONS },
                { "PCS_IOTHUBREACT_AZUREBLOB_ACCOUNT", PCS_IOTHUBREACT_AZUREBLOB_ACCOUNT },
                { "PCS_IOTHUBREACT_AZUREBLOB_KEY", PCS_IOTHUBREACT_AZUREBLOB_KEY },
                { "PCS_IOTHUBREACT_AZUREBLOB_ENDPOINT_SUFFIX", PCS_IOTHUBREACT_AZUREBLOB_ENDPOINT_SUFFIX },
                { "PCS_ASA_DATA_AZUREBLOB_ACCOUNT", PCS_ASA_DATA_AZUREBLOB_ACCOUNT },
                { "PCS_ASA_DATA_AZUREBLOB_KEY", PCS_ASA_DATA_AZUREBLOB_KEY },
                { "PCS_ASA_DATA_AZUREBLOB_ENDPOINT_SUFFIX", PCS_ASA_DATA_AZUREBLOB_ENDPOINT_SUFFIX },
                { "PCS_EVENTHUB_CONNSTRING", PCS_EVENTHUB_CONNSTRING },
                { "PCS_EVENTHUB_NAME", PCS_EVENTHUB_NAME },
                { "PCS_SERVICEBUS_CONNSTRING", PCS_SERVICEBUS_CONNSTRING },
                { "PCS_KEYVAULT_URL", PCS_KEYVAULT_URL },
                { "PCS_WORKSPACE_NAME", PCS_WORKSPACE_NAME },
                { "PCS_APPINSIGHTS_NAME", PCS_APPINSIGHTS_NAME },
                { "PCS_APPINSIGHTS_INSTRUMENTATIONKEY", PCS_APPINSIGHTS_INSTRUMENTATIONKEY },
                { "PCS_SERVICE_URL", PCS_SERVICE_URL },
                { "PCS_SIGNALR_CONNSTRING", PCS_SIGNALR_CONNSTRING },
                { "PCS_AUTH_HTTPSREDIRECTPORT", PCS_AUTH_HTTPSREDIRECTPORT },
                { "PCS_AUTH_REQUIRED", PCS_AUTH_REQUIRED },
                { "PCS_AUTH_AUDIENCE", PCS_AUTH_AUDIENCE },
                { "PCS_AUTH_ISSUER", PCS_AUTH_ISSUER },
                { "PCS_WEBUI_AUTH_AAD_APPID", PCS_WEBUI_AUTH_AAD_APPID },
                { "PCS_WEBUI_AUTH_AAD_AUTHORITY", PCS_WEBUI_AUTH_AAD_AUTHORITY },
                { "PCS_WEBUI_AUTH_AAD_TENANT", PCS_WEBUI_AUTH_AAD_TENANT },
                { "PCS_CORS_WHITELIST", PCS_CORS_WHITELIST },
                { "REACT_APP_PCS_AUTH_REQUIRED", REACT_APP_PCS_AUTH_REQUIRED },
                { "REACT_APP_PCS_AUTH_AUDIENCE", REACT_APP_PCS_AUTH_AUDIENCE },
                { "REACT_APP_PCS_AUTH_ISSUER", REACT_APP_PCS_AUTH_ISSUER },
                { "REACT_APP_PCS_WEBUI_AUTH_AAD_APPID", REACT_APP_PCS_WEBUI_AUTH_AAD_APPID },
                { "REACT_APP_PCS_WEBUI_AUTH_AAD_AUTHORITY", REACT_APP_PCS_WEBUI_AUTH_AAD_AUTHORITY },
                { "REACT_APP_PCS_WEBUI_AUTH_AAD_TENANT", REACT_APP_PCS_WEBUI_AUTH_AAD_TENANT }
            };
        }
예제 #7
0
        public IIoTEnvironment(
            AzureEnvironment azureEnvironment,
            Guid tenantId,
            // IoT Hub
            IotHubDescription iotHub,
            string iotHubOwnerConnectionString,
            string iotHubEventHubEventsEndpointName,
            EventHubConsumerGroupInfo iotHubEventHubEventsConsumerGroup,
            EventHubConsumerGroupInfo iotHubEventHubTelemetryConsumerGroup,
            // Cosmos DB
            string cosmosDBAccountConnectionString,
            // Storage Account
            string storageAccountConectionString,
            string storageAccountContainerDataprotection,
            // ADLS Gen2 Storage Account
            string adlsConectionString,
            string adlsContainerCdm,
            string adlsContainerCdmRootFolder,
            // Event Hub Namespace
            EventhubInner eventHub,
            string eventHubConnectionString,
            ConsumerGroupInner telemetryCdm,
            ConsumerGroupInner telemetryUx,
            // Service Bus
            string serviceBusConnectionString,
            // SignalR
            string signalRConnectionString,
            // Key Vault
            VaultInner keyVault,
            string dataprotectionKeyName,
            // Application Insights
            ApplicationInsightsComponent applicationInsightsComponent,
            string serviceURL,
            Application serviceApplication,
            string serviceApplicationSecret,
            Application clientApplication,
            string clientApplicationSecret

            )
        {
            // IoT Hub
            PCS_IOTHUB_CONNSTRING       = iotHubOwnerConnectionString;
            PCS_IOTHUB_EVENTHUBENDPOINT = iotHub.Properties.EventHubEndpoints[iotHubEventHubEventsEndpointName].Endpoint;
            PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_EVENTS    = iotHubEventHubEventsConsumerGroup.Name;
            PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_TELEMETRY = iotHubEventHubTelemetryConsumerGroup.Name;

            // Cosmos DB
            PCS_COSMOSDB_CONNSTRING = cosmosDBAccountConnectionString;

            // Storage Account
            PCS_STORAGE_CONNSTRING = storageAccountConectionString;
            PCS_STORAGE_CONTAINER_DATAPROTECTION = storageAccountContainerDataprotection;

            // ADLS Gen2 Storage Account
            PCS_ADLSG2_CONNSTRING               = adlsConectionString;
            PCS_ADLSG2_CONTAINER_CDM            = adlsContainerCdm;
            PCS_ADLSG2_CONTAINER_CDM_ROOTFOLDER = adlsContainerCdmRootFolder;

            // Event Hub Namespace
            PCS_EVENTHUB_CONNSTRING = eventHubConnectionString;
            PCS_EVENTHUB_NAME       = eventHub.Name;
            PCS_EVENTHUB_CONSUMERGROUP_TELEMETRY_CDM = telemetryCdm.Name;
            PCS_EVENTHUB_CONSUMERGROUP_TELEMETRY_UX  = telemetryUx.Name;

            // Service Bus
            PCS_SERVICEBUS_CONNSTRING = serviceBusConnectionString;

            // Key Vault
            PCS_KEYVAULT_URL = keyVault.Properties.VaultUri;
            PCS_KEYVAULT_KEY_DATAPROTECTION = dataprotectionKeyName;
            PCS_KEYVAULT_APPID  = serviceApplication.AppId;
            PCS_KEYVAULT_SECRET = serviceApplicationSecret;

            // Application Insights
            PCS_APPINSIGHTS_INSTRUMENTATIONKEY = applicationInsightsComponent.InstrumentationKey;

            // Service URLs
            PCS_SERVICE_URL = serviceURL;

            var iiotNamespace = "industrial-iot";

            // AKS internal service URLs
            PCS_TWIN_REGISTRY_URL_INTERNAL     = $"http://{"registry-service"}.{iiotNamespace}:{9042}";
            PCS_TWIN_SERVICE_URL_INTERNAL      = $"http://{"twin-service"}.{iiotNamespace}:{9041}";
            PCS_HISTORY_SERVICE_URL_INTERNAL   = $"http://{"history-service"}.{iiotNamespace}:{9043}";
            PCS_VAULT_SERVICE_URL_INTERNAL     = $"http://{"vault-service"}.{iiotNamespace}:{9044}";
            PCS_PUBLISHER_SERVICE_URL_INTERNAL = $"http://{"publisher-service"}.{iiotNamespace}:{9045}";
            PCS_PUBLISHER_ORCHESTRATOR_SERVICE_URL_INTERNAL = $"http://{"edge-jobs-service"}.{iiotNamespace}:{9051}";
            PCS_EVENTS_SERVICE_URL_INTERNAL = $"http://{"events-service"}.{iiotNamespace}:{9050}";

            // Externally accessible service URLs
            serviceURL = serviceURL.TrimEnd('/');
            PCS_TWIN_REGISTRY_URL_EXTERNAL     = $"{serviceURL}/registry/";
            PCS_TWIN_SERVICE_URL_EXTERNAL      = $"{serviceURL}/twin/";
            PCS_HISTORY_SERVICE_URL_EXTERNAL   = $"{serviceURL}/history/";
            PCS_VAULT_SERVICE_URL_EXTERNAL     = $"{serviceURL}/vault/";
            PCS_PUBLISHER_SERVICE_URL_EXTERNAL = $"{serviceURL}/publisher/";
            PCS_PUBLISHER_ORCHESTRATOR_SERVICE_URL_EXTERNAL = $"{serviceURL}/edge/publisher/";
            PCS_EVENTS_SERVICE_URL_EXTERNAL = $"{serviceURL}/events/";

            // Service URLs that will be consumed by microservices.
            PCS_TWIN_REGISTRY_URL     = PCS_TWIN_REGISTRY_URL_INTERNAL;
            PCS_TWIN_SERVICE_URL      = PCS_TWIN_SERVICE_URL_INTERNAL;
            PCS_HISTORY_SERVICE_URL   = PCS_HISTORY_SERVICE_URL_INTERNAL;
            PCS_VAULT_SERVICE_URL     = PCS_VAULT_SERVICE_URL_INTERNAL;
            PCS_PUBLISHER_SERVICE_URL = PCS_PUBLISHER_SERVICE_URL_INTERNAL;
            // NOTE: PCS_PUBLISHER_ORCHESTRATOR_SERVICE_URL should be externally accessible URL.
            PCS_PUBLISHER_ORCHESTRATOR_SERVICE_URL = PCS_PUBLISHER_ORCHESTRATOR_SERVICE_URL_EXTERNAL;
            PCS_EVENTS_SERVICE_URL = PCS_EVENTS_SERVICE_URL_INTERNAL;

            // SignalR
            PCS_SIGNALR_CONNSTRING = signalRConnectionString;

            // Authentication
            PCS_AUTH_REQUIRED = $"{true}";
            PCS_AUTH_TENANT   = $"{tenantId}";
            // ToDo: Check value of PCS_AUTH_INSTANCE.
            //PCS_AUTH_INSTANCE = "https://login.microsoftonline.com/";
            PCS_AUTH_INSTANCE          = azureEnvironment.AuthenticationEndpoint;
            PCS_AUTH_ISSUER            = $"https://sts.windows.net/{tenantId}/";
            PCS_AUTH_HTTPSREDIRECTPORT = $"{0}";
            PCS_AUTH_AUDIENCE          = serviceApplication.IdentifierUris.First();
            PCS_AUTH_CLIENT_APPID      = clientApplication.AppId;
            PCS_AUTH_CLIENT_SECRET     = clientApplicationSecret;
            PCS_AUTH_SERVICE_APPID     = serviceApplication.AppId;
            PCS_AUTH_SERVICE_SECRET    = serviceApplicationSecret;

            // CORS Whitelist
            PCS_CORS_WHITELIST = "*";

            // Service URL path bases
            PCS_TWIN_REGISTRY_SERVICE_PATH_BASE          = "/registry";
            PCS_TWIN_SERVICE_PATH_BASE                   = "/twin";
            PCS_HISTORY_SERVICE_PATH_BASE                = "/history";
            PCS_GATEWAY_SERVICE_PATH_BASE                = "/ua";
            PCS_VAULT_SERVICE_PATH_BASE                  = "/vault";
            PCS_PUBLISHER_SERVICE_PATH_BASE              = "/publisher";
            PCS_EVENTS_SERVICE_PATH_BASE                 = "/events";
            PCS_FRONTEND_APP_SERVICE_PATH_BASE           = "/frontend";
            PCS_PUBLISHER_ORCHESTRATOR_SERVICE_PATH_BASE = "/edge/publisher";

            // AspNetCore
            ASPNETCORE_FORWARDEDHEADERS_ENABLED      = $"{true}";
            ASPNETCORE_FORWARDEDHEADERS_FORWARDLIMIT = $"{1}";

            // OpenAPI
            PCS_OPENAPI_SERVER_HOST = "";

            Dict = new Dictionary <string, string> {
                // IoT Hub
                { $"{nameof(PCS_IOTHUB_CONNSTRING)}", PCS_IOTHUB_CONNSTRING },
                { $"{nameof(PCS_IOTHUB_EVENTHUBENDPOINT)}", PCS_IOTHUB_EVENTHUBENDPOINT },
                { $"{nameof(PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_EVENTS)}", PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_EVENTS },
                { $"{nameof(PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_TELEMETRY)}", PCS_IOTHUB_EVENTHUB_CONSUMER_GROUP_TELEMETRY },

                // Cosmos DB
                { $"{nameof(PCS_COSMOSDB_CONNSTRING)}", PCS_COSMOSDB_CONNSTRING },

                // Storage Account
                { $"{nameof(PCS_STORAGE_CONNSTRING)}", PCS_STORAGE_CONNSTRING },
                { $"{nameof(PCS_STORAGE_CONTAINER_DATAPROTECTION)}", PCS_STORAGE_CONTAINER_DATAPROTECTION },

                // ADLS Gen2 Storage Account
                { $"{nameof(PCS_ADLSG2_CONNSTRING)}", PCS_ADLSG2_CONNSTRING },
                { $"{nameof(PCS_ADLSG2_CONTAINER_CDM)}", PCS_ADLSG2_CONTAINER_CDM },
                { $"{nameof(PCS_ADLSG2_CONTAINER_CDM_ROOTFOLDER)}", PCS_ADLSG2_CONTAINER_CDM_ROOTFOLDER },

                // Event Hub Namespace
                { $"{nameof(PCS_EVENTHUB_CONNSTRING)}", PCS_EVENTHUB_CONNSTRING },
                { $"{nameof(PCS_EVENTHUB_NAME)}", PCS_EVENTHUB_NAME },
                { $"{nameof(PCS_EVENTHUB_CONSUMERGROUP_TELEMETRY_CDM)}", PCS_EVENTHUB_CONSUMERGROUP_TELEMETRY_CDM },
                { $"{nameof(PCS_EVENTHUB_CONSUMERGROUP_TELEMETRY_UX)}", PCS_EVENTHUB_CONSUMERGROUP_TELEMETRY_UX },

                // Service Bus
                { $"{nameof(PCS_SERVICEBUS_CONNSTRING)}", PCS_SERVICEBUS_CONNSTRING },

                // Key Vault
                { $"{nameof(PCS_KEYVAULT_URL)}", PCS_KEYVAULT_URL },
                { $"{nameof(PCS_KEYVAULT_KEY_DATAPROTECTION)}", PCS_KEYVAULT_KEY_DATAPROTECTION },
                { $"{nameof(PCS_KEYVAULT_APPID)}", PCS_KEYVAULT_APPID },
                { $"{nameof(PCS_KEYVAULT_SECRET)}", PCS_KEYVAULT_SECRET },

                // Application Insights
                { $"{nameof(PCS_APPINSIGHTS_INSTRUMENTATIONKEY)}", PCS_APPINSIGHTS_INSTRUMENTATIONKEY },

                // Service URLs
                { $"{nameof(PCS_SERVICE_URL)}", PCS_SERVICE_URL },
                { $"{nameof(PCS_TWIN_REGISTRY_URL)}", PCS_TWIN_REGISTRY_URL },
                { $"{nameof(PCS_TWIN_SERVICE_URL)}", PCS_TWIN_SERVICE_URL },
                { $"{nameof(PCS_HISTORY_SERVICE_URL)}", PCS_HISTORY_SERVICE_URL },
                { $"{nameof(PCS_VAULT_SERVICE_URL)}", PCS_VAULT_SERVICE_URL },
                { $"{nameof(PCS_PUBLISHER_SERVICE_URL)}", PCS_PUBLISHER_SERVICE_URL },
                { $"{nameof(PCS_PUBLISHER_ORCHESTRATOR_SERVICE_URL)}", PCS_PUBLISHER_ORCHESTRATOR_SERVICE_URL },
                { $"{nameof(PCS_EVENTS_SERVICE_URL)}", PCS_EVENTS_SERVICE_URL },

                // SignalR
                { $"{nameof(PCS_SIGNALR_CONNSTRING)}", PCS_SIGNALR_CONNSTRING },

                // Authentication
                { $"{nameof(PCS_AUTH_REQUIRED)}", PCS_AUTH_REQUIRED },
                { $"{nameof(PCS_AUTH_TENANT)}", PCS_AUTH_TENANT },
                { $"{nameof(PCS_AUTH_INSTANCE)}", PCS_AUTH_INSTANCE },
                { $"{nameof(PCS_AUTH_ISSUER)}", PCS_AUTH_ISSUER },
                { $"{nameof(PCS_AUTH_HTTPSREDIRECTPORT)}", PCS_AUTH_HTTPSREDIRECTPORT },
                { $"{nameof(PCS_AUTH_AUDIENCE)}", PCS_AUTH_AUDIENCE },
                { $"{nameof(PCS_AUTH_CLIENT_APPID)}", PCS_AUTH_CLIENT_APPID },
                { $"{nameof(PCS_AUTH_CLIENT_SECRET)}", PCS_AUTH_CLIENT_SECRET },
                { $"{nameof(PCS_AUTH_SERVICE_APPID)}", PCS_AUTH_SERVICE_APPID },
                { $"{nameof(PCS_AUTH_SERVICE_SECRET)}", PCS_AUTH_SERVICE_SECRET },

                // CORS Whitelist
                { $"{nameof(PCS_CORS_WHITELIST)}", PCS_CORS_WHITELIST },

                // Service URL path bases
                { $"{nameof(PCS_TWIN_REGISTRY_SERVICE_PATH_BASE)}", PCS_TWIN_REGISTRY_SERVICE_PATH_BASE },
                { $"{nameof(PCS_TWIN_SERVICE_PATH_BASE)}", PCS_TWIN_SERVICE_PATH_BASE },
                { $"{nameof(PCS_HISTORY_SERVICE_PATH_BASE)}", PCS_HISTORY_SERVICE_PATH_BASE },
                { $"{nameof(PCS_GATEWAY_SERVICE_PATH_BASE)}", PCS_GATEWAY_SERVICE_PATH_BASE },
                { $"{nameof(PCS_VAULT_SERVICE_PATH_BASE)}", PCS_VAULT_SERVICE_PATH_BASE },
                { $"{nameof(PCS_PUBLISHER_SERVICE_PATH_BASE)}", PCS_PUBLISHER_SERVICE_PATH_BASE },
                { $"{nameof(PCS_EVENTS_SERVICE_PATH_BASE)}", PCS_EVENTS_SERVICE_PATH_BASE },
                { $"{nameof(PCS_FRONTEND_APP_SERVICE_PATH_BASE)}", PCS_FRONTEND_APP_SERVICE_PATH_BASE },
                { $"{nameof(PCS_PUBLISHER_ORCHESTRATOR_SERVICE_PATH_BASE)}", PCS_PUBLISHER_ORCHESTRATOR_SERVICE_PATH_BASE },

                // AspNetCore
                { $"{nameof(ASPNETCORE_FORWARDEDHEADERS_ENABLED)}", ASPNETCORE_FORWARDEDHEADERS_ENABLED },
                { $"{nameof(ASPNETCORE_FORWARDEDHEADERS_FORWARDLIMIT)}", ASPNETCORE_FORWARDEDHEADERS_FORWARDLIMIT },

                // OpenAPI
                { $"{nameof(PCS_OPENAPI_SERVER_HOST)}", PCS_OPENAPI_SERVER_HOST },
            };
        }