Prevenção contra “confused deputy” entre serviços no Amazon AppStream 2.0 - Amazon AppStream 2.0

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Prevenção contra “confused deputy” entre serviços no Amazon AppStream 2.0

O problema de “confused deputy” é um problema de segurança em que uma entidade que não tem permissão para executar uma ação coage outra entidade mais privilegiada a executar a ação. Na AWS, a personificação entre serviços pode deixar os recursos da conta vulneráveis ao problema de “confused deputy”. A personificação entre serviços ocorre quando um serviço (o serviço de chamada) chama outro serviço (o serviço chamado). O serviço de chamada pode manipular o serviço chamado para que ele use as respectivas permissões com o objetivo de acessar os recursos do cliente de uma forma na qual o serviço de chamada não tem permissão para atuar sozinho. Para evitar isso, o AWS fornece ferramentas que ajudam você a proteger os dados para todos os serviços com entidades principais de serviço que têm acesso aos recursos em sua conta.

Recomendamos o uso das chaves globais de contexto de condição aws:SourceArn e aws:SourceAccount em políticas de recursos para limitar as permissões ao acessar esses recursos. As diretrizes a seguir detalham as recomendações e os requisitos ao usar essas chaves para proteger recursos:

  • Use aws:SourceArn se quiser apenas um recurso associado ao acesso entre serviços.

  • Use aws:SourceAccount se quiser permitir que todos os recursos na conta especificada sejam associados ao uso entre serviços.

  • Se a chave aws:SourceArn não contiver um ID de conta, você deverá usar ambas as chaves globais de contexto de condição (aws:SourceArn e aws:SourceAccount) para limitar as permissões.

  • Se você utilizar ambas as chaves globais de contexto de condição e o valor aws:SourceArn contiver um ID de conta, a chave aws:SourceAccount deverá usar o mesmo ID de conta quando usada na mesma instrução de política.

A maneira mais eficaz de se proteger contra o problema de “confused deputy” é usar o nome do recurso da Amazon (ARN) exato do recurso que deseja permitir. Se você não souber o ARN completo do recurso, use a chave global de contexto de condição aws:SourceArn com curingas (como *) para as partes desconhecidas do ARN. Também é possível usar um curinga no ARN se quiser especificar vários recursos. Por exemplo, você pode formatar o ARN como arn:aws:servicename::region-name::your Conta da AWS ID:*.

Exemplo: prevenção contra “confused deputy” entre serviços em perfil de serviço do Amazon AppStream 2.0

O AppStream 2.0 assume um perfil de serviço usando uma variedade de ARNs de recurso, o que leva a uma instrução condicional complicada. Recomendamos usar um tipo de recurso curinga para evitar falhas inesperadas nos recursos do AppStream 2.0.

exemplo Condicional aws:SourceAccount:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "appstream.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "your Conta da AWS ID" } } } ] }
exemplo Condicional aws:SourceArn:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "appstream.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:{aws partition}:appstream:{your region name}:{your Conta da AWS ID}:*" } } } ] }

Exemplo: prevenção contra “confused deputy” entre serviços em perfil de máquina de frota do Amazon AppStream 2.0

exemplo Condicional aws:SourceAccount:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "appstream.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "your Conta da AWS ID" } } } ] }
exemplo Condicional aws:SourceArn:
nota

Se você quiser usar um perfil do IAM para várias frotas, recomendamos usar a chave global de contexto de condição aws:SourceArn com curingas (*) para corresponder a vários recursos de frota do AppStream 2.0.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "appstream.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:{aws partition}:appstream:{your region name}:{your Conta da AWS ID}:fleet/{your fleet name}" } } } ] }

Exemplo: prevenção contra “confused deputy” entre serviços em política de bucket do Amazon S3 para script de sessão de frotas elásticas do AppStream 2.0

