SlideShare uma empresa Scribd logo
1 de 50
Seja um Ninja em AWS IAM
Claudia Charro, Arquiteta de Soluções
O que esperar desta sessão?
• Conhecer mais as capacidades do AWS Identity and Access
Management (IAM).
• Entender como utilizá-lo para refinar as permissões aos seus
recursos e garantir o princípio do menor privilégio.
• Cenários práticos.
Usuário
do IAM
Grupo do
IAM
Exceção Boa prática
Associa
Atribui
Policy
do
IAM
Atribui
Principais conceitos
A linguagem da Policy
• Especificação: Como são definidas as políticas de acesso.
• Aplicação: Como são avaliadas as políticas de acesso.
Cenário 1
O desenvolvedor Bob precisa de permissões para
trabalhar com instâncias EC2 na conta de desenvolvimento.
A empresa definiu que, por questões de custo, em
desenvolvimento somente podem ser usadas instâncias das
famílias t1.*, t2.*, m3.*.
Para isso, ele terá acesso total às funções sobre
Amazon EC2 (start, stop, describe etc.), mas só poderá lançar
instâncias das famílias t1.*, t2.*, m3.*.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "*",
"Condition": {
"StringNotLike": {
"ec2:InstanceType": [
"t1.*",
"t2.*",
"m3.*"
]
}
}
}
]
}
Que não tenham o valor
InstanceType = T1, T2 ou
M3.
Para todos os recursos
Nega permissão em
EC2:RunInstances
Policy
Qual foi o resultado?
Por que não
foi como
esperado?
… Mais a frente saberemos o motivo
Princípios da especificação da Policy
• Documento JSON.
{
"Statement":[{
"Effect":”Allow/Deny",
"Principal":”ARN ou Conta",
"Action":”Serviço:ações",
"Resource":”Amazon Resource Name
ARN",
"Condition":{
"condition":{
"key":"value" }
}
}
]
}
Permitir ou negar
Aplicação das Policies
DENY
Decisão final =
”NEGADO”
Sim
ALLOW
Decisão final =
“PERMITIDO”
Si
m
Não
Há
ALLOW ?
4
DENY
Decisão começa
com tudo negado
por padrão
1
Avaliar todas
as policies
aplicáveis
2
Não DENY
Decisão final =
“NEGADO”
5
Há DENY
Explícito?
3
Princípios da especificação da Policy
{
"Statement":[{
"Effect":”Allow/Deny",
"Principal":”ARN ou Conta",
"Action":”Serviço:ações",
"Resource":”Amazon Resource Name
ARN",
"Condition":{
"condition":{
"key":"value" }
}
}
]
}
Quem recebe a
permissão.
Só existe nas
policies baseadas
em recursos.
Principal
• Entidade que recebe as permissões.
<!-- Everyone (anonymous users) -->
"Principal":"AWS":"*"
<!–- Conta específica -->
"Principal":{"AWS":"arn:aws:iam::123456789012:root" }
"Principal":{"AWS":"123456789012"}
<!–- Um usuário do IAM -->
"Principal":"AWS":"arn:aws:iam::123456789012:user/username"
<!–- Acesso federado -->
"Principal":{"Federated":"www.amazon.com"}
"Principal": { "Federated": "arn:aws:iam::123456789012:saml-provider/provider-name" }
<!-- Specific service -->
"Principal":{"Service":"ec2.amazonaws.com"}
Amazon Resource Name
arn:partition:service:region:account-id:resource
Usuário
arn:aws:iam::123456789012:user/user_bob
Instâncias Amazon EC2
arn:aws:ec2:us-east-1:123456789012:instance/*
Princípios da especificação da Policy
{
"Statement":[{
"Effect":”Allow/Deny",
"Principal":”ARN ou Conta",
"Action":”Serviço:ações",
"Resource":”Amazon Resource Name
ARN",
"Condition":{
"condition":{
"key":"value" }
}
}
]
}
Quais serviços e
ações estão no
escopo da policy.
Action
• Escopo dos serviços e ações a que se refere a policy.
<!-- EC2 -->
"Action":"ec2:StartInstances"
<!-- IAM -->
"Action":"iam:CreateUser"
<!–- Amazon S3 -->
"Action":"s3:GetObject"
<!-– Múltiplos valores -->
"Action":["sqs:SendMessage","sqs:ReceiveMessage"]
<-- Wildcards (* ou ?) no nome da ação ->
"Action":"iam:*AccessKey*"
Princípios da especificação da Policy
{
"Statement":[{
"Effect":”Allow/Deny",
"Principal":”ARN ou Conta",
"Action":”Serviço:ações",
"Resource":”Amazon Resource Name ARN",
"Condition":{
"condition":{
"key":"value" }
}
}
]
}
Para quais
recursos valem as
permissões
Resource
• Recursos sobre os quais se aplicam as policies.
<-- Amazon SQS queue-->
"Resource":"arn:aws:sqs:us-west-2:123456789012:queue1"
<-- Várias tabelas do Amazon DynamoDB -->
"Resource":["arn:aws:dynamodb:us-west-2:123456789012:table/books_table",
"arn:aws:dynamodb:us-west-2:123456789012:table/magazines_table"]
<-- Todas as instâncias EC2 para em uma conta em uma região -->
"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*"
Princípios da especificação da Policy
{
"Statement":[{
"Effect":”Allow/Deny",
"Principal":”ARN ou Conta",
"Action":”Serviço:ações",
"Resource":”Amazon Resource Name ARN",
"Condition":{
"condition":{
"key":"value" }
}
}
]
}
Condições
restringem as
permissões
Condição
Permite um usuário acessar os recursos sob as condições:
• Data após as 11:00 da manhã de 01 de Janeiro de 2017
E
• Data antes das 3:00 da tarde de 31 de Dezembro de 2017
E
• A requisição foi originada de um IP pertencente aos ranges IP 192.0.2.0 /24 OU 203.0.113.0
/24.
"Condition" : {
"DateGreaterThan" : {"aws:CurrentTime" : "2017-01-01T11:00:00Z"},
"DateLessThan": {"aws:CurrentTime" : "2017-12-31T15:00:00Z"},
"IpAddress" : {"aws:SourceIp" : ["192.0.2.0/24", "203.0.113.0/24"]}
}
E
OU
Posso colocar variáveis nas policies?
Variáveis nas Policies
"Condition" : {
"DateGreaterThan" : {"aws:CurrentTime" : "2017-01-01T11:00:00Z"},
"DateLessThan": {"aws:CurrentTime" : "2017-12-31T15:00:00Z"},
"IpAddress" : {"aws:SourceIp" : ["192.0.2.0/24", "203.0.113.0/24"]}
}
Posso ter permissões entre contas?
AWS IAM Role
Usuário
do IAM
Permissões
Desenvolvedor
Acesso
Somente
Leitura
Assume
papéis
Outra conta
Acct ID: 222222222222
ReadyOnlyCrossAccount { "Statement": [
"Effect": "Allow",
"Action":[
"s3:Get*",
"s3:List*",
”cloudtrail:Get*",
”cloudtrail:List*”,
...entre outras
],
"Resource": "*"
}
]
}
Conta Desenv.
Acct ID: 111111111111
Autenticado como
user_bob
Assume role
ReadyOnlyCrossAccount
Troca para a conta 2 no
console da AWS
{ "Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::222222222222:role/ReadyOnlyRoleCrossAccount"
}
]
}
Policy atrelada ao
usuário para
permitir que ele
assuma a role
ReadyRoleCrossAcc
ount na conta de
produção
Permissões da role
ReadyOnyCrossAccount
STS
Bob

Mudar de Console como user_bob
arn:aws:iam::111111111111:user/user_bob
Acesso entre contas (cross-account role)
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": ["arn:aws:iam::111111111111:root"]
}
}]
}
Valor default – Trust Relationship
Permitir acesso entre contas para um
usuário do IAM
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": ["arn:aws:iam::111111111111:user/user_bob"]
}
}]
}
Modifica para especificar o usuário
exato que irá assumir a role.
Permitir acesso condicional entre contas
para um usuário do IAM
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"Service": "ec2.amazonaws.com”
}
}]
}
Modifica para especificar um serviço
que irá assumir a role.
Permitir acesso condicional entre contas
para um serviço
Cenário 2
Bob, o desenvolvedor, trabalha em uma empresa
parceira da AWS.
Para um projeto novo, Bob precisa de acesso
somente leitura à conta de seu cliente para fazer um
diagnóstico sobre os recursos que existem nesta conta.
Como colocar condições no nível
dos recursos?
Cenário 3
Bob e todos os desenvolvedores podem trabalhar
com instâncias Amazon EC2 na conta de
desenvolvimento.
Porém, Bob sendo desenvolvedor só pode trabalhar
sobre instâncias que foram criadas para ele, ou seja,
com o Bob como owner.
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "THISLIMITSACCESSTOOWNINSTANCES",
"Effect": "Allow",
"Action": ["ec2:RebootInstances",
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:TerminateInstances"
],
"Resource": "arn:aws:ec2:*:111111111111:instance/*",
"Condition": {
"StringEquals": {
"ec2:ResourceTag/Owner": "${aws:username}"
}
}
}
]
}
Somente permite se
atender à condição
Especifica a chave (usando
a tag) e o valor (variável)
Restringindo acesso às instâncias
Amazon EC2
Retomando o cenário 1
O desenvolvedor Bob precisa de permissões para
trabalhar com instâncias Amazon EC2 na conta de
desenvolvimento.
A empresa definiu que, por questões de custo, em
desenvolvimento somente podem ser usadas
instâncias das famílias t1.*, t2.*, m3.*.
Para isso, ele terá acesso total às
funcionalidades sobre Amazon EC2 (start, stop,
describe etc.), mas só poderá lançar instâncias das
famílias t1.*, t2.*, m3.*.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "*",
"Condition": {
"StringNotLike": {
"ec2:InstanceType": [
"t1.*",
"t2.*",
"m3.*"
]
}
}
}
]
}
Que não tenham o valor InstanceType
= T1, T2 ou M3.
Para todos os recursos
Nega permissão em EC2:RunInstances
Retomando o cenário 1
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*:012345678901:instance/*",
"Condition": {
"StringNotLikeIfExists": {
"ec2:InstanceType": [
"t1.*", "t2.*", "m3.*"
]
}
}
}
]
}
Somente se aplica às instâncias e com
a condição da chave existir.
Explicitamente nega o acesso a
RunInstances, para todas as regiões e
recursos se a condição for satisfeita.
Libera acesso a todas as ações em
instâncias Amazon EC2, assim será
possível criar security groups, atrelar
uma role.
Exemplo StringNotLikeIfExists
Administrando, Testando e Debugando
• Verifica:
• Erros no JSON
• Erros na sintaxe
• Formatação da Policy:
• On-demand
• Auto formatação
Policy Editor
Versões da Policy
Policy Generator
Policy simulator
AWS CloudTrail
Para saber mais…
• Página do AWS IAM:
http://aws.amazon.com/iam
• AWS Security Blog
https://aws.amazon.com/blogs/security/
OBRIGADA!!
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:Query",
"dynamodb:Put*",
"dynamodb:BatchWriteItem“
],
"Resource": ["arn:aws:dynamodb:us-east-1:531546565747:table/score"],
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:CognitoIdentity": ["${graph.facebook.com:id}"]
}
}
}]
}
Variável nas condições
Permite acesso aos itens do Dynamo cujo atributo CognitoIdentity seja
igual ao usuário federado com o facebook.
Anatomia de uma policy com variáveis
Lembra da primeira demonstração?
• A mensagem inclui:
– Se a requisição foi negada com um
DENY explícito ou implícito.
– O principal que fez a requisição.
– A ação.
– O recurso.
– As condições.
• Requer permissão para executar:
sts:DecodeAuthorizationMessage
A mensagem é codificada porque os detalhes do status
da autorização podem conter informações restritas ao
usuário!
• Additional information about the authorization status of a request
Output
Como saber o que falhou?
Compreendendo NotAction - ? Se der tempo
• Exceção.
• Exemplo: Quero permitir tudo, exceto operações no IAM.
{
"Version": "2012-10-17",
"Statement": [ {
"Effect": "Allow",
"NotAction": "iam:*",
"Resource": "*"
}
]
}
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": "iam:*",
"Resource": "*"
}
]
}
or
Esta policy não nega. O usuário pode ter outra
policy que libera IAM:*
Se você quer prevenir o usuário de ser capaz de acessar
APIs do IAM, use uma negação explícita.
Tem
diferença?

Mais conteúdo relacionado

Semelhante a Seja um ninja em AWS IAM

Semelhante a Seja um ninja em AWS IAM (20)

Visão Geral dos Serviços de Identidade, Diretório e Acesso da AWS - SID201 -...
Visão Geral dos Serviços de Identidade, Diretório e Acesso da AWS -  SID201 -...Visão Geral dos Serviços de Identidade, Diretório e Acesso da AWS -  SID201 -...
Visão Geral dos Serviços de Identidade, Diretório e Acesso da AWS - SID201 -...
 
Introdução ao Amazon EKS
Introdução ao Amazon EKSIntrodução ao Amazon EKS
Introdução ao Amazon EKS
 
Overview of AWS identity services Enabling and securing your cloud journey - ...
Overview of AWS identity services Enabling and securing your cloud journey - ...Overview of AWS identity services Enabling and securing your cloud journey - ...
Overview of AWS identity services Enabling and securing your cloud journey - ...
 
Inicie uma jornada segura para a nuvem
Inicie uma jornada segura para a nuvemInicie uma jornada segura para a nuvem
Inicie uma jornada segura para a nuvem
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS Lambda
 
Path to the future #2 - Internet das coisas com AWS IoT
Path to the future #2 - Internet das coisas com AWS IoTPath to the future #2 - Internet das coisas com AWS IoT
Path to the future #2 - Internet das coisas com AWS IoT
 
Deep dive de AWS IoT
Deep dive de AWS IoTDeep dive de AWS IoT
Deep dive de AWS IoT
 
Explorando a API Rest Jira Cloud
Explorando a API Rest Jira CloudExplorando a API Rest Jira Cloud
Explorando a API Rest Jira Cloud
 
AWS Webinar | Como usar AWS?
AWS Webinar | Como usar AWS?AWS Webinar | Como usar AWS?
AWS Webinar | Como usar AWS?
 
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS Lambda
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS Lambda
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS Lambda
 
Melhores Práticas de Segurança na AWS
Melhores Práticas de Segurança na AWS Melhores Práticas de Segurança na AWS
Melhores Práticas de Segurança na AWS
 
Criando Aplicações Serverless - ARC302 - Sao Paulo Summit
Criando Aplicações Serverless -  ARC302 - Sao Paulo SummitCriando Aplicações Serverless -  ARC302 - Sao Paulo Summit
Criando Aplicações Serverless - ARC302 - Sao Paulo Summit
 
Escalando com segurança na AWS
Escalando com segurança na AWSEscalando com segurança na AWS
Escalando com segurança na AWS
 
AWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvemAWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvem
 
AWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvemAWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvem
 
Levando Serverless para o Edge - ARC301 - Sao Paulo Summit
Levando Serverless para o Edge -  ARC301 - Sao Paulo SummitLevando Serverless para o Edge -  ARC301 - Sao Paulo Summit
Levando Serverless para o Edge - ARC301 - Sao Paulo Summit
 
Desenvolvimento de Aplicações em Container com AWS Fargate
Desenvolvimento de Aplicações em Container com AWS FargateDesenvolvimento de Aplicações em Container com AWS Fargate
Desenvolvimento de Aplicações em Container com AWS Fargate
 

Mais de Amazon Web Services LATAM

Mais de Amazon Web Services LATAM (20)

AWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e BackupAWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e Backup
 
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
 
AWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e BackupAWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e Backup
 
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
 
Automatice el proceso de entrega con CI/CD en AWS
Automatice el proceso de entrega con CI/CD en AWSAutomatice el proceso de entrega con CI/CD en AWS
Automatice el proceso de entrega con CI/CD en AWS
 
Automatize seu processo de entrega de software com CI/CD na AWS
Automatize seu processo de entrega de software com CI/CD na AWSAutomatize seu processo de entrega de software com CI/CD na AWS
Automatize seu processo de entrega de software com CI/CD na AWS
 
Cómo empezar con Amazon EKS
Cómo empezar con Amazon EKSCómo empezar con Amazon EKS
Cómo empezar con Amazon EKS
 
Como começar com Amazon EKS
Como começar com Amazon EKSComo começar com Amazon EKS
Como começar com Amazon EKS
 
Ransomware: como recuperar os seus dados na nuvem AWS
Ransomware: como recuperar os seus dados na nuvem AWSRansomware: como recuperar os seus dados na nuvem AWS
Ransomware: como recuperar os seus dados na nuvem AWS
 
Ransomware: cómo recuperar sus datos en la nube de AWS
Ransomware: cómo recuperar sus datos en la nube de AWSRansomware: cómo recuperar sus datos en la nube de AWS
Ransomware: cómo recuperar sus datos en la nube de AWS
 
Ransomware: Estratégias de Mitigação
Ransomware: Estratégias de MitigaçãoRansomware: Estratégias de Mitigação
Ransomware: Estratégias de Mitigação
 
Ransomware: Estratégias de Mitigación
Ransomware: Estratégias de MitigaciónRansomware: Estratégias de Mitigación
Ransomware: Estratégias de Mitigación
 
Aprenda a migrar y transferir datos al usar la nube de AWS
Aprenda a migrar y transferir datos al usar la nube de AWSAprenda a migrar y transferir datos al usar la nube de AWS
Aprenda a migrar y transferir datos al usar la nube de AWS
 
Aprenda como migrar e transferir dados ao utilizar a nuvem da AWS
Aprenda como migrar e transferir dados ao utilizar a nuvem da AWSAprenda como migrar e transferir dados ao utilizar a nuvem da AWS
Aprenda como migrar e transferir dados ao utilizar a nuvem da AWS
 
Cómo mover a un almacenamiento de archivos administrados
Cómo mover a un almacenamiento de archivos administradosCómo mover a un almacenamiento de archivos administrados
Cómo mover a un almacenamiento de archivos administrados
 
Simplifique su BI con AWS
Simplifique su BI con AWSSimplifique su BI con AWS
Simplifique su BI con AWS
 
Simplifique o seu BI com a AWS
Simplifique o seu BI com a AWSSimplifique o seu BI com a AWS
Simplifique o seu BI com a AWS
 
Os benefícios de migrar seus workloads de Big Data para a AWS
Os benefícios de migrar seus workloads de Big Data para a AWSOs benefícios de migrar seus workloads de Big Data para a AWS
Os benefícios de migrar seus workloads de Big Data para a AWS
 
Los beneficios de migrar sus cargas de trabajo de big data a AWS
Los beneficios de migrar sus cargas de trabajo de big data a AWSLos beneficios de migrar sus cargas de trabajo de big data a AWS
Los beneficios de migrar sus cargas de trabajo de big data a AWS
 
Bases de datos NoSQL en AWS
Bases de datos NoSQL en AWSBases de datos NoSQL en AWS
Bases de datos NoSQL en AWS
 

Último

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Último (6)

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 

Seja um ninja em AWS IAM

  • 1. Seja um Ninja em AWS IAM Claudia Charro, Arquiteta de Soluções
  • 2. O que esperar desta sessão? • Conhecer mais as capacidades do AWS Identity and Access Management (IAM). • Entender como utilizá-lo para refinar as permissões aos seus recursos e garantir o princípio do menor privilégio. • Cenários práticos.
  • 3. Usuário do IAM Grupo do IAM Exceção Boa prática Associa Atribui Policy do IAM Atribui Principais conceitos
  • 4. A linguagem da Policy • Especificação: Como são definidas as políticas de acesso. • Aplicação: Como são avaliadas as políticas de acesso.
  • 5. Cenário 1 O desenvolvedor Bob precisa de permissões para trabalhar com instâncias EC2 na conta de desenvolvimento. A empresa definiu que, por questões de custo, em desenvolvimento somente podem ser usadas instâncias das famílias t1.*, t2.*, m3.*. Para isso, ele terá acesso total às funções sobre Amazon EC2 (start, stop, describe etc.), mas só poderá lançar instâncias das famílias t1.*, t2.*, m3.*.
  • 6. { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:*", "Resource": "*" }, { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "StringNotLike": { "ec2:InstanceType": [ "t1.*", "t2.*", "m3.*" ] } } } ] } Que não tenham o valor InstanceType = T1, T2 ou M3. Para todos os recursos Nega permissão em EC2:RunInstances Policy
  • 7.
  • 8. Qual foi o resultado? Por que não foi como esperado? … Mais a frente saberemos o motivo
  • 9. Princípios da especificação da Policy • Documento JSON. { "Statement":[{ "Effect":”Allow/Deny", "Principal":”ARN ou Conta", "Action":”Serviço:ações", "Resource":”Amazon Resource Name ARN", "Condition":{ "condition":{ "key":"value" } } } ] } Permitir ou negar
  • 10. Aplicação das Policies DENY Decisão final = ”NEGADO” Sim ALLOW Decisão final = “PERMITIDO” Si m Não Há ALLOW ? 4 DENY Decisão começa com tudo negado por padrão 1 Avaliar todas as policies aplicáveis 2 Não DENY Decisão final = “NEGADO” 5 Há DENY Explícito? 3
  • 11. Princípios da especificação da Policy { "Statement":[{ "Effect":”Allow/Deny", "Principal":”ARN ou Conta", "Action":”Serviço:ações", "Resource":”Amazon Resource Name ARN", "Condition":{ "condition":{ "key":"value" } } } ] } Quem recebe a permissão. Só existe nas policies baseadas em recursos.
  • 12. Principal • Entidade que recebe as permissões. <!-- Everyone (anonymous users) --> "Principal":"AWS":"*" <!–- Conta específica --> "Principal":{"AWS":"arn:aws:iam::123456789012:root" } "Principal":{"AWS":"123456789012"} <!–- Um usuário do IAM --> "Principal":"AWS":"arn:aws:iam::123456789012:user/username" <!–- Acesso federado --> "Principal":{"Federated":"www.amazon.com"} "Principal": { "Federated": "arn:aws:iam::123456789012:saml-provider/provider-name" } <!-- Specific service --> "Principal":{"Service":"ec2.amazonaws.com"}
  • 14. Princípios da especificação da Policy { "Statement":[{ "Effect":”Allow/Deny", "Principal":”ARN ou Conta", "Action":”Serviço:ações", "Resource":”Amazon Resource Name ARN", "Condition":{ "condition":{ "key":"value" } } } ] } Quais serviços e ações estão no escopo da policy.
  • 15. Action • Escopo dos serviços e ações a que se refere a policy. <!-- EC2 --> "Action":"ec2:StartInstances" <!-- IAM --> "Action":"iam:CreateUser" <!–- Amazon S3 --> "Action":"s3:GetObject" <!-– Múltiplos valores --> "Action":["sqs:SendMessage","sqs:ReceiveMessage"] <-- Wildcards (* ou ?) no nome da ação -> "Action":"iam:*AccessKey*"
  • 16. Princípios da especificação da Policy { "Statement":[{ "Effect":”Allow/Deny", "Principal":”ARN ou Conta", "Action":”Serviço:ações", "Resource":”Amazon Resource Name ARN", "Condition":{ "condition":{ "key":"value" } } } ] } Para quais recursos valem as permissões
  • 17. Resource • Recursos sobre os quais se aplicam as policies. <-- Amazon SQS queue--> "Resource":"arn:aws:sqs:us-west-2:123456789012:queue1" <-- Várias tabelas do Amazon DynamoDB --> "Resource":["arn:aws:dynamodb:us-west-2:123456789012:table/books_table", "arn:aws:dynamodb:us-west-2:123456789012:table/magazines_table"] <-- Todas as instâncias EC2 para em uma conta em uma região --> "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*"
  • 18. Princípios da especificação da Policy { "Statement":[{ "Effect":”Allow/Deny", "Principal":”ARN ou Conta", "Action":”Serviço:ações", "Resource":”Amazon Resource Name ARN", "Condition":{ "condition":{ "key":"value" } } } ] } Condições restringem as permissões
  • 19. Condição Permite um usuário acessar os recursos sob as condições: • Data após as 11:00 da manhã de 01 de Janeiro de 2017 E • Data antes das 3:00 da tarde de 31 de Dezembro de 2017 E • A requisição foi originada de um IP pertencente aos ranges IP 192.0.2.0 /24 OU 203.0.113.0 /24. "Condition" : { "DateGreaterThan" : {"aws:CurrentTime" : "2017-01-01T11:00:00Z"}, "DateLessThan": {"aws:CurrentTime" : "2017-12-31T15:00:00Z"}, "IpAddress" : {"aws:SourceIp" : ["192.0.2.0/24", "203.0.113.0/24"]} } E OU
  • 20. Posso colocar variáveis nas policies?
  • 21. Variáveis nas Policies "Condition" : { "DateGreaterThan" : {"aws:CurrentTime" : "2017-01-01T11:00:00Z"}, "DateLessThan": {"aws:CurrentTime" : "2017-12-31T15:00:00Z"}, "IpAddress" : {"aws:SourceIp" : ["192.0.2.0/24", "203.0.113.0/24"]} }
  • 22. Posso ter permissões entre contas?
  • 23. AWS IAM Role Usuário do IAM Permissões Desenvolvedor Acesso Somente Leitura Assume papéis
  • 24. Outra conta Acct ID: 222222222222 ReadyOnlyCrossAccount { "Statement": [ "Effect": "Allow", "Action":[ "s3:Get*", "s3:List*", ”cloudtrail:Get*", ”cloudtrail:List*”, ...entre outras ], "Resource": "*" } ] } Conta Desenv. Acct ID: 111111111111 Autenticado como user_bob Assume role ReadyOnlyCrossAccount Troca para a conta 2 no console da AWS { "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::222222222222:role/ReadyOnlyRoleCrossAccount" } ] } Policy atrelada ao usuário para permitir que ele assuma a role ReadyRoleCrossAcc ount na conta de produção Permissões da role ReadyOnyCrossAccount STS Bob  Mudar de Console como user_bob arn:aws:iam::111111111111:user/user_bob Acesso entre contas (cross-account role)
  • 25. { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": ["arn:aws:iam::111111111111:root"] } }] } Valor default – Trust Relationship Permitir acesso entre contas para um usuário do IAM
  • 26. { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": ["arn:aws:iam::111111111111:user/user_bob"] } }] } Modifica para especificar o usuário exato que irá assumir a role. Permitir acesso condicional entre contas para um usuário do IAM
  • 27. { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "Service": "ec2.amazonaws.com” } }] } Modifica para especificar um serviço que irá assumir a role. Permitir acesso condicional entre contas para um serviço
  • 28. Cenário 2 Bob, o desenvolvedor, trabalha em uma empresa parceira da AWS. Para um projeto novo, Bob precisa de acesso somente leitura à conta de seu cliente para fazer um diagnóstico sobre os recursos que existem nesta conta.
  • 29.
  • 30. Como colocar condições no nível dos recursos?
  • 31. Cenário 3 Bob e todos os desenvolvedores podem trabalhar com instâncias Amazon EC2 na conta de desenvolvimento. Porém, Bob sendo desenvolvedor só pode trabalhar sobre instâncias que foram criadas para ele, ou seja, com o Bob como owner.
  • 32. { "Version": "2012-10-17", "Statement": [{ "Sid": "THISLIMITSACCESSTOOWNINSTANCES", "Effect": "Allow", "Action": ["ec2:RebootInstances", "ec2:StartInstances", "ec2:StopInstances", "ec2:TerminateInstances" ], "Resource": "arn:aws:ec2:*:111111111111:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/Owner": "${aws:username}" } } } ] } Somente permite se atender à condição Especifica a chave (usando a tag) e o valor (variável) Restringindo acesso às instâncias Amazon EC2
  • 33.
  • 34. Retomando o cenário 1 O desenvolvedor Bob precisa de permissões para trabalhar com instâncias Amazon EC2 na conta de desenvolvimento. A empresa definiu que, por questões de custo, em desenvolvimento somente podem ser usadas instâncias das famílias t1.*, t2.*, m3.*. Para isso, ele terá acesso total às funcionalidades sobre Amazon EC2 (start, stop, describe etc.), mas só poderá lançar instâncias das famílias t1.*, t2.*, m3.*.
  • 35. { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:*", "Resource": "*" }, { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "StringNotLike": { "ec2:InstanceType": [ "t1.*", "t2.*", "m3.*" ] } } } ] } Que não tenham o valor InstanceType = T1, T2 ou M3. Para todos os recursos Nega permissão em EC2:RunInstances Retomando o cenário 1
  • 36. { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:*", "Resource": "*" }, { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:012345678901:instance/*", "Condition": { "StringNotLikeIfExists": { "ec2:InstanceType": [ "t1.*", "t2.*", "m3.*" ] } } } ] } Somente se aplica às instâncias e com a condição da chave existir. Explicitamente nega o acesso a RunInstances, para todas as regiões e recursos se a condição for satisfeita. Libera acesso a todas as ações em instâncias Amazon EC2, assim será possível criar security groups, atrelar uma role. Exemplo StringNotLikeIfExists
  • 37.
  • 39. • Verifica: • Erros no JSON • Erros na sintaxe • Formatação da Policy: • On-demand • Auto formatação Policy Editor
  • 44. Para saber mais… • Página do AWS IAM: http://aws.amazon.com/iam • AWS Security Blog https://aws.amazon.com/blogs/security/
  • 46. { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:Put*", "dynamodb:BatchWriteItem“ ], "Resource": ["arn:aws:dynamodb:us-east-1:531546565747:table/score"], "Condition": { "ForAllValues:StringEquals": { "dynamodb:CognitoIdentity": ["${graph.facebook.com:id}"] } } }] } Variável nas condições Permite acesso aos itens do Dynamo cujo atributo CognitoIdentity seja igual ao usuário federado com o facebook. Anatomia de uma policy com variáveis
  • 47. Lembra da primeira demonstração?
  • 48. • A mensagem inclui: – Se a requisição foi negada com um DENY explícito ou implícito. – O principal que fez a requisição. – A ação. – O recurso. – As condições. • Requer permissão para executar: sts:DecodeAuthorizationMessage A mensagem é codificada porque os detalhes do status da autorização podem conter informações restritas ao usuário! • Additional information about the authorization status of a request Output Como saber o que falhou?
  • 49.
  • 50. Compreendendo NotAction - ? Se der tempo • Exceção. • Exemplo: Quero permitir tudo, exceto operações no IAM. { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "NotAction": "iam:*", "Resource": "*" } ] } { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "*", "Resource": "*" }, { "Effect": "Deny", "Action": "iam:*", "Resource": "*" } ] } or Esta policy não nega. O usuário pode ter outra policy que libera IAM:* Se você quer prevenir o usuário de ser capaz de acessar APIs do IAM, use uma negação explícita. Tem diferença?

Notas do Editor

  1. IAM policies are assigned to IAM users and groups. These users are bound by the permissions defined in the IAM policy.
  2. Enforcement: entender como as policies são interpretadas.
  3. Objetivo: controlar custos.
  4. Objetivo: controlar custos.
  5. Pode usar o alias? Uma entidade que tem o acesso liberado (allow) ou negado (deny) a um recurso. Representado por um Amazon Resource Name (ARN). Para as IAM policies, o elemento principal é implícito (i.e., o usuário, grupo, ou role associada).
  6. Pode usar o alias? Uma entidade que tem o acesso liberado (allow) ou negado (deny) a um recurso. Representado por um Amazon Resource Name (ARN). Para as IAM policies, o elemento principal é implícito (i.e., o usuário, grupo, ou role associada).
  7. Descreve o tipo de acesso que deve ser liberado (allow) ou negado (deny). Você encontra exemplos na documentação ou pode escolher em um drop-down list do editor de policies.
  8. O(s) objeto(s) de que fala a policy. Um Statement deve incluir o elemento Resource ou NotResource.
  9. O(s) objeto(s) de que fala a policy. Um Statement deve incluir o elemento Resource ou NotResource.
  10. Objetivo: controlar custos.
  11. Objetivo: controlar custos.
  12. Objetivo: controlar custos.
  13. https://awspolicygen.s3.amazonaws.com/policygen.html
  14. A versão é importante, porque senão ele vai tratar como literal. Tem versões anteriores?
  15. 1o não é Deny é uma exclusão. Se ele for colocado em um grupo administrador, ele vai ganhar o acesso. 2o O deny realmente impede ainda que haja outra policy negando. Permite especificar uma exceção em uma lista de ações. Pode simplificar a policy em relação a usar Action e excluir as ações. Exemplo: Quero permitir tudo exceto chamadas de APIs do IAM.