Esas variables van tomando valor automáticamente al utilizar un bucle foreach.
$key se refiere a cada una de las claves del array. En cada iteración del bucle va tomando el valor de cada una de las claves del array.
$value se refiere a los valores del array y funciona de igual manera que he explicado antes.
Los nombres no tienen porque ser esos, tu puedes llamarlos como te interese.
Mira este enlace a la documentación oficial donde lo explican un poco más:
http://php.net/manual/es/control-structures.foreach.php