exemplo Condicional aws:SourceAccount:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "appstream.amazonaws.com" ] }, "Action": "s3:GetObject", "Resource": "your session script S3 path", "Condition": { "StringEquals": { "aws:SourceAccount": "your Conta da AWS ID" } } } ] }
exemplo Condicional aws:SourceArn:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "appstream.amazonaws.com" ] }, "Action": "s3:GetObject", "Resource": "your session script S3 path", "Condition": { "ArnLike": { "aws:SourceArn": "arn:{aws partition}:appstream:{your region name}:{your Conta da AWS ID}:fleet/{your fleet name}" } } } ] }

Exemplo: prevenção contra “confused deputy” entre serviços em política de bucket do Amazon S3 para aplicações do AppStream 2.0

Quando você armazena dados em um bucket do Amazon S3, o bucket pode ser exposto a problemas de “confused deputy”. Isso pode deixar dados, como frotas elásticas, blocos de aplicações, scripts de configuração, ícones de aplicações e scripts de sessão, vulneráveis a agentes mal-intencionados.

Para evitar problemas de “confused deputy”, você pode especificar a condição aws:SourceAccount ou a condição aws:SourceArn na política de bucket do Amazon S3 para ELASTIC-FLEET-EXAMPLE-BUCKET.

As políticas de recursos a seguir mostram como evitar o problema de “confused deputy” com uma das seguintes opções:

  • O aws:SourceAccount com o ID da sua conta AWS

  • A chave global de contexto de condição aws:SourceArn

O AppStream 2.0 ainda não oferece suporte à prevenção contra “confused deputy” para ícones de aplicações. O serviço só oferece suporte a arquivos VHD e scripts de configuração. Se você tentar incluir condições adicionais para os ícones de aplicação, os ícones não serão exibidos para os usuários finais.

No exemplo a seguir, a política de bucket só permite o acesso aos recursos da frota elástica do AppStream 2.0 na conta do proprietário para acessar ELASTIC_FLEET_EXAMPLE_BUCKET.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ConfusedDeputyPreventionExamplePolicy", "Effect": "Allow", "Principal": { "Service": "appstream.amazonaws.com" }, "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/vhd-folder/*", "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/scripts/*" ], "Condition": { "StringEquals": { "aws:SourceAccount": "your Conta da AWS ID" } } }, { "Sid": "AllowRetrievalPermissionsToS3AppIconsForAppStream", "Effect": "Allow", "Principal": { "Service": "appstream.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/app-icons/*" } ] }

Você também pode usar a condição aws:SourceArn para limitar o acesso a recursos específicos.

nota

Se você não souber o ARN completo do recurso ou se quiser especificar vários recursos, use a chave global de contexto de condição aws:SourceArn com curingas (*) para as partes desconhecidas do ARN.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ConfusedDeputyPreventionExamplePolicy", "Effect": "Allow", "Principal": { "Service": "appstream.amazonaws.com" }, "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/vhd-folder/*", "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/scripts/*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:{aws-partition}:appstream:{your region name}:{your AWS account ID}:app-block/*" } } }, { "Sid": "AllowRetrievalPermissionsToS3AppIconsForAppStream", "Effect": "Allow", "Principal": { "Service": "appstream.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/app-icons/*" } ] }

Você também pode usar as condições aws:SourceArn e aws:SourceAccount para limitar o acesso a contas e recursos específicos.

nota

Se você não souber o ARN completo dos recursos ou se quiser especificar vários recursos, use a chave global de contexto de condição aws:SourceArn com curingas (*) para as partes desconhecidas do ARN.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ConfusedDeputyPreventionExamplePolicy", "Effect": "Allow", "Principal": { "Service": "appstream.amazonaws.com" }, "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/vhd-folder/*", "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/scripts/*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:{aws partition}:appstream:{your region name}:{your AWS account ID}:app-block/*" }, "StringEquals": { "aws:SourceAccount": "your AWS account ID" } } }, { "Sid": "AllowRetrievalPermissionsToS3AppIconsForAppStream", "Effect": "Allow", "Principal": { "Service": "appstream.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/app-icons/*" } ] }