[AWS] [Seguridad] S3 Bucket Policy-Policy Bucket

En el último experimento "Estrategia IAM", aprendimos que algunas estrategias se pueden asignar a los usuarios de IAM, de modo que estos usuarios solo pueden otorgar permisos específicos a recursos específicos, y en la estrategia, también podemos controlar dinámicamente cada elemento mediante variables. .Una estrategia para los usuarios de IAM. Pero en algunos escenarios, necesitamos otorgar permisos a ciertos recursos. Por ejemplo, si hay un bucket de S3, queremos compartir los objetos en este bucket / bucket con una determinada cuenta de AWS o una determinada cuenta de AWS. Los usuarios de IAM, en este caso, necesitamos crear políticas basadas en recursos.
La política de bucket de S3 y la política de usuario de IAM son muy similares y ambas se definen mediante JSON. La diferencia es que en la política de bucket de S3, debe especificar el Principal (la cuenta o el usuario que tiene permiso para acceder a las operaciones y los recursos en la declaración. En el almacenamiento

En la política de depósito, el principal es el usuario, la cuenta, el servicio u otra entidad que es el titular del acceso), mientras que la política de usuario de IAM se adjunta al usuario y no necesita especificar el principal.

El siguiente es un ejemplo de una política de bucket de S3:

{
    "Version":"2012-10-17",
    "Id":"ExamplePolicy01",
    "Statement":[
        {
            "Sid":"ExampleStatement01",
            "Effect":"Allow",
            "Principal":{
                "AWS":"arn:aws-cn:iam::Account-ID:user/Dave"
            },
            "Action":[
                "s3:GetObject",
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource":[
                "arn:aws-cn:s3:::examplebucket/*",
                "arn:aws-cn:s3:::examplebucket"
            ]
        }
    ]
}

Hagámoslo mediante experimentos.

Tarea 1: crear una política de IAM

Cree una política de IAM para hacer públicos todos los objetos del depósito de S3, de modo que cualquier persona tenga permiso para acceder a los objetos del depósito de S3. De forma predeterminada, los objetos del depósito de S3 son privados y no se pueden publicar, por lo que primero debemos eliminar el estrategia de prohibir la divulgación.
La operación es la siguiente: Primero busque un depósito, como este ejemplo awsdemo2018, y luego en la interfaz "Permisos", haga clic en "Configuración de acceso público" - "Administrar políticas públicas de depósito" - "Editar", desmarque Seleccionar "Bloquear nuevo política de depósito público "y" Si el depósito tiene una política pública, bloquee el acceso público y entre cuentas ", luego guarde

Haga clic en "política de depósito" para agregar el permiso s3: GetObject al depósito. Tenga en cuenta que el depósito especificado en el campo Recurso de la política debe ser el mismo que el nombre del depósito actual. La estrategia de ejemplo es la siguiente (awsdemo2018 es el nombre del depósito para este experimento):

{
    "Version":"2012-10-17",
    "Statement":[
        {
            "Sid":"AddPerm",
            "Effect":"Allow",
            "Principal":"*",
            "Action":[
                "s3:GetObject"
            ],
            "Resource":[
                "arn:aws-cn:s3:::awsdemo2018/*"
            ]
        }
    ]
}

Una vez que se ha guardado correctamente, podemos ver una advertencia de que el depósito se ha hecho público.

Luego busque un archivo en el depósito actual, o cargue un archivo en el depósito actual, haga clic en el "enlace", puede acceder al objeto en el depósito S3 desde cualquier lugar de Internet.

Según la política actual, cualquier persona puede acceder a los objetos del depósito siempre que pueda obtener el enlace. Si queremos implementar funciones anti-hotlinking cuando estamos trabajando en una aplicación, por ejemplo, solo podemos referirnos a imágenes del sitio web actual, pero no podemos referirnos a imágenes de otros sitios web, podemos usar la función Condición de la política de depósito. para restringir el Referer de las solicitudes HTTP.

Ejemplo:
suba una imagen, como web.png, al depósito awsdemo2018. Además, cree otro depósito: awstemp2018, y consulte los pasos y estrategias anteriores para hacer público este depósito, cree un nuevo archivo test.html localmente, el contenido del archivo es el siguiente:
suba el archivo test.html al depósito awstemp2018.

En el diseño anti-hotlink, podemos establecer una política de depósito en el depósito awsdemo2018, y solo permitir la solicitud de https://s3.cn-north-1.amazonaws.com.cn/ para acceder a esta imagen si se solicita Si esto El referr no está incluido, se informará un error. La operación específica es la siguiente:
En la política de depósito awsdemo2018, agregue condición, establezca StringLike en aws: Referer, seguido de la dirección de la estación de origen, la política de ejemplo es la siguiente:

{
    "Version":"2012-10-17",
    "Id":"http referer policy example",
    "Statement":[
        {
            "Sid":"Allow get requests originating from www.example.com and example.com.",
            "Effect":"Allow",
            "Principal":"*",
            "Action":"s3:GetObject",
            "Resource":"arn:aws-cn:s3:::awsdemo2018/*",
            "Condition":{
                "StringLike":{
                    "aws:Referer":"https://s3.cn-north-1.amazonaws.com.cn/*"
                }
            }
        }
    ]
}

Después de guardar la política, accedemos directamente a la imagen web.png en el depósito awsdemo2018 y encontraremos un error de Acceso denegado.

Pero al cargar la imagen png a través de la página web test.html en el depósito awstemp2018, puede acceder a ella correctamente.

Análisis:
cuando accedemos al archivo test.html en el bucket awstemp2018 desde la red pública (el enlace del archivo es: https://s3.cn-north-1.amazonaws.com.cn/awstemp2018/test.html), cuando , Este archivo cargará la imagen web.png ubicada en el depósito awsdemo2018 y traerá el encabezado de referencia cuando lo solicite. El valor de referencia es el sitio web donde se encuentra el test.html actual: https: //s3.cn-north- 1. amazonaws.com.cn/, usando la función de depuración, puede ver que establecemos la Condición en la política. Este sitio web es consistente con la Condición que establecimos, por lo que la imagen se puede cargar. Pero cuando accedemos directamente a esta imagen, debido a que no hay un referente en la solicitud, se informa de un error.

En un entorno de producción, podemos establecer el referente como nuestro propio nombre de dominio, de modo que nadie más pueda robar directamente nuestros archivos en el depósito de S3.
La política de depósito de S3 también tiene muchas funciones avanzadas, como el control de permisos basado en la dirección IP del visitante y la autorización solo para los recursos de una determinada VPC. Espero que este experimento pueda extraer inferencias por analogía. Para obtener más información sobre esto, consulte: https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/example-bucket-policies.html

Referencia detallada del video tutorial: https://edu.51cto.com/center/course/lesson/index?id=533835)

Supongo que te gusta

Origin blog.csdn.net/u010478127/article/details/106853166
Recomendado
Clasificación