Giter Site home page Giter Site logo

azure / apim-landing-zone-accelerator Goto Github PK

View Code? Open in Web Editor NEW
135.0 16.0 136.0 23.04 MB

The Azure API Management landing zone accelerator provides an architectural approach and reference implementation to prepare landing zone subscriptions for a secure API Management infrastructure.

Home Page: https://aka.ms/apim-lza

License: MIT License

Bicep 89.78% Shell 10.22%
landing-zone-accelerator lza

apim-landing-zone-accelerator's Introduction

Azure API Management Landing Zone Accelerator

Azure API Management Landing Zone Accelerator provides packaged guidance with reference architecture and reference implementation along with design guidance recommendations and considerations on critical design areas for provisioning APIM with a secure baseline. They are aligned with industry proven practices, such as those presented in Azure landing zones guidance in the Cloud Adoption Framework.

Reference Architecture

image

๐Ÿ” Design areas

The enterprise architecture is broken down into six different design areas, where you can find the links to each at:

Design Area Considerations Recommendations
Identity and Access Management Design Considerations Design Recommendations
Network Topology and Connectivity Design Considerations Design Recommendations
Security Design Considerations Design Recommendations
Management Design Considerations Design Recommendations
Governance Design Considerations Design Recommendations
Platform Automation and DevOps Design Considerations Design Recommendations

๐Ÿš€ Deployment scenarios

This repo contains the Azure landing zone accelerator's reference implementations, all with supporting Infrastructure as Code artifacts. The scenarios covered are:

Deploys APIM with a secure baseline configuration with no backends and a sample API.

On top of the secure baseline, deploys a private Azure function as a backend and provision APIs in APIM to access the function.

On top of the secure baseline, deploys private Azure OpenAI endpoints (3 endpoints) as backend and provision API that can handle multiple use cases.

More reference implementation scenarios will be added as they become available.

Supported Regions

Some of the new Azure OpenAI policies are not available in al the regions yet. If you see the deployment failures, try chosing a different region. The following regions are more likely to work.

australiacentral, australiaeast, australiasoutheast, brazilsouth, eastasia, francecentral, germanywestcentral, koreacentral, northeurope, southeastasia, southcentralus, uksouth, ukwest, westeurope, westus2, westus3

Got a feedback

Please leverage issues if you have any feedback or request on how we can improve on this repository.


Data Collection

The software may collect information about you and your use of the software and send it to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may turn off the telemetry as described in the repository. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with a copy of Microsoft's privacy statement. Our privacy statement is located at https://go.microsoft.com/fwlink/?LinkId=521839. You can learn more about data collection and use in the help documentation and our privacy statement. Your use of the software operates as your consent to these practices.

Telemetry Configuration

Telemetry collection is on by default.

To opt-out, set the variable ENABLE_TELEMETRY to false in .env file.


Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Trademarks

This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.

apim-landing-zone-accelerator's People

Contributors

aarthiem avatar ahmedsza avatar aighostmod avatar aionic avatar briandenicola avatar briggsb9 avatar carlokuip avatar cenkms avatar cykreng avatar elyusubov avatar gitstua avatar ibersanoms avatar jinlee794 avatar kunalbabre avatar mbecker-msft avatar mpapas avatar paromitaroy avatar petemessina avatar prasann avatar remcoeissing avatar saumilkumarshah avatar seenu433 avatar skyaddict avatar stuartleeks avatar sushaanttb avatar whsalazar avatar winmike avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

apim-landing-zone-accelerator's Issues

Enable APIM managed identity for named values stored in Key Vault

When creating APIM policies customers often like to reference secrets stored in Key Vault for use in APIM named values. Seeing as though storing secrets in Key Vault is deemed best practice, we should enable a managed identity on APIM and assign get and list permissions to the shared services Key Vault.

Reference

Using key vault secrets is recommended because it helps improve API Management security:

Secrets stored in key vaults can be reused across services
Granular access policies can be applied to secrets
Secrets updated in the key vault are automatically rotated in API Management. After update in the key vault, a named value in API Management is updated within 4 hours. You can also manually refresh the secret using the Azure portal or via the management REST API.

Happy to work on this if agreed.

Pipeline warnings and secure parameters

On running the pipeline, the following warnings/errors occur...

