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 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.
- JSON
-
-
{
"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.
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.
- JSON
-
-
{
"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:appstream:us-east-1:111122223333: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.
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.
- JSON
-
-
{
"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:appstream:us-east-1:111122223333: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/*"
}
]
}