AWS- Policy
Olá Pessoal,
Vou começar falar um pouco sobre a questão de segurança na AWS e para isso vamos passar por alguns pontos básicos, como as Policies.
A AWS apresenta vários níveis de controle de acesso, da mesma forma que a maioria dos sistemas que conhecemos, como um SO, um ERP ou DB. Uma unidade básica para este controle é a permissão, que pode conceder ou remover (a partir deste ponto, quando me referir a “conceder” entenda: conceder ou remover) o privilégio de fazer alguma ação em algum recurso AWS. O serviço core AWS que faz toda esta gestão é o Identity and Access Management (IAM).
A forma utilizada para conceder privilégios é através de Policies. Sempre que um Principal (User, Role, Service, …) faz uma requisição, serão avaliadas as Policies (de quem faz e de quem recebe a requisição) determinando se a ação será permitida ou bloqueada. Elas são armazenadas em formato de documento (JSON) e são divididas em duas classes: “Identity-Based Policies” e “Resource-Based Policies”.
As “Identity-based” são aquelas que você pode “attachar” aos Users, Groups ou Roles dizendo quais são seus privilégios nos recursos AWS. Por exemplo, você pode criar uma Policy que permite acesso para listar os buckets do S3, ou listar um bucket específico do S3.
Na console, basta clicar em “Create policy”. Você ir selecionado os serviços/actions de forma bem intuitiva ou editar o JSON manualmente.
Além disso, elas são subdivididas em dois grupos: “in-line” e “managed”. Para ser breve, a “in-line” é customizada e gerenciada por você (como esta acima) e a “managed” e completamente gerenciada pela AWS (como esta abaixo).
Já as “Resource-Based” funcionam de forma ligeiramente diferente e são sempre do tipo “in-line” (você gerencia). Você cria um recurso e diz quem tem acesso a ele e as ações permitidas. Veja um exemplo de Policy que podemos attachar a um bucket do S3 permitindo que o Fulano possa pegar seus objetos.
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::my-bucket/*", "Principal": { "AWS": [ "arn:aws:iam::ACCOUNT_ID:user/fulano" ] } } ] }
De forma simplificada, a imagem abaixo mostra a diferença entre as duas.
Nos próximos artigos a respeito de IAM, vou descrever em detalhes cada item que compõe uma Policy.
Até lá.