Error: WARNING: /home/runner/work/apim-landing-zone-accelerator/apim-landing-zone-accelerator/reference-implementations/AppGW-IAPIM-Func/bicep/shared/createvmwindows.bicep(18,7) : Warning secure-secrets-in-params: Parameter 'password' may represent a secret (according to its name) and must be declared with the '@secure()' attribute. [https://aka.ms/bicep/linter/secure-secrets-in-params]

Then various iterations of...

/home/runner/work/apim-landing-zone-accelerator/apim-landing-zone-accelerator/reference-implementations/AppGW-IAPIM-Func/bicep/gateway/appgw.bicep(183,13) : Warning use-resource-id-functions: If property "id" represents a resource ID, it must use a symbolic resource reference, be a parameter or start with one of these functions: extensionResourceId, guid, if, reference, resourceId, subscription, subscriptionResourceId, tenantResourceId. [https://aka.ms/bicep/linter/use-resource-id-functions]

Issue 1 requires the VMPassword to be set as a secure parameter.

Issue 2 requires a reformat of the resource id references within the app gateway config. For example...

resourceId('Microsoft.Network/applicationGateways/backendHttpSettingsCollection', appGatewayName, 'https')

ADO dependency

From Enterprise-Scale-APIM created by seenu433: cykreng/Enterprise-Scale-APIM#12

Having a dependency on ADO may not be appropriate and ADO self-hosted agent deployment should be optional

Make ADO agent deployment optional using an env variable in the shared.bicep file

Extend/New Scenario to include self-hosted Gateways

For hybrid workloads there is often the need to deploy self hosted gateways. The scenario should be expanded to support this including:

  1. Networking implications
  2. Policies with conditional logic to support different backends in each location
  3. OPerational/Monitoring Impacts

Application Gateway Overview

From Enterprise-Scale-APIM created by petemessina: cykreng/Enterprise-Scale-APIM#60

Is it possible in the documentation and user guide to add some high-level reasoning around the use and why app gateway is in the architecture? When working through implementations with customers it is a common question I see and if we can add some guidance here it would clarify the need.

Investigate implication of user vs system managed identity

Using a user-managed identity decouples the lifecycle of the identity from the resources using it.
Does it simplify the deployment, or improve performance to move everything to a user-managed identity, or should we just keep it system to align the lifecycle.

Todo:
Determine our ultimate approach

Ref:
https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/managed-identity-best-practice-recommendations#choosing-system-or-user-assigned-managed-identities

Issues with backend

From Enterprise-Scale-APIM created by seenu433: cykreng/Enterprise-Scale-APIM#46

The function app with code does not have the storage configured and hence the runtime is unreachable.
Link the storage account with the function app.

The container function app seems to be redundant and consider deleting it.

Multi-region serverless APIM gateway deployment fronted by Azure Front Door

From Enterprise-Scale-APIM created by kunalbabre: cykreng/Enterprise-Scale-APIM#75

Scenario:
Deploying APIM serverless and exposing it via Azure front door (Both single and multi-region deployments).

e.g., https://www.kunalbabre.com/simple-azure-application-deployment-patterns/

[Private End Points were unsupported by APIM when I blogged above (we can expand it now)]

Advantage:
These can help with much wide-scale adoption of secure API Gateway for many of our customers.

Create automation for recommended custom roles using APIM RBAC operations

From Enterprise-Scale-APIM created by cykreng: cykreng/Enterprise-Scale-APIM#26

https://docs.microsoft.com/en-us/azure/api-management/api-management-role-based-access-control#custom-roles

(From Jonas Norlund)
Is it scope to create automation for this or is it sufficient with link? I have implemented the following scenario:

  1. API developer(s) get Reader RBAC role
  2. API team get's an SP that has a custom role assignment to the api(s) that they should have access to. This SP is only used in ADO pipelines.

Automation creates, api(s), SP, custom role, assignments.

Bicep Deployment Failed after running an hour - System.Management.Automation.ParameterBindingException: Missing an argument for parameter 'certificateName'.

Hey team,

I follow the readme file to configure the deployment yaml file and chose to use auto generated self signed certificate

AZURE_LOCATION: 'westus2'
RESOURCE_NAME_PREFIX: 'apimlz'
ENVIRONMENT_TAG: 'dev'
DEPLOYMENT_NAME: 'ase-demo-deployment'
VM_USERNAME: 'agent'
ACCOUNT_NAME: 'github.com/xuhongl'
CICD_AGENT_TYPE: none
CERT_TYPE: 'selfsigned'

however, after running for ~1h, the Bicep deployment failed with error below

image

looks like a parameter is missing here - is it possible for us to add this to the parameter file and update our deploy readme?

Thanks in advance

Private DNS zone creates azure-api.net zone, which causes authorizations to break

When deploying API Management in Internal mode, the accelerator creates a private DNS zone named azure-api.net. This causes name lookups to any azure-api.net resource not specified in the zone to fail. The new Authorizations feature calls a public endpoint called "logic-apis-regionname.azure-apim.net" which is an alias under azure-api.net, so this resolution will fail.

The private DNS zone created should be named "apimname.azure-api.net" so it is not authoritative for all azure-api.net endpoints.

Terraform implementation "VMExtensionProvisioningError"

Message="VM has reported a failure when processing extension 'devops_agent'. Error message: "Invalid handler configuration. Exiting. Error Message: Error converting value "https://raw.githubusercontent.com/Azure/apim-landing-zone-accelerator/main/reference-implementations/AppGW-IAPIM-Func/bicep/shared/agentsetup.ps1\" to type 'System.Collections.Generic.IList`1[System.String]'. Path 'runtimeSettings[0].handlerSettings.publicSettings.fileUris', line 5, position 340."\r\n\r\nMore information on troubleshooting is available at https://aka.ms/VMExtensionCSEWindowsTroubleshoot "

Network Considerations Lacking

There are lots of gaps in this landing zone accelerator particularly around Network Design. There is no mention of Azure Firewall or VWAN hubs which are the most common seen in Enterprise Scale Network topologies.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.