¿Por qué mi usuario de IAM tiene acceso a los recursos del catálogo de datos incluso después de que sus permisos estén restringidos en Lake Formation?

5 minutos de lectura
0

He restringido los permisos de tabla para un usuario de AWS Lake Formation (por ejemplo, SELECT con ExcludedColumnNames). Sin embargo, el usuario puede seguir consultando la tabla con Amazon Athena.

Breve descripción

Lake Formation otorga el permiso Super al grupo IAMAllowedPrincipals de forma predeterminada. Este permiso se aplica a todos los recursos existentes del catálogo de datos de AWS Glue. Si Usar solo el control de acceso de IAM está habilitado, Lake Formation también otorga el permiso Super para nuevos recursos. Esto significa que las políticas de AWS Identity and Access Management (IAM) controlan el acceso a los recursos del catálogo de datos y a las ubicaciones de Amazon Simple Storage Service (Amazon S3). Para obtener más información, consulta About upgrading to the Lake Formation permissions model.

Para restringir el acceso, cambia la configuración predeterminada para asegurarte de que utiliza el modelo de permisos de Lake Formation para los recursos nuevos y existentes del catálogo de datos.

Resolución

Para actualizar la configuración de seguridad de todas las bases de datos y tablas nuevas del lago de datos, consulta Change Data Catalog settings.

Para actualizar la configuración de seguridad solo para ciertos recursos nuevos, crea el recurso y, a continuación, actualiza los permisos solo de ese recurso. Para obtener más información, consulta Secure existing Data Catalog resources.

El cambio en la configuración de seguridad predeterminada solo se aplica a los recursos que se crean después de actualizar la configuración de seguridad.

Para cambiar la configuración de seguridad de las bases de datos existentes, elimina explícitamente los permisos de IAMAllowedPrincipals en cada base de datos de la siguiente manera:

  1. Abre la consola de AWS Lake Formation.
  2. En el panel de navegación, en Catálogo de datos, selecciona Bases de datos.
  3. Selecciona el círculo situado junto a la base de datos que quieres actualizar.
  4. Elige Acciones y, a continuación, elige Editar.
  5. En Permisos predeterminados para las tablas de nueva creación, desactiva Usar solo el control de acceso de IAM para las tablas nuevas de esta base de datos.
  6. Elige Guardar.
  7. En la página Bases de datos, asegúrate de que la base de datos esté seleccionada. Elige Acciones y, a continuación, elige Revocar.
  8. En el cuadro de diálogo Revocar permisos, en la lista de usuarios y roles de IAM, desplázate hacia abajo hasta el encabezado Grupo y, a continuación, elige IAMAllowedPrincipals.
  9. En Permisos de base de datos, asegúrate de que esté seleccionada la opción Super y, a continuación, elige Revocar.

Para cambiar la configuración de seguridad de las tablas existentes, elimina explícitamente los permisos de IAMAllowedPrincipals en cada tabla de la siguiente manera:

  1. Abre la consola de AWS Lake Formation.
  2. En el panel de navegación, elige Tablas.
  3. En la página Tablas, selecciona el círculo situado junto a la tabla que quieras actualizar.
  4. Elige Acciones y, a continuación, elige Revocar.
  5. En el cuadro de diálogo Revocar permisos, en la lista de usuarios y roles de IAM, desplázate hacia abajo hasta el encabezado Grupo y, a continuación, elige IAMAllowedPrincipals
  6. En Permisos de tabla, asegúrate de que esté seleccionada la opción Super y, a continuación, elige Revocar

Nota: Asegúrate de que la ruta de Amazon S3 a la base de datos o la tabla esté registrada en Lake Formation.

Tras cambiar la configuración de seguridad de los recursos existentes, concede permisos de tabla al usuario o rol de IAM. Puedes hacerlo mediante la consola de Lake Formation o la interfaz de la línea de comandos de AWS (AWS CLI).

Nota: Si recibes errores al ejecutar los comandos de la AWS CLI,asegúrate de utilizar la versión más reciente de la AWS CLI.

A continuación se muestran ejemplos de comandos de la AWS CLI que otorgan el permiso SELECT en columnas específicas:

Permitir la opción SELECT solo en una columna específica:

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT"  --resource '{ "TableWithColumns": {"DatabaseName":"retail", "Name":"inventory", "ColumnNames": ["prodcode","location","period","withdrawals"]}}'

Excluir columnas (permitir la opción SELECT en todas las columnas, excepto en la columna que se especifica en ExcludedColumnNames):

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT"  --resource '{ "TableWithColumns": {"DatabaseName":"retail", "Name":"inventory", "ColumnWildcard": {"ExcludedColumnNames": ["location"]}}}'

Para realizar operaciones de Lake Formation, las entidades principales deben tener permisos de Lake Formation e IAM. Además, para consultar la tabla en Athena, el usuario también debe tener permiso para ejecutar consultas de Athena. Por ejemplo, para consultar una tabla de Athena cuando Lake Formation administra los permisos, el usuario debe tener los siguientes permisos de IAM:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "minimumAWSGlueLakeFormationAthenapermissiontorunselectqueryontable",
            "Effect": "Allow",
            "Action": [
                "lakeformation:GetDataAccess",
                "glue:SearchTables",
                "glue:GetTables",
                "glue:GetPartitions",
                "glue:GetDatabases",
                "glue:GetTable",
                "glue:GetDatabase",
                "athena:GetNamespace",
                "athena:ListWorkGroups",
                "athena:GetCatalogs",
                "athena:GetNamespaces",
                "athena:GetExecutionEngine",
                "athena:GetExecutionEngines",
                "athena:GetTables",
                "athena:GetTable"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AthenaPermissionToRunQueryInAWorkergroup",
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "athena:GetQueryResults",
                "athena:DeleteNamedQuery",
                "athena:GetNamedQuery",
                "athena:ListQueryExecutions",
                "athena:StopQueryExecution",
                "athena:GetQueryResultsStream",
                "athena:ListNamedQueries",
                "athena:CreateNamedQuery",
                "athena:GetQueryExecution",
                "athena:BatchGetNamedQuery",
                "athena:BatchGetQueryExecution"
            ],
            "Resource": [
                "arn:aws:athena:*:*:workgroup/*"
            ]
        },
        {
            "Sid": "allowS3PermissionToSaveAthenaQueryResults",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucketMultipartUploads",
                "s3:AbortMultipartUpload",
                "s3:CreateBucket",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": [
                "arn:aws:s3:::aws-athena-query-results-*"
            ]
        }
    ]
}

Información relacionada

Cambiar la configuración de seguridad predeteriminada de su lago de datos

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 años