Exercício – Utilizar políticas de acesso armazenadas para delegar o acesso ao Armazenamento do Azure
Em vez de criar SASs individualmente, cada um com suas próprias permissões de acesso e datas de validade, você pode associá-los a uma política de acesso armazenado. Alterar a política afeta todas as SASs associadas à mesma.
Agora que você já sabe que existe uma maneira melhor de criar e gerenciar os SASs da sua empresa. Pode atualizar as novas páginas de teste para utilizarem políticas de acesso armazenadas.
Neste exercício, você atualiza seu aplicativo Web para criar SASs com políticas de acesso armazenadas. Em seguida, use os comandos da CLI do Azure para alterar as políticas e testar se o acesso foi revogado.
Adicionar um método para criar políticas de acesso armazenadas
No Azure Cloud Shell, edite o ficheiro PatientRecordController.cs.
code ~/sas/Controllers/PatientRecordController.cs
Na parte inferior da classe, por baixo do método
GetBlobSas
, escreva um método para criar políticas de acesso armazenadas.// Use a stored access policy for the SAS private void CreateStoredAccessPolicy() { // Create a stored access policy for our blobs BlobSignedIdentifier identifier = new BlobSignedIdentifier { Id = _storedPolicyID, AccessPolicy = new BlobAccessPolicy { ExpiresOn = DateTimeOffset.UtcNow.AddHours(1), Permissions = "r" } }; _container.SetAccessPolicy(permissions: new BlobSignedIdentifier[] { identifier }); }
Este método utiliza uma variável global para o identificador da política de acesso. Adicione esta variável na parte superior da classe por baixo da declaração para a variável
BlobContainerClient
denominada_container
.private String _storedPolicyID = "patient-images-policy";
A política de acesso armazenada será utilizada para cada token de SAS que é gerado, pelo que liga ao novo método nas instâncias de classe. Adicione uma chamada no final do método.
public PatientRecordsController(ILogger<PatientRecordsController> logger, IConfiguration iconfiguration) { _logger = logger; _iconfiguration = iconfiguration; _container = new BlobContainerClient( _iconfiguration.GetValue<string>("StorageAccount:ConnectionString"), _iconfiguration.GetValue<string>("StorageAccount:Container") ); CreateStoredAccessPolicy(); }
GetBlobSas
pode agora ser simplificado para utilizar a política de acesso. Altere o método para o utilizar.// Build a SAS token for the given blob private string GetBlobSas() { // Create a user SAS that only allows reading for a minute BlobSasBuilder sas = new BlobSasBuilder { Identifier = _storedPolicyID, BlobContainerName = _iconfiguration.GetValue<string>("StorageAccount:Container") }; // Use the shared key to access the blob var storageSharedKeyCredential = new StorageSharedKeyCredential( _iconfiguration.GetValue<string>("StorageAccount:AccountName"), _iconfiguration.GetValue<string>("StorageAccount:AccountKey") ); return '?' + sas.ToSasQueryParameters(storageSharedKeyCredential).ToString(); }
O código que processa os pedidos de token de SAS precisa de uma pequena correção para ligar ao método atualizado.
// GET PatientRecord/patient-nnnnnn/secure [HttpGet("{Name}/{secure}")] public PatientRecord Get(string name, string flag) { BlobClient blob = _container.GetBlobClient(name); return new PatientRecord { name=blob.Name, imageURI=blob.Uri.AbsoluteUri, sasToken=GetBlobSas() }; }
Guarde as alterações ao código ao premir Ctrl+S e, em seguida, Ctrl+Q.
Testar o novo código
Crie a aplicação no Cloud Shell.
cd ~/sas/ dotnet build
Caso a porta tenha fechado desde que você terminou o exercício anterior, execute o
curl
comando para abri-la novamente.curl -X POST http://localhost:8888/openPort/8000;
Execute a aplicação Web atualizada.
dotnet run
Aceda ao URL da aplicação Web e certifique-se de que este termina com uma barra (/).
Na home page, selecione Obter todos os pacientes.
Copie o nome de ficheiro de uma imagem. Por exemplo, patient-32589.jpg.
Selecione a ligação do menu External companies (Empresas externas) na parte superior da página.
Cole o nome do ficheiro de imagem no campo Nome do ficheiro de imagem do paciente.
Selecione Obter Chave para popular o token de SAS.
Selecione Ver digitalização para ver a imagem.
Editar a política de acesso armazenada
Entre no portal do Azure usando as mesmas credenciais que você usou para ativar a área restrita.
No menu de recursos do portal do Azure, selecione Todos os recursos.
Na lista de recursos, selecione a conta de armazenamento de registros médicos.
No painel Visão geral, selecione Contêineres e, em seguida, selecione imagens do paciente.
No menu de imagens do paciente, em Configurações, selecione Política de acesso.
Repare que a sua aplicação Web criou uma política de acesso armazenada patient-images-policy.
À direita, selecione o menu ... e, em seguida, selecione Editar no menu de pop-up.
Na política de edição, altere a lista Permissão de leitura para e selecione OK para confirmar.
Selecione Salvar nas imagens do paciente | Painel de política de acesso.
Testar uma nova SAS
Volte à aplicação Web. Na página External companies (Empresas externas), crie um novo token de SAS ao selecionar Get Key (Obter Chave).
Selecione View scan (Ver digitalização).
A imagem não é retornada do Armazenamento do Azure e você recebe um erro de autenticação 403.