Exploración de directivas de acceso almacenadas
Una directiva de acceso almacenada proporciona un nivel de control adicional sobre las firmas de acceso compartido (SAS) de nivel de servicio en el lado del servidor. Establecer una directiva de acceso almacenada agrupa las firmas de acceso compartido y proporciona más restricciones para las firmas sujetas a la directiva. Puede usar una directiva de acceso almacenada para cambiar la hora de inicio, la hora de expiración o los permisos de una firma, o bien para revocarla después de haberse emitido.
Los siguientes recursos de almacenamiento admiten directivas de acceso almacenadas:
- Contenedores de blobs
- Recursos compartidos de archivos
- Colas
- Tablas
Creación de una directiva de acceso almacenada
La directiva de acceso para una SAS consiste en la hora de inicio, la hora de expiración y los permisos de la firma. Puede especificar todos estos parámetros en el URI de la firma y ninguno en la directiva de acceso almacenada; todos en la directiva de acceso almacenada y ninguno en el URI; o alguna combinación de ambos. Sin embargo, no puede especificar un parámetro determinado tanto en el token de SAS como en la directiva de acceso almacenada.
Para crear o modificar una directiva de acceso almacenada, llame a la operación Set ACL
para el recurso (consulte Set Container ACL, Set Queue ACL, Set Table ACL o Set Share ACL) con un cuerpo de solicitud que especifica los términos y condiciones de la directiva de acceso. El cuerpo de la solicitud incluye un identificador único firmado de su elección, de hasta 64 caracteres, y los parámetros opcionales de la directiva de acceso, de la manera siguiente:
Nota:
Establecer una directiva de acceso almacenada en un contenedor, tabla, cola o recurso compartido puede tardar hasta 30 segundos en aplicarse. Durante este tiempo, las solicitudes realizadas en una SAS asociada a la directiva de acceso almacenada pueden generar un error con el código de estado 403 (Prohibido), hasta que se active la directiva de acceso. No se pueden especificar restricciones de intervalo de entidades de tabla (startpk
, startrk
, endpk
y endrk
) en una directiva de acceso almacenada.
A continuación se muestran ejemplos de cómo crear una directiva de acceso almacenada mediante .NET de C# y la CLI de Azure.
BlobSignedIdentifier identifier = new BlobSignedIdentifier
{
Id = "stored access policy identifier",
AccessPolicy = new BlobAccessPolicy
{
ExpiresOn = DateTimeOffset.UtcNow.AddHours(1),
Permissions = "rw"
}
};
blobContainer.SetAccessPolicy(permissions: new BlobSignedIdentifier[] { identifier });
az storage container policy create \
--name <stored access policy identifier> \
--container-name <container name> \
--start <start time UTC datetime> \
--expiry <expiry time UTC datetime> \
--permissions <(a)dd, (c)reate, (d)elete, (l)ist, (r)ead, or (w)rite> \
--account-key <storage account key> \
--account-name <storage account name> \
Modificación o revocación de una directiva de acceso almacenada
A fin de modificar los parámetros de la directiva de acceso almacenada, puede llamar a la operación de lista de control de acceso del tipo de recurso para reemplazar la directiva existente. Por ejemplo, si la directiva existente concede permisos de lectura y escritura a un recurso, puede modificarla para conceder únicamente permisos de lectura para todas las solicitudes futuras.
Para revocar una directiva de acceso almacenada, puede eliminarla, cambiar el identificador firmado para cambiarle el nombre, o bien cambiar la hora de expiración a un valor en el pasado. Al cambiar el identificador firmado se interrumpen las asociaciones entre las firmas existentes y la directiva de acceso almacenada. El cambio de la hora de expiración a un valor en el pasado hace que las firmas asociadas expiren. La eliminación o modificación de la directiva de acceso almacenada afecta inmediatamente a toda las SAS asociadas a ella.
Para quitar una sola directiva de acceso, llame a la operación Set ACL
del recurso, pasando el conjunto de identificadores firmados que desea conservar en el contenedor. A fin de quitar todas las directivas de acceso del recurso, llame a la operación Set ACL
con un cuerpo de solicitud vacío.