public async Task CdnRotation([TimerTrigger("0 0 0 * * 1,5")] TimerInfo timer, ILogger log)
        {
            var tasks = new List <Task>();

            var cdnProfiles = await _cdnManagementClient.Profiles.SafeListAllAsync();

            foreach (var cdnProfile in cdnProfiles)
            {
                log.LogInformation($"CDN Proflie: {cdnProfile.Name}");

                var resourceGroupName = cdnProfile.ResourceGroupName();

                var cdnEndpoints = await _cdnManagementClient.Endpoints.ListAllByProfileAsync(resourceGroupName, cdnProfile.Name);

                foreach (var cdnEndpoint in cdnEndpoints)
                {
                    log.LogInformation($"CDN Endpoint: {cdnEndpoint.Name}");

                    var cdnCustomDomains = await _cdnManagementClient.CustomDomains.ListAllByEndpointAsync(resourceGroupName, cdnProfile.Name, cdnEndpoint.Name);

                    foreach (var cdnCustomDomain in cdnCustomDomains)
                    {
                        log.LogInformation($"Custom Domain: {cdnCustomDomain.Name}");

                        if (!(cdnCustomDomain.CustomHttpsParameters is UserManagedHttpsParameters httpsParameters))
                        {
                            continue;
                        }

                        log.LogInformation($"Vault Name: {httpsParameters.CertificateSourceParameters.VaultName}");
                        log.LogInformation($"Secret Name: {httpsParameters.CertificateSourceParameters.SecretName}");
                        log.LogInformation($"Secret Version: {httpsParameters.CertificateSourceParameters.SecretVersion}");

                        var certificateClient = _certificateClientFactory.CreateClient(httpsParameters.CertificateSourceParameters.VaultName);

                        var latestCertificate = await certificateClient.GetCertificateAsync(httpsParameters.CertificateSourceParameters.SecretName);

                        if (latestCertificate.Value.Properties.Version == httpsParameters.CertificateSourceParameters.SecretVersion)
                        {
                            continue;
                        }

                        log.LogInformation($"Target Secret Version: {latestCertificate.Value.Properties.Version}");

                        httpsParameters.CertificateSourceParameters.SecretVersion = latestCertificate.Value.Properties.Version;

                        tasks.Add(_cdnManagementClient.CustomDomains.EnableCustomHttpsAsync(resourceGroupName, cdnProfile.Name, cdnEndpoint.Name, cdnCustomDomain.Name, httpsParameters));
                    }
                }
            }

            await Task.WhenAll(tasks);
        }
예제 #2
0
        public async Task FrontDoorRotation([TimerTrigger("0 0 0 * * 1,5")] TimerInfo timer, ILogger log)
        {
            var tasks = new List <Task>();

            var frontDoors = await _frontDoorManagementClient.FrontDoors.SafeListAllAsync();

            foreach (var frontDoor in frontDoors)
            {
                log.LogInformation($"Front Door: {frontDoor.Name}");

                var resourceGroupName = frontDoor.ResourceGroupName();

                var frontendEndpoints = await _frontDoorManagementClient.FrontendEndpoints.ListAllByFrontDoorAsync(resourceGroupName, frontDoor.Name);

                foreach (var frontendEndpoint in frontendEndpoints)
                {
                    log.LogInformation($"Frontend Endpoint: {frontendEndpoint.Name}");

                    if (frontendEndpoint.CustomHttpsConfiguration?.CertificateSource != "AzureKeyVault")
                    {
                        continue;
                    }

                    var vaultName = ExtractVaultName(frontendEndpoint.CustomHttpsConfiguration.Vault.Id);

                    log.LogInformation($"Vault Name: {vaultName}");
                    log.LogInformation($"Secret Name: {frontendEndpoint.CustomHttpsConfiguration.SecretName}");
                    log.LogInformation($"Secret Version: {frontendEndpoint.CustomHttpsConfiguration.SecretVersion}");

                    var certificateClient = _certificateClientFactory.CreateClient(vaultName);

                    var latestCertificate = await certificateClient.GetCertificateAsync(frontendEndpoint.CustomHttpsConfiguration.SecretName);

                    if (latestCertificate.Value.Properties.Version == frontendEndpoint.CustomHttpsConfiguration.SecretVersion)
                    {
                        continue;
                    }

                    log.LogInformation($"Target Secret Version: {latestCertificate.Value.Properties.Version}");

                    frontendEndpoint.CustomHttpsConfiguration.SecretVersion = latestCertificate.Value.Properties.Version;

                    tasks.Add(_frontDoorManagementClient.FrontendEndpoints.EnableHttpsAsync(resourceGroupName, frontDoor.Name, frontendEndpoint.Name, frontendEndpoint.CustomHttpsConfiguration));
                }
            }

            await Task.WhenAll(tasks);
        }