Dar ao portal somente o acesso necessário

CibersegurançaBeginner
Pratique Agora

Introdução

O vazamento anônimo está fechado neste ambiente novo, mas o portal ainda usa as credenciais do administrador do armazenamento. Ele pode fazer muito mais do que ler o extrato atribuído. Você criará uma identidade dedicada, concederá apenas as leituras necessárias e mudará a aplicação para usá-la.

Use Storage Admin para contas e políticas, Portal App para o arquivo privado de credenciais e Document Portal para solicitações reais da aplicação. O cenário sintético usa VersityGW 1.10.0 local com usuários internos como principais, não todo o AWS IAM. O ambiente começa independentemente do laboratório anterior.

Criar uma identidade dedicada para o portal

Nesta etapa, substitua a dependência de um administrador por uma identidade de aplicação separada.

Selecione a aba Document Portal na interface do laboratório para começar esta etapa.

Mude para a aba Document Portal, clique em Open assigned document e observe Identity: storage-admin. O extrato funciona, mas privilégios administrativos são desnecessários. Uma identidade nomeia o solicitante; sua chave secreta permite que o cliente assine solicitações que a comprovem. Autenticação prova quem chama; autorização decide o que esse solicitante pode fazer.

Mude para a aba Storage Admin. Carregue as credenciais administrativas desta VM:

Mude para a aba Storage Admin antes de executar o comando a seguir.

source admin.env

VersityGW inclui um cliente administrativo. -a seleciona o nome da chave de acesso, -s seu segredo e -er o endpoint. Antes de create-user, identificam o administrador; depois, definem a nova conta. O papel user não tem desvio administrativo. Crie a conta sintética:

/opt/c14/versitygw admin -a storage-admin -s storage-admin-secret -er http://127.0.0.1:7070 create-user -a portal-reader -s portal-reader-secret -r user

O sucesso não mostra erro. Se a conta já existir após repetir o comando, continue com ela. Nunca conceda admin nem a torne proprietária do bucket: essas permissões contornam a política restrita pretendida.

Teste a autenticação com a ajuda pública. As atribuições no início selecionam credenciais apenas para este comando:

AWS_ACCESS_KEY_ID=portal-reader AWS_SECRET_ACCESS_KEY=portal-reader-secret aws --endpoint-url http://127.0.0.1:7070 s3api get-object --bucket documents --key public/help.txt help.txt

Os metadados confirmam uma solicitação autenticada. A ajuda pública é permitida para todos; isso ainda não autoriza leituras de extratos internos. InvalidAccessKeyId indica usuário ausente e SignatureDoesNotMatch segredo incorreto; nenhum é um resultado de autorização.

Conceder somente as leituras do prefixo necessário

Nesta etapa, autorize a identidade dedicada sem conceder escrita ou leituras não relacionadas.

Selecione a aba Storage Admin na interface do laboratório para começar esta etapa.

O portal precisa de portal/statement.txt; sua área permitida é portal/. Um prefixo corresponde ao início de uma chave de objeto. portal/* não inclui finance/budget.txt. A leitura usa s3:GetObject; envio e exclusão usam s3:PutObject e s3:DeleteObject. Evite s3:*, que inclui todas as operações.

Leia a política efetiva em Storage Admin:

Mude para a aba Storage Admin antes de executar o comando a seguir.

aws --endpoint-url http://127.0.0.1:7070 s3api get-bucket-policy --bucket documents --query Policy --output text

Existe apenas a permissão da ajuda pública. Abra a cópia local:

nano policy.json

Substitua pelo JSON completo abaixo. Preserve a declaração pública e acrescente uma permissão separada para o leitor nomeado. Os principais internos do VersityGW são nomes de usuário; os formatos da AWS diferem.

{
  "Version": "2012-10-17",
  "Statement": [
    {"Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::documents/public/*"},
    {"Effect": "Allow", "Principal": "portal-reader", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::documents/portal/*"}
  ]
}

No nano, salve com Ctrl+O, Enter e saia com Ctrl+X. Aplique o arquivo usando file://:

aws --endpoint-url http://127.0.0.1:7070 s3api put-bucket-policy --bucket documents --policy file://policy.json

Nenhuma saída significa sucesso; erros de sintaxe deixam a política anterior em vigor. Corrija e reaplique se necessário. Teste a leitura permitida:

AWS_ACCESS_KEY_ID=portal-reader AWS_SECRET_ACCESS_KEY=portal-reader-secret aws --endpoint-url http://127.0.0.1:7070 s3api get-object --bucket documents --key portal/statement.txt statement.txt

Agora teste uma leitura não relacionada. O AccessDenied esperado é intencional; continue após ele:

AWS_ACCESS_KEY_ID=portal-reader AWS_SECRET_ACCESS_KEY=portal-reader-secret aws --endpoint-url http://127.0.0.1:7070 s3api get-object --bucket documents --key finance/budget.txt budget.txt

A verificação também testa solicitações reais de escrita e exclusão em armazenamento equivalente descartável, preservando os documentos ativos. Uma identidade inválida falharia no controle positivo de leitura; um login quebrado não pode se passar por privilégio mínimo.

Trocar as credenciais da aplicação

Nesta etapa, faça o portal real usar a identidade dedicada.

Selecione a aba Portal App na interface do laboratório para começar esta etapa.

Mude para a aba Portal App. Essa conta local separada possui a configuração privada da aplicação, sem as credenciais do shell de Storage Admin. Leia o arquivo atual:

Mude para a aba Portal App antes de executar o comando a seguir.

cat credentials.json

Os campos access_key e secret_key identificam atualmente storage-admin. Edite o arquivo:

nano credentials.json

Use as credenciais sintéticas dedicadas:

{
  "access_key": "portal-reader",
  "secret_key": "portal-reader-secret"
}

Salve com Ctrl+O, Enter e saia com Ctrl+X. O portal lê o arquivo em cada solicitação; não é preciso reiniciar. Volte à aba Document Portal, clique em Open assigned document ou recarregue. Espere Identity: portal-reader e o extrato original. Se o portal não conseguir ler, corrija JSON ou credenciais e confira a política em Storage Admin.

Document Portal usando a identidade dedicada portal-reader

Por fim, mude para a aba Storage Admin. Teste uma solicitação interna anônima e a ajuda pública. -sS mostra erros sem o medidor; -w acrescenta o código de resposta:

Mude para a aba Storage Admin antes de executar o comando a seguir.

curl -sS -w '\nHTTP %{http_code}\n' http://127.0.0.1:7070/documents/portal/statement.txt

Espere AccessDenied e HTTP 403.

curl -sS http://127.0.0.1:7070/documents/public/help.txt

Espere a ajuda original. A identidade da aplicação e o acesso anônimo são limites separados; proteger um não protege automaticamente o outro.

Resumo

Você criou uma identidade comum de aplicação, permitiu apenas leituras do prefixo necessário e retirou as credenciais administrativas do portal funcional. Verificou autenticação, autorização, acesso público e disponibilidade da aplicação separadamente.