Seguridad de una aplicación en la versión preliminar de Azure Container Apps

Azure Container Apps permite que la aplicación almacene de forma segura valores de configuración confidenciales. Una vez definidos en el nivel de aplicación, los valores protegidos están disponibles para los contenedores, en función de las reglas de escalado y a través de Dapr.

  • Los secretos están limitados a una aplicación, fuera de cualquier revisión específica de una aplicación.
  • Agregar, quitar o cambiar secretos no genera nuevas revisiones.
  • Cada revisión de aplicación puede hacer referencia a uno o varios secretos.
  • Varias revisiones pueden hacer referencia a los mismos secretos.

Cuando se actualiza o elimina un secreto, puede responder a los cambios de una de estas dos maneras:

  1. Implementación de una nueva revisión.
  2. Reinicio de una revisión existente.

Un secreto actualizado o eliminado no vuelve a iniciar automáticamente una revisión.

  • Antes de eliminar un secreto, implemente una nueva revisión que ya no haga referencia al secreto anterior.
  • Si cambia un valor secreto, deberá reiniciar la revisión para consumir el nuevo valor.

Definición de secretos

Los secretos se definen a nivel de aplicación en la sección resources.properties.configuration.secrets.

"resources": [
{
    ...
    "properties": {
        "configuration": {
            "secrets": [
            {
                "name": "queue-connection-string",
                "value": "<MY-CONNECTION-STRING-VALUE>"
            }],
        }
    }
}

En este caso, se declara una cadena de conexión en una cuenta de Queue Storage en la matriz secrets. Para usar esta configuración, reemplace <MY-CONNECTION-STRING-VALUE> por el valor de la cadena de conexión.

Uso de secretos

Se hace referencia a los secretos de aplicación a través de la propiedad secretref. Los valores secretos se asignan a secretos de nivel de aplicación donde el valor secretref coincide con el nombre del secreto declarado en el nivel de aplicación.

Ejemplo

En el ejemplo siguiente se muestra una aplicación que declara una cadena de conexión en el nivel de aplicación y que se usa en toda la configuración a través de secretref.

En este ejemplo, la cadena de conexión de la aplicación se declara como queue-connection-string y está disponible en otra parte de las secciones de configuración.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "location": {
            "type": "String"
        },
        "environment_id": {
            "type": "String"
        },
        "queue-connection-string": {
            "type": "String"
        }
    },
    "variables": {},
    "resources": [
    {
        "name": "queuereader",
        "type": "Microsoft.Web/containerApps",
        "apiVersion": "2021-03-01",
        "kind": "containerapp",
        "location": "[parameters('location')]",
        "properties": {
            "kubeEnvironmentId": "[parameters('environment_id')]",
            "configuration": {
                "activeRevisionsMode": "single",
                "secrets": [
                {
                    "name": "queue-connection-string",
                    "value": "[parameters('queue-connection-string')]"
                }]
            },
            "template": {
                "containers": [
                    {
                        "image": "myregistry/myQueueApp:v1",
                        "name": "myQueueApp",
                        "env": [
                            {
                                "name": "QueueName",
                                "value": "myqueue"
                            },
                            {
                                "name": "ConnectionString",
                                "secretref": "queue-connection-string"
                            }
                        ]
                    }
                ],
                "scale": {
                    "minReplicas": 0,
                    "maxReplicas": 10,
                    "rules": [
                        {
                            "name": "myqueuerule",
                            "azureQueue": {
                                "queueName": "demoqueue",
                                "queueLength": 100,
                                "auth": [
                                    {
                                        "secretRef": "queue-connection-string",
                                        "triggerParameter": "connection"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        }
    }]
}

Aquí, la variable de entorno denominada connection-string obtiene su valor del secreto de nivel de aplicación queue-connection-string. Asimismo, la configuración de autorización de la regla de escalado de Azure Queue Storage usa queue-connection-string a medida que se establece una conexión.

Para evitar confirmar valores secretos en el control de código fuente con la plantilla de ARM, pase los valores secretos como parámetros de plantilla de ARM.

Pasos siguientes